gfspark 0.1.2 → 0.2.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.
- data/.gitignore +1 -0
- data/README.md +6 -4
- data/images/gfspark_screenshot1.png +0 -0
- data/images/gfspark_screenshot2.png +0 -0
- data/lib/gfspark/app.rb +8 -0
- data/lib/gfspark/config.rb +4 -3
- data/lib/gfspark/graph.rb +76 -25
- data/lib/gfspark/version.rb +1 -1
- metadata +48 -75
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -20,7 +20,8 @@ Or install it yourself as:
|
|
20
20
|
|
21
21
|
## ScreenShots
|
22
22
|
|
23
|
-
<img src='https://github.com/yuroyoro/gfspark/raw/master/images/
|
23
|
+
<img src='https://github.com/yuroyoro/gfspark/raw/master/images/gfspark_screenshot1.png' width='600'/>
|
24
|
+
<img src='https://github.com/yuroyoro/gfspark/raw/master/images/gfspark_screenshot2.png' width='600'/>
|
24
25
|
|
25
26
|
## Usage
|
26
27
|
|
@@ -37,13 +38,14 @@ Or install it yourself as:
|
|
37
38
|
--url=VALUE Your GrowthForecast URL
|
38
39
|
-u, --user=USER
|
39
40
|
-p, --pass=PASS
|
40
|
-
-t=VALUE
|
41
|
+
-t, --type=VALUE Range of Graph
|
41
42
|
--gmode=VALUE graph mode: gauge or subtract (default is gauge)
|
42
43
|
--from=VALUE Start date of graph (2011/12/08 12:10:00) required if t=c or sc
|
43
44
|
--to=VALUE End date of graph (2011/12/08 12:10:00) required if t=c or sc
|
44
45
|
-h, --height=VALUE graph height (default 10
|
45
46
|
-w, --width=VALUE graph width (default is deteced from $COLUMNS)
|
46
47
|
-c, --color=VALUE Color of graph bar (black/red/green/yellow/blue/magenta/cyan/white)
|
48
|
+
-y, --y-axis-label=VALUE Show y axis labels (hide/show/simple: default is show)
|
47
49
|
-n, --non-fullwidth-font Show bar symbol as fullwidth
|
48
50
|
--sslnoverify don't verify SSL
|
49
51
|
--sslcacert=v SSL CA CERT
|
@@ -61,7 +63,7 @@ Or install it yourself as:
|
|
61
63
|
s8h : 8 Hours (1min avg)
|
62
64
|
4h : 4 Hours (5min avg)
|
63
65
|
s4h : 4 Hours (1min avg)
|
64
|
-
h : Hour (5min avg)
|
66
|
+
h : Hour (5min avg)
|
65
67
|
sh : Hour (1min avg)
|
66
68
|
n : Half Day (5min avg)
|
67
69
|
sn : Half Day (1min avg)
|
@@ -70,7 +72,7 @@ Or install it yourself as:
|
|
70
72
|
|
71
73
|
gfspark does not supports "COMPLEX GRAPH".
|
72
74
|
if graph output is broken, try `--non-fullwidth-font` option.
|
73
|
-
For example, your Terminal font is "Rickty", then it'll be fix graph output problem.
|
75
|
+
For example, if your Terminal font is "Rickty", then it'll be fix graph output problem.
|
74
76
|
|
75
77
|
## Configuration
|
76
78
|
|
Binary file
|
Binary file
|
data/lib/gfspark/app.rb
CHANGED
@@ -29,6 +29,14 @@ class Gfspark::App
|
|
29
29
|
return
|
30
30
|
end
|
31
31
|
|
32
|
+
@options[:t] ||= "d"
|
33
|
+
unless RANGES.keys.include?(@options[:t])
|
34
|
+
puts "Unknown graph range t=#{@options[:t]}"
|
35
|
+
@valid = false
|
36
|
+
return
|
37
|
+
end
|
38
|
+
|
39
|
+
@options[:y_axis_label] ||= "show"
|
32
40
|
@valid = true
|
33
41
|
detect_width_and_height!
|
34
42
|
set_ssl_options!
|
data/lib/gfspark/config.rb
CHANGED
@@ -64,7 +64,7 @@ module Gfspark::Config
|
|
64
64
|
puts <<-MSG
|
65
65
|
|
66
66
|
-t option detail:
|
67
|
-
#{Gfspark::Graph::RANGE_DEFS.map{|k,v| sprintf(" %3s : %s", k, v)}.join("\n")}
|
67
|
+
#{Gfspark::Graph::RANGE_DEFS.map{|k,v,_| sprintf(" %3s : %s", k, v)}.join("\n")}
|
68
68
|
MSG
|
69
69
|
end
|
70
70
|
|
@@ -76,7 +76,7 @@ module Gfspark::Config
|
|
76
76
|
def detect_width_and_height!
|
77
77
|
@stty_height, @stty_width = `stty size`.split.map(&:to_i)
|
78
78
|
|
79
|
-
width = ((@stty_width -
|
79
|
+
width = ((@stty_width - 18) / 2).floor
|
80
80
|
@options[:width] ||= width
|
81
81
|
@width = @options[:width].to_i
|
82
82
|
height = @options[:height].to_i
|
@@ -116,13 +116,14 @@ module Gfspark::Config
|
|
116
116
|
opts.on("--url=VALUE", "Your GrowthForecast URL"){|v| @options[:url] = v}
|
117
117
|
opts.on('-u=USER', '--user=USER'){|v| @options[:username] = v }
|
118
118
|
opts.on('-p=PASS', '--pass=PASS'){|v| @options[:password] = v }
|
119
|
-
opts.on("-t=VALUE", "Range of Graph"){|v| @options[:t] = v}
|
119
|
+
opts.on("-t=VALUE", "--type=VALUE", "Range of Graph"){|v| @options[:t] = v}
|
120
120
|
opts.on("--gmode=VALUE", "graph mode: gauge or subtract (default is gauge)"){|v| @options[:gmode] = v}
|
121
121
|
opts.on("--from=VALUE", "Start date of graph (2011/12/08 12:10:00) required if t=c or sc"){|v| @options[:from] = v}
|
122
122
|
opts.on("--to=VALUE", "End date of graph (2011/12/08 12:10:00) required if t=c or sc"){|v| @options[:to] = v}
|
123
123
|
opts.on("-h=VALUE", "--height=VALUE", "graph height (default 10"){|v| @options[:height] = v}
|
124
124
|
opts.on("-w=VALUE", "--width=VALUE", "graph width (default is deteced from $COLUMNS)"){|v| @options[:width] = v}
|
125
125
|
opts.on("-c=VALUE", "--color=VALUE", "Color of graph bar (#{COLORS.join("/")})"){|v| @options[:color] = v if COLORS.include?(v.to_sym)}
|
126
|
+
opts.on("-y=VALUE", "--y-axis-label=VALUE", "Show y axis labels (hide/show/simple: default is show)"){|v| @options[:y_axis_label] = v}
|
126
127
|
opts.on("-n", "--non-fullwidth-font", "Show bar symbol as fullwidth"){ @options[:non_fullwidth_font] = true }
|
127
128
|
opts.on("--sslnoverify", "don't verify SSL"){|v| @options[:sslNoVerify] = true}
|
128
129
|
opts.on("--sslcacert=v", "SSL CA CERT"){|v| @options[:sslCaCert] = v}
|
data/lib/gfspark/graph.rb
CHANGED
@@ -21,19 +21,33 @@ module Gfspark::Graph
|
|
21
21
|
}
|
22
22
|
end
|
23
23
|
|
24
|
+
def seconds_to_label(sec)
|
25
|
+
t = Time.at(sec).utc
|
26
|
+
d, h, m, s = t.day.pred, t.hour, t.min, t.sec
|
27
|
+
res = ""
|
28
|
+
res += "#{d}day" unless d.zero?
|
29
|
+
res += "#{h}h" unless h.zero? && (d.zero? || (m.zero? && s.zero?))
|
30
|
+
res += "#{m}min" unless m.zero? && ((d.zero? && h.zero?) || s.zero?)
|
31
|
+
res += "#{s}sec" unless s.zero?
|
32
|
+
return res
|
33
|
+
end
|
34
|
+
|
24
35
|
def render(json, summary, url = nil)
|
25
|
-
rows
|
26
|
-
|
36
|
+
rows = json['rows']
|
37
|
+
step = json['step'].to_i
|
38
|
+
max = rows.flatten.compact.max
|
27
39
|
max_val = (max / 8).ceil * 8
|
28
|
-
unit
|
40
|
+
unit = max_val / (@height * 8).to_f
|
29
41
|
|
30
|
-
|
31
|
-
|
42
|
+
start_timestamp = json["start_timestamp"].to_i
|
43
|
+
end_timestamp = json["end_timestamp"].to_i
|
44
|
+
s = Time.at(start_timestamp).localtime.strftime("%Y-%m-%d %H:%M:%S")
|
45
|
+
e = Time.at(end_timestamp ).localtime.strftime("%Y-%m-%d %H:%M:%S")
|
32
46
|
|
33
47
|
puts " #{blue(json["column_names"].first)}"
|
34
48
|
puts " #{yellow(url)}"
|
35
49
|
puts ""
|
36
|
-
puts " #{period_title} #{s} - #{e}"
|
50
|
+
puts " #{period_title} #{s} - #{e} step: /#{seconds_to_label(step)}"
|
37
51
|
puts ""
|
38
52
|
|
39
53
|
result = []
|
@@ -45,15 +59,51 @@ module Gfspark::Graph
|
|
45
59
|
if color = @options[:color]
|
46
60
|
line = Term::ANSIColor.send(color, line)
|
47
61
|
end
|
48
|
-
result << "#{sprintf("%10s", label)}
|
62
|
+
result << "#{sprintf("%10s", label)} |#{line}|"
|
49
63
|
end
|
50
64
|
puts result.join("\n")
|
65
|
+
|
66
|
+
render_y_axis_labels(rows, start_timestamp, step)
|
67
|
+
|
51
68
|
puts ""
|
52
69
|
|
53
70
|
sums = summary.first.last
|
54
71
|
puts " #{sprintf("cur: %.1f ave: %.1f max: %.1f min %.1f", *sums)}"
|
55
72
|
end
|
56
73
|
|
74
|
+
def render_y_axis_labels(rows, start_timestamp, step)
|
75
|
+
y_axis_labels = rows.length.times.select{|n| n % 4 == 0}. map{|n|
|
76
|
+
t = Time.at(start_timestamp + (n * step)).localtime
|
77
|
+
sprintf("%-8s", to_axis_label(t))
|
78
|
+
}.join
|
79
|
+
y_axis_arrows= rows.length.times.select{|n| n % 4 == 0}. map{|n|
|
80
|
+
" / "
|
81
|
+
}.join
|
82
|
+
|
83
|
+
case @options[:y_axis_label]
|
84
|
+
when "show"
|
85
|
+
puts sprintf("%10s%s", "", y_axis_arrows)
|
86
|
+
puts sprintf("%10s%s", "", y_axis_labels)
|
87
|
+
when "simple"
|
88
|
+
puts sprintf("%10s%s", "", y_axis_labels)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def axis_unit
|
93
|
+
@axis_unit ||= RANGE_DEFS.find{|_| _.first == @options[:t]}.last
|
94
|
+
end
|
95
|
+
|
96
|
+
def to_axis_label(t)
|
97
|
+
case axis_unit
|
98
|
+
when :min then t.strftime("%M")
|
99
|
+
when :hour then t.strftime("%H:%M")
|
100
|
+
when :day then t.strftime("%d")
|
101
|
+
when :week then t.strftime("%a")
|
102
|
+
when :month then t.strftime("%m")
|
103
|
+
else t.strftime("%H:%M")
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
57
107
|
def period_title
|
58
108
|
case @options[:t]
|
59
109
|
when "c", "sc" then sprintf("%s to %s", @options[:from], @options[:to])
|
@@ -62,25 +112,26 @@ module Gfspark::Graph
|
|
62
112
|
end
|
63
113
|
|
64
114
|
RANGE_DEFS = [
|
65
|
-
|
66
|
-
["
|
67
|
-
["
|
68
|
-
["
|
69
|
-
["
|
70
|
-
["
|
71
|
-
["
|
72
|
-
["
|
73
|
-
["
|
74
|
-
["
|
75
|
-
["
|
76
|
-
["
|
77
|
-
["
|
78
|
-
["
|
79
|
-
["
|
80
|
-
["
|
81
|
-
["
|
115
|
+
# option, label, y-axis unit
|
116
|
+
["y" , 'Year (1day avg)' , :month],
|
117
|
+
["m" , 'Month (2hour avg)' , :day ],
|
118
|
+
["w" , 'Week (30min avg)' , :week ],
|
119
|
+
["3d" , '3 Days (5min avg)' , :hour ],
|
120
|
+
["s3d" , '3 Days (5min avg)' , :hour ],
|
121
|
+
["d" , 'Day (5min avg)' , :hour ],
|
122
|
+
["sd" , 'Day (1min avg)' , :hour ],
|
123
|
+
["8h" , '8 Hours (5min avg)' , :hour ],
|
124
|
+
["s8h" , '8 Hours (1min avg)' , :hour ],
|
125
|
+
["4h" , '4 Hours (5min avg)' , :hour ],
|
126
|
+
["s4h" , '4 Hours (1min avg)' , :hour ],
|
127
|
+
["h" , 'Hour (5min avg)' , :min ],
|
128
|
+
["sh" , 'Hour (1min avg)' , :min ],
|
129
|
+
["n" , 'Half Day (5min avg)' , :hour ],
|
130
|
+
["sn" , 'Half Day (1min avg)' , :hour ],
|
131
|
+
["c" , "Custom (5min avg)" , :min ],
|
132
|
+
["sc" , "Custom (1min avg)" , :min ]
|
82
133
|
]
|
83
|
-
RANGES = Hash[*RANGE_DEFS.flatten]
|
134
|
+
RANGES = Hash[*RANGE_DEFS.map{|k,v,_| [k,v]}.flatten]
|
84
135
|
|
85
136
|
def range_arg?(t)
|
86
137
|
RANGES.keys.include? t
|
data/lib/gfspark/version.rb
CHANGED
metadata
CHANGED
@@ -1,75 +1,57 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: gfspark
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 2
|
10
|
-
version: 0.1.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Tomohito Ozaki
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
22
|
-
prerelease: false
|
12
|
+
date: 2013-05-30 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
23
15
|
name: json
|
24
|
-
|
25
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70140268416000 !ruby/object:Gem::Requirement
|
26
17
|
none: false
|
27
|
-
requirements:
|
28
|
-
- -
|
29
|
-
- !ruby/object:Gem::Version
|
30
|
-
|
31
|
-
|
32
|
-
- 0
|
33
|
-
version: "0"
|
34
|
-
version_requirements: *id001
|
35
|
-
- !ruby/object:Gem::Dependency
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
36
23
|
prerelease: false
|
24
|
+
version_requirements: *70140268416000
|
25
|
+
- !ruby/object:Gem::Dependency
|
37
26
|
name: term-ansicolor
|
38
|
-
|
39
|
-
requirement: &id002 !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70140268415440 !ruby/object:Gem::Requirement
|
40
28
|
none: false
|
41
|
-
requirements:
|
42
|
-
- -
|
43
|
-
- !ruby/object:Gem::Version
|
44
|
-
|
45
|
-
|
46
|
-
- 0
|
47
|
-
version: "0"
|
48
|
-
version_requirements: *id002
|
49
|
-
- !ruby/object:Gem::Dependency
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :runtime
|
50
34
|
prerelease: false
|
35
|
+
version_requirements: *70140268415440
|
36
|
+
- !ruby/object:Gem::Dependency
|
51
37
|
name: rake
|
52
|
-
|
53
|
-
requirement: &id003 !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70140268414960 !ruby/object:Gem::Requirement
|
54
39
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
version_requirements: *id003
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70140268414960
|
63
47
|
description: GrowthForecast on Terminal
|
64
|
-
email:
|
48
|
+
email:
|
65
49
|
- ozaki@yuroyoro.com
|
66
|
-
executables:
|
50
|
+
executables:
|
67
51
|
- gfspark
|
68
52
|
extensions: []
|
69
|
-
|
70
53
|
extra_rdoc_files: []
|
71
|
-
|
72
|
-
files:
|
54
|
+
files:
|
73
55
|
- .gitignore
|
74
56
|
- Gemfile
|
75
57
|
- LICENSE.txt
|
@@ -78,45 +60,36 @@ files:
|
|
78
60
|
- bin/gfspark
|
79
61
|
- gfspark.gemspec
|
80
62
|
- images/gfspark_screenshot.png
|
63
|
+
- images/gfspark_screenshot1.png
|
64
|
+
- images/gfspark_screenshot2.png
|
81
65
|
- lib/gfspark.rb
|
82
66
|
- lib/gfspark/app.rb
|
83
67
|
- lib/gfspark/config.rb
|
84
68
|
- lib/gfspark/connection.rb
|
85
69
|
- lib/gfspark/graph.rb
|
86
70
|
- lib/gfspark/version.rb
|
87
|
-
has_rdoc: true
|
88
71
|
homepage: http://yuroyoro.github.io/gfspark/
|
89
72
|
licenses: []
|
90
|
-
|
91
73
|
post_install_message:
|
92
74
|
rdoc_options: []
|
93
|
-
|
94
|
-
require_paths:
|
75
|
+
require_paths:
|
95
76
|
- lib
|
96
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
77
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
78
|
none: false
|
98
|
-
requirements:
|
99
|
-
- -
|
100
|
-
- !ruby/object:Gem::Version
|
101
|
-
|
102
|
-
|
103
|
-
- 0
|
104
|
-
version: "0"
|
105
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ! '>='
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
84
|
none: false
|
107
|
-
requirements:
|
108
|
-
- -
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
|
111
|
-
segments:
|
112
|
-
- 0
|
113
|
-
version: "0"
|
85
|
+
requirements:
|
86
|
+
- - ! '>='
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '0'
|
114
89
|
requirements: []
|
115
|
-
|
116
90
|
rubyforge_project:
|
117
|
-
rubygems_version: 1.
|
91
|
+
rubygems_version: 1.8.10
|
118
92
|
signing_key:
|
119
93
|
specification_version: 3
|
120
94
|
summary: GrowthForecast Graph viewer on Terminal
|
121
95
|
test_files: []
|
122
|
-
|