Skip to content

Commit 642bfcb

Browse files
authored
Merge pull request #940 from mediathekview/feature/configfilename
update configurationmanager to support configuration file name
2 parents cb44dfa + 16e2afa commit 642bfcb

19 files changed

+191
-124
lines changed

MServer-Config.yaml

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ senderIncluded:
2222
#- KIKA
2323
- DW
2424
#- BR
25+
#- PHOENIX
2526

2627
# If set the server will be awake after the crawler run and restarts the run after the given amount.
2728
#schedules:
@@ -52,7 +53,7 @@ filmlistSaveFormats:
5253

5354
# The paths where which filmlist should be safed to.
5455
filmlistSavePaths:
55-
# JSON: target/filmlists/filmliste.json
56+
JSON: target/filmlists/filmliste.json
5657
OLD_JSON: target/filmlists/filmliste_old.json
5758
# JSON_COMPRESSED_XZ: target/filmlists/filmliste.json.xz
5859
# OLD_JSON_COMPRESSED_XZ: target/filmlists/filmliste_old.json.xz
@@ -64,8 +65,8 @@ filmlistSavePaths:
6465
# The paths where which diff film list should be safed to.
6566
# If not set no difference film lists will be safed.
6667
filmlistDiffSavePaths:
67-
# JSON: target/filmlists/filmliste_diff.json
68-
# OLD_JSON: target/filmlists/filmliste_old_diff.json
68+
JSON: target/filmlists/filmliste_diff.json
69+
OLD_JSON: target/filmlists/filmliste_old_diff.json
6970
# JSON_COMPRESSED_XZ: target/filmlists/filmliste_diff.json.xz
7071
# OLD_JSON_COMPRESSED_XZ: target/filmlists/filmliste_old_diff.json.xz
7172
# JSON_COMPRESSED_GZIP: target/filmlists/filmliste_diff.json.gz
@@ -76,12 +77,12 @@ filmlistDiffSavePaths:
7677
#Sets if a filmlist hash file should be written
7778
writeFilmlistHashFileEnabled: true
7879
#The filmlist hash file path
79-
filmlistHashFilePath: target/filmlists/filmlist.hash
80+
filmlistHashFilePath: target/filmlists/filmlist.hash.xx
8081

8182
#Sets if a filmlist id file should be written
8283
writeFilmlistIdFileEnabled: true
8384
#The fimlist id file path
84-
filmlistIdFilePath: target/filmlists/filmlist.id
85+
filmlistIdFilePath: target/filmlists/filmlist.id.xx
8586

8687

8788
# import additional filmlist sources
@@ -181,7 +182,7 @@ copySettings:
181182
# En- / disables FTP
182183
copyEnabled: false
183184

184-
# The paths where to safe the film list files.SrfTopicOverviewTask
185+
# The paths where to safe the film list files.
185186
# WARNING: You can only set the path for film list formats you listed in "filmlistSaveFormats".
186187
# Required if enabled
187188
copyTargetFilePaths:

src/main/java/de/mediathekview/mserver/base/config/Log4JConfigurationFactory.java

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,19 @@ public class Log4JConfigurationFactory extends ConfigurationFactory {
4545

4646
private static MServerLogSettingsDTO logSettings;
4747

48+
public Log4JConfigurationFactory(MServerLogSettingsDTO logSettings) {
49+
Log4JConfigurationFactory.logSettings = logSettings;
50+
}
51+
52+
53+
public Log4JConfigurationFactory() {
54+
if (Log4JConfigurationFactory.logSettings == null) {
55+
Log4JConfigurationFactory.logSettings = new MServerConfigManager(MServerConfigManager.DEFAULT_CONFIG_FILE).getConfig().getLogSettings();
56+
}
57+
}
58+
4859
static Configuration createConfiguration(
4960
final String name, final ConfigurationBuilder<BuiltConfiguration> aBuilder) {
50-
logSettings = new MServerConfigManager().getConfig().getLogSettings();
5161

5262
aBuilder.setConfigurationName(name);
5363

src/main/java/de/mediathekview/mserver/base/config/MServerConfigDTO.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public class MServerConfigDTO extends MServerBasicConfigDTO implements ConfigDTO
1515
private final Boolean writeFilmlistIdFileEnabled;
1616
private final String filmlistIdFilePath;
1717
/** ignore certain film by title **/
18-
private final String ignoreFilmlistPath;
18+
private String ignoreFilmlistPath;
1919
/** add livestreams from external list **/
2020
private final ImportLivestreamConfiguration importLivestreamConfiguration;
2121
/** add additional filmlist from external **/
@@ -147,6 +147,10 @@ public Map<FilmlistFormats, String> getFilmlistSavePaths() {
147147
public void setFilmlistSavePaths(final Map<FilmlistFormats, String> filmlistSavePaths) {
148148
this.filmlistSavePaths = filmlistSavePaths;
149149
}
150+
151+
public void setIgnoreFilmlistPath(final String ignoreFilmlistPath) {
152+
this.ignoreFilmlistPath = ignoreFilmlistPath;
153+
}
150154

151155
public MServerLogSettingsDTO getLogSettings() {
152156
return logSettings;

src/main/java/de/mediathekview/mserver/base/config/MServerConfigManager.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,6 @@ public MServerConfigManager(final String fileName) {
1414
configFileName = fileName;
1515
}
1616

17-
public MServerConfigManager() {
18-
this(DEFAULT_CONFIG_FILE);
19-
}
20-
2117
/**
2218
* @param aSender The {@link Sender} for which the config will be loaded.
2319
* @return The Sender specific config.

src/main/java/de/mediathekview/mserver/base/utils/CheckUrlAvailability.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package de.mediathekview.mserver.base.utils;
22

33

4+
import java.util.concurrent.ForkJoinPool;
5+
46
import org.apache.logging.log4j.LogManager;
57
import org.apache.logging.log4j.Logger;
68

@@ -14,16 +16,19 @@
1416

1517
public class CheckUrlAvailability {
1618
private static final Logger LOG = LogManager.getLogger(CheckUrlAvailability.class);
19+
private final FileSizeDeterminer fsd;
20+
private int numberOfThreads = 10;
1721
private Long minFileSize = 2048L;
1822
private int removedCounter = 0;
1923
private long timeoutInMS = 1*60*1000L;
2024
private boolean timeout = false;
2125
private long start = 0;
22-
private FileSizeDeterminer fsd = new FileSizeDeterminer();
23-
24-
public CheckUrlAvailability(long minFileSize, long timeoutInSec) {
26+
27+
public CheckUrlAvailability(final long minFileSize, final long timeoutInSec, final int numberOfThreads) {
2528
this.minFileSize = minFileSize;
2629
this.timeoutInMS = timeoutInSec*1000;
30+
this.numberOfThreads = numberOfThreads;
31+
fsd = new FileSizeDeterminer(30L, 30L, numberOfThreads);
2732
}
2833

2934
public Filmlist getAvaiableFilmlist(final Filmlist importList) {
@@ -32,7 +37,14 @@ public Filmlist getAvaiableFilmlist(final Filmlist importList) {
3237
Filmlist filteredFilmlist = new Filmlist();
3338
filteredFilmlist.setCreationDate(importList.getCreationDate());
3439
filteredFilmlist.setListId(importList.getListId());
35-
importList.getFilms().values().stream().parallel().filter(this::isAvailable).forEach(filteredFilmlist::add);
40+
//
41+
ForkJoinPool customThreadPool = new ForkJoinPool(numberOfThreads);
42+
customThreadPool.submit(() -> importList.getFilms().values().parallelStream()
43+
.filter(this::isAvailable)
44+
.forEach(filteredFilmlist::add))
45+
.join();
46+
customThreadPool.shutdown();
47+
//
3648
LOG.debug("checked {} urls and removed {} in {} sec and timeout was reached: {}", importList.getFilms().size(), removedCounter, ((System.currentTimeMillis()-start)/1000), timeout);
3749
return filteredFilmlist;
3850
}
@@ -49,7 +61,7 @@ private boolean isAvailable(Film pFilm) {
4961
if (pFilm.getThema().equalsIgnoreCase("Livestream")) {
5062
// do not remove livestreams
5163
return true;
52-
} else if (ri.getCode() == 404) {
64+
} else if (!(ri.getCode() >= 200 && ri.getCode() < 300)) {
5365
LOG.debug("Film response ({}): {} # {} # {} # {} ", ri.getCode(), normalUrl, pFilm.getSender(), pFilm.getThema(), pFilm.getTitel());
5466
removedCounter++;
5567
return false;
@@ -66,11 +78,6 @@ private boolean isAvailable(Film pFilm) {
6678
removedCounter++;
6779
return false;
6880
}
69-
// just for debugging
70-
if (ri.getCode() != 200) {
71-
LOG.debug("Film not removed but status!=200 ({}): {} # {} # {} # {} ", ri.getCode(), normalUrl, pFilm.getSender(), pFilm.getThema(), pFilm.getTitel());
72-
}
73-
7481
return true;
7582
}
7683

src/main/java/de/mediathekview/mserver/crawler/CrawlerManager.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ public class CrawlerManager extends AbstractManager {
5757
private static final String FILMLIST_JSON_COMPRESSED_DEFAULT_NAME =
5858
FILMLIST_JSON_DEFAULT_NAME + ".xz";
5959
private static final Logger LOG = LogManager.getLogger(CrawlerManager.class);
60-
private static CrawlerManager instance;
6160
private final MServerConfigDTO config;
61+
private final MServerConfigManager rootConfig;
6262
private final ForkJoinPool forkJoinPool;
6363
private final Filmlist filmlist;
6464
private final IgnoreFilmFilter ingoreFilmFilter;
@@ -70,9 +70,9 @@ public class CrawlerManager extends AbstractManager {
7070
private final Collection<ProgressListener> copyProgressListeners;
7171
private final Filmlist differenceList;
7272

73-
private CrawlerManager() {
73+
public CrawlerManager(MServerConfigManager aMServerConfigManager) {
7474
super();
75-
final MServerConfigManager rootConfig = new MServerConfigManager();
75+
rootConfig = aMServerConfigManager;
7676
config = rootConfig.getConfig();
7777
ingoreFilmFilter = new IgnoreFilmFilter(config.getIgnoreFilmslistPath());
7878
executorService = Executors.newFixedThreadPool(config.getMaximumCpuThreads());
@@ -86,11 +86,8 @@ private CrawlerManager() {
8686
initializeCrawler(rootConfig);
8787
}
8888

89-
public static CrawlerManager getInstance() {
90-
if (instance == null) {
91-
instance = new CrawlerManager();
92-
}
93-
return instance;
89+
public MServerConfigManager getConfigManager() {
90+
return rootConfig;
9491
}
9592

9693
public void copyFilmlist() {
@@ -166,6 +163,7 @@ public void importLivestreamFilmlist() {
166163
}
167164

168165
public void importLivestreamFilmlist(final FilmlistFormats aFormat, final String aFilmlistLocation) {
166+
LOG.debug("importLivestreamFilmlist {}", aFilmlistLocation);
169167
try {
170168
final Optional<Filmlist> importedFilmlist;
171169
if (aFilmlistLocation.startsWith(HTTP)) {
@@ -194,7 +192,13 @@ public void importFilmlist(final ImportFilmlistConfiguration importFilmlistConfi
194192
}
195193
//
196194
if (importFilmlistConfiguration.isCheckImportListUrl() && importedFilmlist.isPresent() ) {
197-
importedFilmlist = Optional.of(new CheckUrlAvailability(config.getCheckImportListUrlMinSize() ,config.getCheckImportListUrlTimeoutInSec()).getAvaiableFilmlist(importedFilmlist.get()));
195+
importedFilmlist = Optional.of(
196+
new CheckUrlAvailability(
197+
config.getCheckImportListUrlMinSize(),
198+
config.getCheckImportListUrlTimeoutInSec(),
199+
config.getMaximumCpuThreads())
200+
.getAvaiableFilmlist(importedFilmlist.get())
201+
);
198202
}
199203
//
200204
final Filmlist difflist = new Filmlist(UUID.randomUUID(), LocalDateTime.now());

src/main/java/de/mediathekview/mserver/crawler/basic/IgnoreFilmFilter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public IgnoreFilmFilter(String configFileNameAndPath) {
3131
} else {
3232
ignoreFilmTitles = read(configFileNameAndPath);
3333
}
34-
LOG.debug("ignoreFilmList setup with {} entries", size());
34+
LOG.debug("ignoreFilmList {} setup with {} entries", configFileNameAndPath, size());
3535
} catch (IOException e) {
3636
LOG.error("Could not read ignorefilmlist from {} ",configFileNameAndPath, e);
3737
}

src/main/java/de/mediathekview/mserver/crawler/dw/DWTaskBase.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
import com.google.gson.GsonBuilder;
66

77
import de.mediathekview.mlib.daten.Sender;
8-
import de.mediathekview.mserver.base.config.MServerConfigManager;
98
import de.mediathekview.mserver.crawler.basic.AbstractCrawler;
109
import de.mediathekview.mserver.crawler.basic.AbstractRestTask;
1110
import de.mediathekview.mserver.crawler.basic.CrawlerUrlDTO;
@@ -25,9 +24,7 @@
2524
public abstract class DWTaskBase<T, D extends CrawlerUrlDTO> extends AbstractRestTask<T, D> {
2625
private static final Logger LOG = LogManager.getLogger(DWTaskBase.class);
2726

28-
private static final RateLimiter limiter =
29-
RateLimiter.create(
30-
new MServerConfigManager().getSenderConfig(Sender.DW).getMaximumRequestsPerSecond());
27+
private static RateLimiter limiter = null;
3128

3229
private final transient GsonBuilder gsonBuilder;
3330

@@ -81,6 +78,9 @@ private Response executeRequest(final WebTarget aTarget) {
8178
request.header(
8279
ZdfConstants.HEADER_AUTHENTIFICATION, AUTHORIZATION_BEARER + authKey.get());
8380
}
81+
if (limiter == null) {
82+
limiter = RateLimiter.create(crawler.getRuntimeConfig().getSenderConfig(Sender.DW).getMaximumRequestsPerSecond());
83+
}
8484
limiter.acquire();
8585
return request.header(HEADER_ACCEPT_ENCODING, ENCODING_GZIP).get();
8686
}

src/main/java/de/mediathekview/mserver/crawler/funk/json/FunkVideoDeserializer.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,7 @@ protected FilmInfoDto mapToElement(final JsonObject jsonObject) {
7373
}
7474

7575
private MServerConfigDTO getRuntimeConfig() {
76-
return crawler
77-
.map(AbstractCrawler::getRuntimeConfig)
78-
.orElseGet(() -> new MServerConfigManager().getConfig());
76+
return crawler.get().getRuntimeConfig();
7977
}
8078

8179
private String createNexxCloudUrl(final String entityId) {

src/main/java/de/mediathekview/mserver/crawler/sr/tasks/SrFilmDetailTask.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
import org.jsoup.nodes.Node;
1919
import org.jsoup.select.Elements;
2020

21-
import java.io.IOException;
2221
import java.io.InputStreamReader;
2322
import java.net.MalformedURLException;
2423
import java.net.URL;

src/main/java/de/mediathekview/mserver/crawler/sr/tasks/SrRateLimitedDocumentTask.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ public abstract class SrRateLimitedDocumentTask<T, D extends CrawlerUrlDTO>
1414

1515
private static final long serialVersionUID = -4077182368484515410L;
1616

17-
private static final RateLimiter LIMITER =
18-
RateLimiter.create(
19-
new MServerConfigManager().getSenderConfig(Sender.SR).getMaximumRequestsPerSecond());
17+
private static RateLimiter LIMITER = null;
2018

2119
SrRateLimitedDocumentTask(
2220
final AbstractCrawler crawler,
@@ -26,6 +24,9 @@ public abstract class SrRateLimitedDocumentTask<T, D extends CrawlerUrlDTO>
2624

2725
@Override
2826
protected void processElement(final D urlDTO) {
27+
if (LIMITER== null) {
28+
LIMITER = RateLimiter.create(crawler.getRuntimeConfig().getSenderConfig(Sender.SR).getMaximumRequestsPerSecond());
29+
}
2930
LIMITER.acquire();
3031
super.processElement(urlDTO);
3132
}

src/main/java/de/mediathekview/mserver/crawler/zdf/tasks/ZdfTaskBase.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.google.gson.Gson;
55
import com.google.gson.GsonBuilder;
66
import de.mediathekview.mlib.daten.Sender;
7-
import de.mediathekview.mserver.base.config.MServerConfigManager;
87
import de.mediathekview.mserver.crawler.basic.AbstractCrawler;
98
import de.mediathekview.mserver.crawler.basic.AbstractRestTask;
109
import de.mediathekview.mserver.crawler.basic.CrawlerUrlDTO;
@@ -22,9 +21,7 @@
2221
public abstract class ZdfTaskBase<T, D extends CrawlerUrlDTO> extends AbstractRestTask<T, D> {
2322
private static final Logger LOG = LogManager.getLogger(ZdfTaskBase.class);
2423

25-
private static final RateLimiter limiter =
26-
RateLimiter.create(
27-
new MServerConfigManager().getSenderConfig(Sender.ZDF).getMaximumRequestsPerSecond());
24+
private static RateLimiter limiter = null;
2825

2926
private final GsonBuilder gsonBuilder;
3027

@@ -76,6 +73,10 @@ private Response executeRequest(final WebTarget aTarget) {
7673
request.header(
7774
ZdfConstants.HEADER_AUTHENTIFICATION, AUTHORIZATION_BEARER + authKey.get());
7875
}
76+
if (limiter == null) {
77+
limiter = RateLimiter.create(crawler.getRuntimeConfig().getSenderConfig(Sender.ZDF).getMaximumRequestsPerSecond());
78+
}
79+
7980
limiter.acquire();
8081
return request.header(HEADER_ACCEPT_ENCODING, ENCODING_GZIP).get();
8182
}

0 commit comments

Comments
 (0)