3
3
import dev .nincodedo .ninbot .components .stream .banner .GameBanner ;
4
4
import dev .nincodedo .ninbot .components .stream .banner .GameBannerBuilder ;
5
5
import dev .nincodedo .ninbot .components .stream .banner .GameBannerRepository ;
6
- import dev .nincodedo .nincord .StreamUtils ;
6
+ import dev .nincodedo .nincord .util .StreamUtils ;
7
+ import io .micrometer .core .instrument .Counter ;
8
+ import io .micrometer .core .instrument .Metrics ;
7
9
import io .micrometer .core .instrument .util .NamedThreadFactory ;
8
10
import lombok .extern .slf4j .Slf4j ;
9
11
import org .imgscalr .Scalr ;
@@ -28,6 +30,7 @@ public class SteamGridDBBannerBuilder extends GameBannerBuilder {
28
30
29
31
private SteamGridDBFeign steamGridDBFeign ;
30
32
private Random random ;
33
+ private Counter bannersGenerated = Metrics .counter ("bot.stream.banners.generated.count" );
31
34
32
35
public SteamGridDBBannerBuilder (SteamGridDBFeign steamGridDBFeign , GameBannerRepository gameBannerRepository ) {
33
36
super (gameBannerRepository , Executors .newCachedThreadPool (new NamedThreadFactory ("game-banner-builder" )));
@@ -42,16 +45,22 @@ private Optional<GameBanner> randomBanner(List<GameBanner> gameBanners) {
42
45
private List <GameBanner > generateGameBanners (String gameTitle , int gameId , List <GameImage > logos ,
43
46
List <GameImage > heroes ) {
44
47
var allBanners = gameBannerRepository .findAllByGameTitle (gameTitle );
48
+
45
49
List <GameBanner > gameBanners = new ArrayList <>();
46
50
log .trace ("Generating banners for {}" , gameTitle );
47
- for (int i = 0 ; i < 3 ; i ++) {
51
+ int iterations = 0 ;
52
+ while (iterations < 12 && gameBanners .size () < 3 ) {
48
53
var logo = logos .get (random .nextInt (logos .size ()));
49
54
var hero = heroes .get (random .nextInt (heroes .size ()));
50
55
var gameBanner = allBanners .stream ()
51
56
.filter (gameBanner1 -> gameBanner1 .getLogoId () == logo .id ()
52
57
&& gameBanner1 .getBackgroundId () == hero .id ())
53
58
.findFirst ()
54
59
.orElse (new GameBanner ());
60
+ iterations ++;
61
+ if (gameBanner .getScore () < 0 ) {
62
+ continue ;
63
+ }
55
64
gameBanner .setGameTitle (gameTitle );
56
65
gameBanner .setGameId (gameId );
57
66
gameBanner .setLogoId (logo .id ());
@@ -63,7 +72,8 @@ private List<GameBanner> generateGameBanners(String gameTitle, int gameId, List<
63
72
gameBanners .add (gameBanner );
64
73
allBanners .add (gameBanner );
65
74
}
66
- log .debug ("Finished with {} game banners generated" , gameBanners .size ());
75
+ bannersGenerated .increment (gameBanners .size ());
76
+ log .debug ("Finished with {} game banners generated in {} iterations" , gameBanners .size (), iterations );
67
77
return gameBanners ;
68
78
}
69
79
0 commit comments