gfspark 0.1.2 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
-
|