2014-08-17 14:16:30 +02:00
|
|
|
package com.commafeed;
|
|
|
|
|
|
2017-07-05 21:56:00 -05:00
|
|
|
import java.net.InetSocketAddress;
|
|
|
|
|
import java.util.concurrent.TimeUnit;
|
2014-08-17 14:16:30 +02:00
|
|
|
import lombok.Getter;
|
|
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
|
|
|
|
|
|
import org.hibernate.SessionFactory;
|
|
|
|
|
|
|
|
|
|
import com.codahale.metrics.MetricRegistry;
|
2017-07-05 21:56:00 -05:00
|
|
|
import com.codahale.metrics.graphite.Graphite;
|
|
|
|
|
import com.codahale.metrics.graphite.GraphiteReporter;
|
|
|
|
|
import com.codahale.metrics.MetricFilter;
|
|
|
|
|
import com.commafeed.CommaFeedConfiguration.ApplicationSettings;
|
2014-08-17 14:16:30 +02:00
|
|
|
import com.commafeed.CommaFeedConfiguration.CacheType;
|
|
|
|
|
import com.commafeed.backend.cache.CacheService;
|
|
|
|
|
import com.commafeed.backend.cache.NoopCacheService;
|
|
|
|
|
import com.commafeed.backend.cache.RedisCacheService;
|
2014-10-26 12:25:44 +01:00
|
|
|
import com.commafeed.backend.favicon.AbstractFaviconFetcher;
|
2014-10-28 16:36:09 +01:00
|
|
|
import com.commafeed.backend.favicon.DefaultFaviconFetcher;
|
2014-11-07 15:02:11 +01:00
|
|
|
import com.commafeed.backend.favicon.FacebookFaviconFetcher;
|
2014-10-26 12:25:44 +01:00
|
|
|
import com.commafeed.backend.favicon.YoutubeFaviconFetcher;
|
2014-12-04 10:22:57 +01:00
|
|
|
import com.commafeed.backend.task.OldEntriesCleanupTask;
|
2014-11-24 12:46:43 +01:00
|
|
|
import com.commafeed.backend.task.OldStatusesCleanupTask;
|
2014-12-11 08:46:09 +01:00
|
|
|
import com.commafeed.backend.task.OrphanedContentsCleanupTask;
|
|
|
|
|
import com.commafeed.backend.task.OrphanedFeedsCleanupTask;
|
2014-11-24 12:46:43 +01:00
|
|
|
import com.commafeed.backend.task.ScheduledTask;
|
2019-03-17 06:44:09 +01:00
|
|
|
import com.commafeed.backend.urlprovider.FeedURLProvider;
|
|
|
|
|
import com.commafeed.backend.urlprovider.InPageReferenceFeedURLProvider;
|
|
|
|
|
import com.commafeed.backend.urlprovider.YoutubeFeedURLProvider;
|
2014-08-17 14:16:30 +02:00
|
|
|
import com.google.inject.AbstractModule;
|
|
|
|
|
import com.google.inject.Provides;
|
2014-10-26 12:25:44 +01:00
|
|
|
import com.google.inject.multibindings.Multibinder;
|
2014-08-17 14:16:30 +02:00
|
|
|
|
|
|
|
|
@RequiredArgsConstructor
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class CommaFeedModule extends AbstractModule {
|
|
|
|
|
|
|
|
|
|
@Getter(onMethod = @__({ @Provides }))
|
|
|
|
|
private final SessionFactory sessionFactory;
|
|
|
|
|
|
|
|
|
|
@Getter(onMethod = @__({ @Provides }))
|
|
|
|
|
private final CommaFeedConfiguration config;
|
|
|
|
|
|
|
|
|
|
@Getter(onMethod = @__({ @Provides }))
|
|
|
|
|
private final MetricRegistry metrics;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
protected void configure() {
|
|
|
|
|
CacheService cacheService = config.getApplicationSettings().getCache() == CacheType.NOOP ? new NoopCacheService()
|
2014-09-22 09:51:55 +02:00
|
|
|
: new RedisCacheService(config.getRedisPoolFactory().build());
|
2014-08-17 14:16:30 +02:00
|
|
|
log.info("using cache {}", cacheService.getClass());
|
|
|
|
|
bind(CacheService.class).toInstance(cacheService);
|
2014-10-26 12:25:44 +01:00
|
|
|
|
2014-11-24 12:46:43 +01:00
|
|
|
Multibinder<AbstractFaviconFetcher> faviconMultibinder = Multibinder.newSetBinder(binder(), AbstractFaviconFetcher.class);
|
|
|
|
|
faviconMultibinder.addBinding().to(YoutubeFaviconFetcher.class);
|
|
|
|
|
faviconMultibinder.addBinding().to(FacebookFaviconFetcher.class);
|
|
|
|
|
faviconMultibinder.addBinding().to(DefaultFaviconFetcher.class);
|
|
|
|
|
|
2019-03-17 06:44:09 +01:00
|
|
|
Multibinder<FeedURLProvider> urlProviderMultibinder = Multibinder.newSetBinder(binder(), FeedURLProvider.class);
|
|
|
|
|
urlProviderMultibinder.addBinding().to(InPageReferenceFeedURLProvider.class);
|
|
|
|
|
urlProviderMultibinder.addBinding().to(YoutubeFeedURLProvider.class);
|
|
|
|
|
|
2014-11-24 12:46:43 +01:00
|
|
|
Multibinder<ScheduledTask> taskMultibinder = Multibinder.newSetBinder(binder(), ScheduledTask.class);
|
|
|
|
|
taskMultibinder.addBinding().to(OldStatusesCleanupTask.class);
|
2014-12-04 10:22:57 +01:00
|
|
|
taskMultibinder.addBinding().to(OldEntriesCleanupTask.class);
|
2014-12-11 08:46:09 +01:00
|
|
|
taskMultibinder.addBinding().to(OrphanedFeedsCleanupTask.class);
|
|
|
|
|
taskMultibinder.addBinding().to(OrphanedContentsCleanupTask.class);
|
2017-07-05 21:56:00 -05:00
|
|
|
|
|
|
|
|
ApplicationSettings settings = config.getApplicationSettings();
|
|
|
|
|
|
|
|
|
|
if (settings.isGraphiteEnabled()) {
|
|
|
|
|
final String graphitePrefix = settings.getGraphitePrefix();
|
|
|
|
|
final String graphiteHost = settings.getGraphiteHost();
|
|
|
|
|
final int graphitePort = settings.getGraphitePort();
|
|
|
|
|
final int graphiteInterval = settings.getGraphiteInterval();
|
|
|
|
|
|
|
|
|
|
log.info("Graphite Metrics will be sent to host={}, port={}, prefix={}, interval={}sec", graphiteHost, graphitePort, graphitePrefix, graphiteInterval);
|
|
|
|
|
|
|
|
|
|
final Graphite graphite = new Graphite(new InetSocketAddress(graphiteHost, graphitePort));
|
|
|
|
|
final GraphiteReporter reporter = GraphiteReporter.forRegistry(metrics)
|
|
|
|
|
.prefixedWith(graphitePrefix)
|
|
|
|
|
.convertRatesTo(TimeUnit.SECONDS)
|
|
|
|
|
.convertDurationsTo(TimeUnit.MILLISECONDS)
|
|
|
|
|
.filter(MetricFilter.ALL)
|
|
|
|
|
.build(graphite);
|
|
|
|
|
reporter.start(graphiteInterval, TimeUnit.SECONDS);
|
|
|
|
|
} else {
|
|
|
|
|
log.info("Graphite Metrics Disabled. Metrics will not be sent.");
|
|
|
|
|
}
|
2014-08-17 14:16:30 +02:00
|
|
|
}
|
|
|
|
|
}
|