summaryrefslogtreecommitdiff
path: root/acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
blob: 3fb2c730b0591734ddbdce9ecc0e247268611232 (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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
require "json"
require "sinatra"

class Chef
  class Node
    # dummy class for JSON parsing
  end
end

module ApiHelpers
  def self.payload_type(payload)
    message_type = payload["message_type"]
    status       = payload["status"]

    message_type == "run_converge" ? "#{message_type}.#{status}" : message_type
  end
end

class Counter
  def self.reset
    @@counters = Hash.new { |h, k| h[k] = 0 }
  end

  def self.increment(payload)
    counter_name = ApiHelpers.payload_type(payload)
    @@counters[counter_name] += 1
  end

  def self.to_json
    @@counters.to_json
  end
end

class MessageCache
  include ApiHelpers

  def self.reset
    @@message_cache = {}
  end

  def self.store(payload)
    cache_key = ApiHelpers.payload_type(payload)

    @@message_cache[cache_key] = payload
  end

  def self.fetch(cache_key)
    @@message_cache[cache_key].to_json
  end
end

Counter.reset

get "/" do
  "Data Collector API server"
end

get "/reset-counters" do
  Counter.reset
  "counters reset"
end

get "/counters" do
  Counter.to_json
end

get "/cache/:key" do |cache_key|
  MessageCache.fetch(cache_key)
end

get "/reset-cache" do
  MessageCache.reset
  "cache reset"
end

post "/data-collector/v0" do
  body = request.body.read
  payload = JSON.load(body)

  Counter.increment(payload)
  MessageCache.store(payload)

  status 201
  "message received"
end