Sha256: f9a44468dc7a006208cb20d542889ae7a7299be341b3349e32fb63e71479a1e0

Contents?: true

Size: 1.54 KB

Versions: 28

Compression:

Stored size: 1.54 KB

Contents

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
  class << self
    attr_accessor :counters

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

    def reset
      @counters = nil
    end

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

    def to_json
      counters.to_json
    end
  end
end

class MessageCache
  include ApiHelpers

  class << self
    attr_accessor :message_cache

    def message_cache
      @message_cache ||= {}
    end

    def reset
      @message_cache = nil
    end

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

      message_cache[cache_key] = payload
    end

    def fetch(cache_key)
      message_cache[cache_key].to_json
    end
  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

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
chef-13.11.3 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.10.4 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.10.0 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.9.4 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-14.2.0 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-14.1.12 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-14.1.1 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.9.1 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-14.0.202-universal-mingw32 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-14.0.202 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-14.0.190 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.8.5 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.8.3 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.8.0 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.7.16-universal-mingw32 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.7.16 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.6.4-universal-mingw32 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.6.4 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.6.0-universal-mingw32 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb
chef-13.6.0 acceptance/data-collector/.acceptance/data-collector-test/files/default/api.rb