Class EngineRuntime

java.lang.Object
ch.rswk.meta.engine.EngineRuntime
All Implemented Interfaces:
Executor

@Singleton public class EngineRuntime extends Object implements Executor
EngineRuntime provides executor services, ServiceManager for service lifecycle, centralized access to Metric, Health-Check and AlertRegistry.

Implements Executor to provide convenience to submit and handle async tasks. See ListenableFuture.

  • Field Details

    • LOG

      private static final org.slf4j.Logger LOG
    • WATCH_DELAY

      public static final int WATCH_DELAY
      See Also:
    • DAILY_SCHEDULE

      private static final Duration DAILY_SCHEDULE
    • MIN_DAILY_DELAY

      private static final int MIN_DAILY_DELAY
      See Also:
    • RUNTIME_METRIC_PREFIX

      private static final String RUNTIME_METRIC_PREFIX
      See Also:
    • SERVICE_NAME_JOINER

      private static final Collector<CharSequence,?,String> SERVICE_NAME_JOINER
    • UNHEALTHY_SERVICE_STATES

      private static final Predicate<com.google.common.util.concurrent.Service.State> UNHEALTHY_SERVICE_STATES
    • alertRegistry

      private final AlertRegistry alertRegistry
    • config

      private final EngineRuntime.EngineRuntimeConfig config
    • eventBus

      private final EngineEventBus eventBus
    • executor

      private final com.google.common.util.concurrent.ListeningExecutorService executor
    • healthCheckRegistry

      private final com.codahale.metrics.health.HealthCheckRegistry healthCheckRegistry
    • metricRegistry

      private final com.codahale.metrics.MetricRegistry metricRegistry
    • scheduledExecutor

      private final com.google.common.util.concurrent.ListeningScheduledExecutorService scheduledExecutor
    • scheduler

      private final com.github.benmanes.caffeine.cache.Scheduler scheduler
    • serviceManagerProvider

      private final javax.inject.Provider<com.google.common.util.concurrent.ServiceManager> serviceManagerProvider
    • watchService

      private final WatchService watchService
    • watchersByFileName

      private final Map<String,EngineRuntime.FileWatcher> watchersByFileName
    • running

      private volatile boolean running
    • startDateTime

      private OffsetDateTime startDateTime
    • watchHandle

      private ScheduledFuture<?> watchHandle
  • Constructor Details

    • EngineRuntime

      @Inject public EngineRuntime(AlertRegistry alertRegistry, EngineRuntime.EngineRuntimeConfig config, EngineEventBus eventBus, com.google.common.util.concurrent.ListeningExecutorService executor, com.codahale.metrics.health.HealthCheckRegistry healthCheckRegistry, com.codahale.metrics.MetricRegistry metricRegistry, com.google.common.util.concurrent.ListeningScheduledExecutorService scheduledExecutor, javax.inject.Provider<com.google.common.util.concurrent.ServiceManager> serviceManagerProvider, Set<EngineRuntime.FileWatcher> watchers)
  • Method Details

    • startUp

      public void startUp()
    • registerFileWatcher

      public void registerFileWatcher(EngineRuntime.FileWatcher watcher)
    • checkForFileChanges

      private void checkForFileChanges()
    • getServiceInfo

      public com.fasterxml.jackson.databind.node.ObjectNode getServiceInfo()
    • getServiceName

      private String getServiceName(Object service)
    • awaitServicesRunning

      public boolean awaitServicesRunning(com.google.common.util.concurrent.Service... services)
    • awaitServicesTerminated

      public boolean awaitServicesTerminated(com.google.common.util.concurrent.Service... services)
    • awaitServices

      private static boolean awaitServices(Consumer<com.google.common.util.concurrent.Service> await, com.google.common.util.concurrent.Service... services)
    • shutDown

      public void shutDown()
    • cancelFuture

      public static void cancelFuture(@Nullable Future<?> f)
    • shutdownAndAwaitTermination

      public void shutdownAndAwaitTermination(ExecutorService executor)
    • eventBus

      public EngineEventBus eventBus()
    • metricRegistry

      public com.codahale.metrics.MetricRegistry metricRegistry()
    • healthCheckRegistry

      public com.codahale.metrics.health.HealthCheckRegistry healthCheckRegistry()
    • alertRegistry

      public AlertRegistry alertRegistry()
    • isHealthy

      public boolean isHealthy()
    • isServiceManagerHealthy

      public boolean isServiceManagerHealthy()
    • getUptime

      public Duration getUptime()
    • getUnhealthyService

      public Set<String> getUnhealthyService()
    • getServices

      public <T> List<T> getServices(Class<T> type)
    • submit

      public <T> com.google.common.util.concurrent.ListenableFuture<T> submit(Callable<T> task)
      See Also:
      • ListeningExecutorService.submit(Callable)
    • submit

      public void submit(Runnable task)
      See Also:
      • ListeningExecutorService.submit(Runnable)
    • schedule

      public com.google.common.util.concurrent.ListenableScheduledFuture<?> schedule(Runnable command, Duration delay)
      See Also:
      • ListeningScheduledExecutorService.schedule(Runnable, Duration)
    • schedule

      public <T> com.google.common.util.concurrent.ListenableScheduledFuture<T> schedule(Callable<T> callable, Duration delay)
      See Also:
      • ListeningScheduledExecutorService.schedule(Runnable, Duration)
    • scheduleAtFixedRate

      public com.google.common.util.concurrent.ListenableScheduledFuture<?> scheduleAtFixedRate(Runnable command, Duration initialDelay, Duration period)
      See Also:
      • ListeningScheduledExecutorService.scheduleAtFixedRate(Runnable, Duration, Duration)
    • scheduleWithFixedDelay

      public com.google.common.util.concurrent.ListenableScheduledFuture<?> scheduleWithFixedDelay(Runnable command, Duration delay, Duration initialDelay)
      See Also:
      • ListeningScheduledExecutorService.scheduleWithFixedDelay(Runnable, Duration, Duration)
    • scheduleNightly

      public com.google.common.util.concurrent.ListenableScheduledFuture<?> scheduleNightly(Runnable command)
    • scheduleDaily

      public com.google.common.util.concurrent.ListenableScheduledFuture<?> scheduleDaily(Runnable command, int hour, int minute)
    • execute

      public void execute(Runnable command)
      Specified by:
      execute in interface Executor
    • scheduler

      public com.github.benmanes.caffeine.cache.Scheduler scheduler()
    • getWatchService

      private static WatchService getWatchService()
    • newMetricRegistry

      public static com.codahale.metrics.MetricRegistry newMetricRegistry()
    • putStatsMetrics

      private static void putStatsMetrics(Map<String,com.codahale.metrics.Metric> metrics, com.github.benmanes.caffeine.cache.stats.CacheStats stats)
    • newHealthCheckRegistry

      public static com.codahale.metrics.health.HealthCheckRegistry newHealthCheckRegistry()