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
|