View Javadoc
1   package org.kuali.common.jute.runtime;
2   
3   import static java.lang.management.ManagementFactory.getOperatingSystemMXBean;
4   import static org.kuali.common.jute.base.Optionals.fromNegativeToAbsent;
5   
6   import java.util.List;
7   
8   import javax.inject.Provider;
9   
10  import org.kuali.common.jute.runtime.annotation.GarbageCollectionEvents;
11  import org.kuali.common.jute.runtime.annotation.ProcessId;
12  import org.kuali.common.jute.runtime.annotation.Processors;
13  import org.kuali.common.jute.runtime.annotation.SystemLoadAverage;
14  
15  import com.google.common.base.Optional;
16  import com.google.inject.AbstractModule;
17  import com.google.inject.TypeLiteral;
18  
19  public class RuntimeModule extends AbstractModule {
20  
21      @Override
22      protected void configure() {
23          bindConstant().annotatedWith(Processors.class).to(Runtime.getRuntime().availableProcessors());
24          bind(Memory.class).toProvider(MemoryProvider.INSTANCE);
25          bind(Uptime.class).toProvider(UptimeProvider.INSTANCE);
26          bind(new TypeLiteral<Optional<Integer>>() {}).annotatedWith(ProcessId.class).toProvider(ProcessIdProvider.INSTANCE).asEagerSingleton();
27          bind(ClassLoading.class).toProvider(ClassLoadingProvider.INSTANCE);
28          bind(Threads.class).toProvider(ThreadsProvider.INSTANCE);
29          bind(new TypeLiteral<List<GarbageCollectionEvent>>() {}).annotatedWith(GarbageCollectionEvents.class).toProvider(GarbageCollectionEventsProvider.INSTANCE);
30          bind(new TypeLiteral<Optional<Double>>() {}).annotatedWith(SystemLoadAverage.class).toProvider(SystemLoadAverageProvider.INSTANCE);
31          bind(VirtualRuntime.class).toProvider(VirtualRuntime.Builder.class);
32      }
33  
34      private enum MemoryProvider implements Provider<Memory> {
35          INSTANCE;
36          @Override
37          public Memory get() {
38              return Memory.build();
39          }
40      }
41  
42      private enum SystemLoadAverageProvider implements Provider<Optional<Double>> {
43          INSTANCE;
44          @Override
45          public Optional<Double> get() {
46              return fromNegativeToAbsent(getOperatingSystemMXBean().getSystemLoadAverage());
47          }
48      }
49  
50      private enum UptimeProvider implements Provider<Uptime> {
51          INSTANCE;
52          @Override
53          public Uptime get() {
54              return Uptime.build();
55          }
56      }
57  
58      private enum ClassLoadingProvider implements Provider<ClassLoading> {
59          INSTANCE;
60          @Override
61          public ClassLoading get() {
62              return ClassLoading.build();
63          }
64      }
65  
66      private enum GarbageCollectionEventsProvider implements Provider<List<GarbageCollectionEvent>> {
67          INSTANCE;
68          @Override
69          public List<GarbageCollectionEvent> get() {
70              return GarbageCollectionEvent.buildAll();
71          }
72      }
73  
74      private enum ThreadsProvider implements Provider<Threads> {
75          INSTANCE;
76          @Override
77          public Threads get() {
78              return Threads.build();
79          }
80      }
81  
82  }