Class: Aikido::Zen::WorkerProcess::Agent::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/aikido/zen/worker_process/agent/server.rb

Defined Under Namespace

Classes: RequestKind

Instance Method Summary collapse

Constructor Details

#initialize(config: Aikido::Zen.config) ⇒ Server

Returns a new instance of Server.



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 6

def initialize(config: Aikido::Zen.config)
  @config = config

  @rpc_server = Aikido::Zen::RPC::Server.new(Aikido::Zen.secret)

  @rpc_server.handle("ping") do |respond|
    respond.call(nil)
  end

  @rpc_server.handle("updated_settings") do |respond|
    respond.call(updated_settings)
  end

  @rpc_server.handle("send_collector_events") do |respond, events_data|
    respond.call(nil)
    send_collector_events(events_data)
  end

  @rpc_server.handle("calculate_rate_limits") do |respond, route_data, ip, actor_data|
    result = calculate_rate_limits(route_data, ip, actor_data)
    respond.call(result&.as_json)
  end
end

Instance Method Details

#calculate_rate_limits(route_data, ip, actor_data) ⇒ Object



81
82
83
84
85
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 81

def calculate_rate_limits(route_data, ip, actor_data)
  actor = Aikido::Zen::Actor.from_json(actor_data) if actor_data
  route = Aikido::Zen::Route.from_json(route_data)
  Aikido::Zen.rate_limiter.calculate_rate_limits(RequestKind.new(route, nil, ip, actor))
end

#closeObject



42
43
44
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 42

def close
  @rpc_server.close
end

#hostObject



30
31
32
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 30

def host
  @rpc_server.host
end

#portObject



34
35
36
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 34

def port
  @rpc_server.port
end

#send_collector_events(events_data) ⇒ Object



74
75
76
77
78
79
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 74

def send_collector_events(events_data)
  events_data.each do |event_data|
    event = Aikido::Zen::Collector::Event.from_json(event_data)
    Aikido::Zen.collector.add_event(event)
  end
end

#startObject



46
47
48
49
50
51
52
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 46

def start
  @config.logger.info("Starting RPC Server...")

  @rpc_server.start

  @started_at = Time.now.utc
end

#started?Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 38

def started?
  !!@started_at
end

#stopObject



54
55
56
57
58
59
60
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 54

def stop
  @config.logger.info("Stopping RPC Server...")

  @rpc_server.stop

  @started_at = nil
end

#updated_settingsObject



67
68
69
70
71
72
# File 'lib/aikido/zen/worker_process/agent/server.rb', line 67

def updated_settings
  {
    "config" => Aikido::Zen.api_cache.runtime_config,
    "firewall_lists" => Aikido::Zen.api_cache.runtime_firewall_lists
  }
end