lib/riemann/dash/browser_config.rb in riemann-dash-0.2.9 vs lib/riemann/dash/browser_config.rb in riemann-dash-0.2.10
- old
+ new
@@ -1,62 +1,15 @@
module Riemann::Dash::BrowserConfig
- require 'multi_json'
- require 'fileutils'
- require 'pp'
def self.backend
@backend
end
def self.backend=(backend)
@backend = backend
end
- # TODO: this is gonna take significant restructuring of the dashboard itself,
- # but we should move to http://arxiv.org/abs/1201.1784 or equivalent CRDTs.
-
- # Given a function to extract a key from an element, and a list of elements,
- # returns a map of keys to elements. Keys are assumed unique.
- def self.index_by(keyfn, list)
- list.reduce({}) do |index, element|
- index[keyfn.call(element)] = element
- index
- end
- end
-
- # Merges two lists, given a key function which determines equivalent
- # elements, and a merge function to combine equivalent elements.
- def self.merge_lists(keyfn, mergefn, as, bs)
- asi = index_by keyfn, as
- bsi = index_by keyfn, bs
- ids = (as + bs).map(&keyfn).uniq.map do |key|
- mergefn.call asi[key], bsi[key]
- end
- end
-
- # Merge two workspaces together
- def self.merge_workspace(a, b)
- # TODO: workspace versions
- return a unless b
- return b unless a
- if (a['view']['version'] || 0) < (b['view']['version'] || 0)
- b
- else
- a
- end
- end
-
- # Merge a list of workspaces together
- def self.merge_workspaces(as, bs)
- return as unless bs
- return bs unless as
- merge_lists(lambda { |x| x['name'] },
- method(:merge_workspace),
- as,
- bs)
- end
-
# Merge two configs together
def self.merge_configs(a, b)
a.merge 'server' => (a['server'] or b['server']),
'server_type' => (a['server_type'] or b['server_type']),
'workspaces' => merge_workspaces(a['workspaces'], b['workspaces'])
@@ -67,6 +20,51 @@
end
def self.update(update)
backend.update(update)
end
+
+ # TODO: this is gonna take significant restructuring of the dashboard itself,
+ # but we should move to http://arxiv.org/abs/1201.1784 or equivalent CRDTs.
+
+ # Given a function to extract a key from an element, and a list of elements,
+ # returns a map of keys to elements. Keys are assumed unique.
+ def self.index_by(keyfn, list)
+ list.reduce({}) do |index, element|
+ index[keyfn.call(element)] = element
+ index
+ end
+ end
+
+ # Merges two lists, given a key function which determines equivalent
+ # elements, and a merge function to combine equivalent elements.
+ def self.merge_lists(keyfn, mergefn, as, bs)
+ asi = index_by keyfn, as
+ bsi = index_by keyfn, bs
+ ids = (as + bs).map(&keyfn).uniq.map do |key|
+ mergefn.call asi[key], bsi[key]
+ end
+ end
+
+ # Merge two workspaces together
+ def self.merge_workspace(a, b)
+ # TODO: workspace versions
+ return a unless b
+ return b unless a
+ if (a['view']['version'] || 0) < (b['view']['version'] || 0)
+ b
+ else
+ a
+ end
+ end
+
+ # Merge a list of workspaces together
+ def self.merge_workspaces(as, bs)
+ return as unless bs
+ return bs unless as
+
+ merge_lists(lambda { |x| x['name'] },
+ method(:merge_workspace),
+ as,
+ bs)
+ end
end