summaryrefslogtreecommitdiff
path: root/lib/killjoy/startup.rb
blob: f0bc9a16b044b6406353695b2a210ee375ce9f0d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
module Killjoy
  class Startup
    def initialize(container)
      @container = container
    end

    def run
      configure(@container)
      yield @container
    end

    private

    def configure(container)
      container.register(:cassandra_configuration) do |x|
        Killjoy::Cassandra::DatabaseConfiguration.new
      end.as_singleton

      container.register(:cluster) do |x|
        configuration = x.resolve(:cassandra_configuration)
        ::Cassandra.cluster(
          compression: :lz4,
          consistency: :local_quorum,
          hosts: configuration.hosts,
          logger: Killjoy.logger,
          nodelay: true,
          port: configuration.port,
          timeout: nil,
          idle_timeout: nil,
          trace: true,
        )
      end.as_singleton

      container.register(:session) do |x|
        keyspace = x.resolve(:cassandra_configuration).keyspace
        x.resolve(:cluster).connect(keyspace)
      end.as_singleton

      container.register(:mongo_client) do |x|
        connection_string = ENV.fetch("MONGO_CONNECTION_STRING", 'mongodb://127.0.0.1:27017/killjoy')
        ::Mongo::Client.new(connection_string, logger: Killjoy.logger)
      end.as_singleton

      container.register(:writer) do |x|
        session = x.resolve(:session)
        writers = x.resolve_all(:cassandra_writer)
        Killjoy::Cassandra::Writer.new(session, writers)
      end

      [
        Killjoy::Cassandra::LogLineWriter
      ].each do |writer|
        container.register(:cassandra_writer) do |x|
          writer.new(x.resolve(:session))
        end
      end
    end
  end
end