matt 1.0.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/matt.rb +9 -0
- data/lib/matt/command.rb +8 -0
- data/lib/matt/configuration.rb +6 -0
- data/lib/matt/datasource.rb +1 -4
- data/lib/matt/exporter.rb +4 -3
- data/lib/matt/exporter/sql.rb +9 -2
- data/lib/matt/measure.rb +1 -4
- data/lib/matt/support.rb +1 -0
- data/lib/matt/support/participant.rb +23 -0
- data/lib/matt/support/puts.rb +14 -0
- data/lib/matt/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 92deceb672378cd120f32646aa25b2359ed71dd6f839725b4b9f5f6399e61830
|
4
|
+
data.tar.gz: b7e1f62d36921e21e5e5ef5d78c925500989f9fa6808c6f365bd80c3eeb6617a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c661c1e3a8560513026e2d48cc435742e7db307866a0546006c2304290c809a5b912ee53eda7743f1be5980c90e9c36d9d7227698904dde9661cdb77c21b71ba
|
7
|
+
data.tar.gz: b518ca0a0758c9828bb1ffcdbf30f85f851098007868a5fa91cf1ab5480c2794531ad4e310efee78d6f64daecd968b614f58afa7940e19ce1aa929514d5c1493
|
data/lib/matt.rb
CHANGED
@@ -7,6 +7,9 @@ require 'path'
|
|
7
7
|
require 'bmg/sequel'
|
8
8
|
module Matt
|
9
9
|
|
10
|
+
class Error < StandardError; end
|
11
|
+
class UnexpectedError < Error; end
|
12
|
+
|
10
13
|
def env(which, default = nil)
|
11
14
|
val = ENV.has_key?(which) ? ENV[which] : default
|
12
15
|
val = val.strip if val.is_a?(String)
|
@@ -14,6 +17,12 @@ module Matt
|
|
14
17
|
end
|
15
18
|
module_function :env
|
16
19
|
|
20
|
+
def env!(which)
|
21
|
+
raise Matt::Error, "Missing env var `#{which}`" unless ENV.has_key?(which)
|
22
|
+
env(which)
|
23
|
+
end
|
24
|
+
module_function :env!
|
25
|
+
|
17
26
|
def alltime_predicate
|
18
27
|
Predicate.tautology
|
19
28
|
end
|
data/lib/matt/command.rb
CHANGED
@@ -16,6 +16,8 @@
|
|
16
16
|
#/ --to=exporter,... Override the default exporters
|
17
17
|
#/ --json Use json when displaying measures on console
|
18
18
|
#/ --csv Use csv when displaying measures on console (default)
|
19
|
+
#/ --silent Do not print any info/debug messages
|
20
|
+
#/ --verbose Print debug information in addition to info messages
|
19
21
|
#/ -h, --help Show this help message
|
20
22
|
#/ --version Show matt version
|
21
23
|
#/
|
@@ -169,6 +171,12 @@ module Matt
|
|
169
171
|
puts_out "Matt v#{VERSION} - (c) Enspirit SRL"
|
170
172
|
abort
|
171
173
|
end
|
174
|
+
opts.on("--silent") do
|
175
|
+
self.configuration.debug_level = Configuration::DEBUG_SILENT
|
176
|
+
end
|
177
|
+
opts.on("--verbose") do
|
178
|
+
self.configuration.debug_level = Configuration::DEBUG_VERBOSE
|
179
|
+
end
|
172
180
|
opts.on("-h", "--help", "Prints this help") do
|
173
181
|
do_help
|
174
182
|
abort
|
data/lib/matt/configuration.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
module Matt
|
2
2
|
class Configuration
|
3
3
|
|
4
|
+
DEBUG_SILENT = 0
|
5
|
+
DEBUG_INFO = 1
|
6
|
+
DEBUG_VERBOSE = 2
|
7
|
+
|
4
8
|
def initialize(folder)
|
5
9
|
@folder = folder
|
6
10
|
@stdout = $stdout
|
@@ -9,12 +13,14 @@ module Matt
|
|
9
13
|
:write_headers => true
|
10
14
|
}
|
11
15
|
@at_predicate = Matt.yesterday_predicate
|
16
|
+
@debug_level = DEBUG_INFO
|
12
17
|
yield(self) if block_given?
|
13
18
|
end
|
14
19
|
attr_accessor :folder
|
15
20
|
attr_accessor :stdout, :stderr
|
16
21
|
attr_accessor :csv_options
|
17
22
|
attr_accessor :at_predicate
|
23
|
+
attr_accessor :debug_level
|
18
24
|
|
19
25
|
def datasources_folder
|
20
26
|
folder/"datasources"
|
data/lib/matt/datasource.rb
CHANGED
data/lib/matt/exporter.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
module Matt
|
2
2
|
module Exporter
|
3
|
-
include Support::
|
3
|
+
include Support::Participant
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
def export(measure, data)
|
6
|
+
raise NotImplementedError, "#{self} should implement `export`"
|
7
|
+
end
|
7
8
|
|
8
9
|
end # module Exporter
|
9
10
|
end # module Matt
|
data/lib/matt/exporter/sql.rb
CHANGED
@@ -35,11 +35,16 @@ module Matt
|
|
35
35
|
|
36
36
|
def remove_old_data!(table, data)
|
37
37
|
dates = data.project([:at]).map{|t| t[:at] }
|
38
|
-
table.where(:at => dates).delete
|
38
|
+
count = table.where(:at => dates).delete
|
39
|
+
info("Removed #{count} rows.")
|
40
|
+
count
|
39
41
|
end
|
40
42
|
|
41
43
|
def insert_new_data!(table, data)
|
42
|
-
|
44
|
+
data = data.to_a
|
45
|
+
result = table.multi_insert(data)
|
46
|
+
info("Inserted #{data.size} rows.")
|
47
|
+
result
|
43
48
|
end
|
44
49
|
|
45
50
|
def ensure_table!(measure)
|
@@ -62,6 +67,7 @@ module Matt
|
|
62
67
|
}
|
63
68
|
outdated = existing - fields
|
64
69
|
return if missing.empty? && outdated.empty?
|
70
|
+
debug("ALTER table #{tb_name}\n Outdated: #{outdated.join(', ')}\n New: #{missing.keys.join(', ')}")
|
65
71
|
sequel_db.alter_table(tb_name) do
|
66
72
|
outdated.each do |out|
|
67
73
|
drop_column(out)
|
@@ -73,6 +79,7 @@ module Matt
|
|
73
79
|
end
|
74
80
|
|
75
81
|
def create_table!(tb_name, measure, fields)
|
82
|
+
debug("CREATE table #{tb_name}\n Dimensions: #{measure.dimensions.keys.join(', ')}\n Metrics: #{measure.metrics.keys.join(', ')}")
|
76
83
|
sequel_db.create_table(tb_name) do
|
77
84
|
column(:at, Date, :null => false)
|
78
85
|
column(:created_at, :timestamp, :null => false)
|
data/lib/matt/measure.rb
CHANGED
data/lib/matt/support.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
module Matt
|
2
|
+
module Support
|
3
|
+
module Participant
|
4
|
+
include Puts
|
5
|
+
|
6
|
+
attr_accessor :name
|
7
|
+
attr_accessor :configuration
|
8
|
+
|
9
|
+
def fail!(message)
|
10
|
+
raise UnexpectedError, message
|
11
|
+
end
|
12
|
+
|
13
|
+
def class_name
|
14
|
+
self.class.name.gsub /#<Class(.*?)>::/, ""
|
15
|
+
end
|
16
|
+
|
17
|
+
def to_s
|
18
|
+
"#{class_name}(#{self.name})"
|
19
|
+
end
|
20
|
+
|
21
|
+
end # module Participant
|
22
|
+
end # module Support
|
23
|
+
end # module Matt
|
data/lib/matt/support/puts.rb
CHANGED
@@ -21,6 +21,20 @@ module Matt
|
|
21
21
|
configuration.stderr.puts(*args, &bl)
|
22
22
|
end
|
23
23
|
|
24
|
+
def info(message)
|
25
|
+
message = "#{self.to_s.ljust(30)} -- #{message}"
|
26
|
+
return $stderr.puts(message) unless configuration
|
27
|
+
return unless configuration.debug_level >= Configuration::DEBUG_INFO
|
28
|
+
puts_err(message)
|
29
|
+
end
|
30
|
+
|
31
|
+
def debug(message)
|
32
|
+
message = "#{self.to_s.ljust(30)} -- #{message}"
|
33
|
+
return $stderr.puts(message) unless configuration
|
34
|
+
return unless configuration.debug_level >= Configuration::DEBUG_VERBOSE
|
35
|
+
puts_err(message)
|
36
|
+
end
|
37
|
+
|
24
38
|
end # module Puts
|
25
39
|
end # module Support
|
26
40
|
end # module Matt
|
data/lib/matt/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: matt
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bernard Lambeau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-06-
|
11
|
+
date: 2021-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: path
|
@@ -149,6 +149,7 @@ files:
|
|
149
149
|
- lib/matt/exporter/sql.rb
|
150
150
|
- lib/matt/measure.rb
|
151
151
|
- lib/matt/support.rb
|
152
|
+
- lib/matt/support/participant.rb
|
152
153
|
- lib/matt/support/puts.rb
|
153
154
|
- lib/matt/version.rb
|
154
155
|
homepage: http://github.com/enspirit/matt
|