Module: Marty::Util
- Defined in:
- lib/marty/util.rb
Class Method Summary collapse
-
.background_report(script_name, node_name, params, force) ⇒ Object
Run a report as a promise and return its promise ID.
- .db_in_recovery? ⇒ Boolean
- .deep_round(obj, digits) ⇒ Object
-
.gen_report_path(script, node, params = {}) ⇒ Object
generates the report path to report described by script, node, and params.
- .get_posting ⇒ Object
- .get_posting_time ⇒ Object
- .human_to_pg_range(r) ⇒ Object
- .logger ⇒ Object
-
.marty_path ⇒ Object
route path to where Marty is mounted.
- .pg_range_match(r) ⇒ Object
- .pg_range_to_human(r) ⇒ Object
- .set_posting_id(sid) ⇒ Object
- .warped? ⇒ Boolean
Class Method Details
.background_report(script_name, node_name, params, force) ⇒ Object
Run a report as a promise and return its promise ID.
112 113 114 115 116 117 118 119 120 121 122 123 |
# File 'lib/marty/util.rb', line 112 def self.background_report(script_name, node_name, params, force) engine = Marty::ScriptSet.new.get_engine(script_name) res = engine.background_eval(node_name, params, ["result", "title", "format"], ) promise_id = res.__promise__.id res.force if force promise_id end |
.db_in_recovery? ⇒ Boolean
85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/marty/util.rb', line 85 def self.db_in_recovery? status = false begin sql = 'select pg_is_in_recovery();' result = ActiveRecord::Base.connection.execute(sql) status = result[0]['pg_is_in_recovery'] == 't' if result && result[0] rescue => e Marty::Util.logger.error 'unable to determine recovery status' end status end |
.deep_round(obj, digits) ⇒ Object
97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'lib/marty/util.rb', line 97 def self.deep_round(obj, digits) case obj when Array obj.map {|o| deep_round(o, digits)} when Hash obj.inject({}) { |result, (key, value)| result[key] = deep_round(value, digits) result } else obj.is_a?(Float)? obj.round(digits) : obj end end |
.gen_report_path(script, node, params = {}) ⇒ Object
generates the report path to report described by script, node, and params
126 127 128 129 130 131 132 133 134 |
# File 'lib/marty/util.rb', line 126 def self.gen_report_path(script, node, params = {}) engine = Marty::ScriptSet.new.get_engine(script) format = engine.evaluate(node, 'format') title = params.delete(:title) || engine.evaluate(node, 'title') data = ({selected_script_name: script, selected_node: node} + params).to_json URI.encode("#{Marty::Util.marty_path}/report?data=#{data}"\ "&reptitle=#{title}&format=#{format}") end |
.get_posting ⇒ Object
8 9 10 11 12 |
# File 'lib/marty/util.rb', line 8 def self.get_posting sid = Netzke::Base.session && Netzke::Base.session[:posting] return unless sid.is_a? Integer sid && Marty::Posting.find_by_id(sid) end |
.get_posting_time ⇒ Object
14 15 16 17 |
# File 'lib/marty/util.rb', line 14 def self.get_posting_time snap = self.get_posting snap ? snap.created_dt : Float::INFINITY end |
.human_to_pg_range(r) ⇒ Object
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 |
# File 'lib/marty/util.rb', line 58 def self.human_to_pg_range(r) return r if r == "empty" m = /\A ((?<op0>\>|\>=)(?<start>[^\<\>\=]*?))? ((?<op1>\<|\<=)(?<end>[^\<\>\=]*?))? \z/x.match(r) raise "bad range #{r}" unless m if m[:op0] open = m[:op0] == ">" ? "(" : "[" start = "#{open}#{m[:start]}" else start = "[" end if m[:op1] close = m[:op1] == "<" ? ")" : "]" ends = "#{m[:end]}#{close}" else ends = "]" end "#{start},#{ends}" end |
.logger ⇒ Object
23 24 25 |
# File 'lib/marty/util.rb', line 23 def self.logger @@s_logger ||= Rails.logger || Logger.new($stderr) end |
.marty_path ⇒ Object
route path to where Marty is mounted
28 29 30 |
# File 'lib/marty/util.rb', line 28 def self.marty_path Rails.application.routes.named_routes[:marty].path.spec end |
.pg_range_match(r) ⇒ Object
32 33 34 |
# File 'lib/marty/util.rb', line 32 def self.pg_range_match(r) /\A(?<open>\[|\()(?<start>.*?),(?<end>.*?)(?<close>\]|\))\z/.match(r) end |
.pg_range_to_human(r) ⇒ Object
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/marty/util.rb', line 36 def self.pg_range_to_human(r) return r if r == "empty" || r.nil? m = pg_range_match(r) raise "bad PG range #{r}" unless m if m[:start] == "" res = "" else op = m[:open] == "(" ? ">" : ">=" res = "#{op}#{m[:start]}" end if m[:end] != "" op = m[:close] == ")" ? "<" : "<=" res += "#{op}#{m[:end]}" end res end |
.set_posting_id(sid) ⇒ Object
2 3 4 5 6 |
# File 'lib/marty/util.rb', line 2 def self.set_posting_id(sid) snap = Marty::Posting.find_by_id(sid) sid = nil if snap && (snap.created_dt == Float::INFINITY) Netzke::Base.session[:posting] = sid end |
.warped? ⇒ Boolean
19 20 21 |
# File 'lib/marty/util.rb', line 19 def self.warped? self.get_posting_time != Float::INFINITY end |