norikra-client 0.0.4 → 0.0.5
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/norikra/client.rb +5 -0
- data/lib/norikra/client/cli.rb +85 -53
- data/lib/norikra/client/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2061eec9c108858f789bd02c34d351e191afaff6
|
4
|
+
data.tar.gz: ac1166580e048a93f253364fc1532c25fdcd6a94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f47eb1dd0bedd20ce04aa9cbe11dc4df14d6493acfdf04101805a82815d8626f7d7f69dda2c9e22cd7ed42abe6027b6914ad4ad49d9b441ce0500467803a1f33
|
7
|
+
data.tar.gz: 88f19de2390530f8a6c48a33999af0a84779e6714b5743c6fade09c842d45455dfa3401770161be53e3e833d787b3dbb9968846c255fdfb0624485fb7927ec5f
|
data/lib/norikra/client.rb
CHANGED
@@ -3,6 +3,11 @@ require "norikra/client/version"
|
|
3
3
|
require 'msgpack-rpc-over-http'
|
4
4
|
|
5
5
|
module Norikra
|
6
|
+
module RPC
|
7
|
+
class ClientError < MessagePack::RPCOverHTTP::RemoteError; end
|
8
|
+
class ServerError < MessagePack::RPCOverHTTP::RemoteError; end
|
9
|
+
end
|
10
|
+
|
6
11
|
class Client
|
7
12
|
RPC_DEFAULT_PORT = 26571
|
8
13
|
TIMEOUT_OPTIONS = [:connect_timeout, :send_timeout, :receive_timeout]
|
data/lib/norikra/client/cli.rb
CHANGED
@@ -9,6 +9,16 @@ class Norikra::Client
|
|
9
9
|
def client(options)
|
10
10
|
Norikra::Client.new(options[:host], options[:port])
|
11
11
|
end
|
12
|
+
def wrap
|
13
|
+
begin
|
14
|
+
yield
|
15
|
+
rescue Norikra::RPC::ClientError => e
|
16
|
+
puts "Failed: " + e.message
|
17
|
+
rescue Norikra::RPC::ServerError => e
|
18
|
+
puts "ERROR on norikra server: " + e.message
|
19
|
+
puts " For more details, see norikra server's logs"
|
20
|
+
end
|
21
|
+
end
|
12
22
|
end
|
13
23
|
|
14
24
|
class Target < Thor
|
@@ -17,30 +27,36 @@ class Norikra::Client
|
|
17
27
|
desc "list", "show list of targets"
|
18
28
|
option :simple, :type => :boolean, :default => false, :desc => "suppress header/footer", :aliases => "-s"
|
19
29
|
def list
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
30
|
+
wrap do
|
31
|
+
puts "TARGET" unless options[:simple]
|
32
|
+
targets = client(parent_options).targets
|
33
|
+
targets.each do |t|
|
34
|
+
puts t
|
35
|
+
end
|
36
|
+
puts "#{targets.size} targets found." unless options[:simple]
|
24
37
|
end
|
25
|
-
puts "#{targets.size} targets found." unless options[:simple]
|
26
38
|
end
|
27
39
|
|
28
40
|
desc "open TARGET [fieldname1:type1 [fieldname2:type2 [fieldname3:type3] ...]]", "create new target (and define its fields)"
|
29
41
|
def open(target, *field_defs)
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
42
|
+
wrap do
|
43
|
+
fields = nil
|
44
|
+
if field_defs.size > 0
|
45
|
+
fields = {}
|
46
|
+
field_defs.each do |str|
|
47
|
+
fname,ftype = str.split(':')
|
48
|
+
fields[fname] = ftype
|
49
|
+
end
|
36
50
|
end
|
51
|
+
client(parent_options).open(target, fields)
|
37
52
|
end
|
38
|
-
client(parent_options).open(target, fields)
|
39
53
|
end
|
40
54
|
|
41
55
|
desc "close TARGET", "close existing target and all its queries"
|
42
56
|
def close(target)
|
43
|
-
|
57
|
+
wrap do
|
58
|
+
client(parent_options).close(target)
|
59
|
+
end
|
44
60
|
end
|
45
61
|
end
|
46
62
|
|
@@ -50,22 +66,28 @@ class Norikra::Client
|
|
50
66
|
desc "list", "show list of queries"
|
51
67
|
option :simple, :type => :boolean, :default => false, :desc => "suppress header/footer", :aliases => "-s"
|
52
68
|
def list
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
69
|
+
wrap do
|
70
|
+
puts "QUERY_NAME\tTARGETS\tQUERY" unless options[:simple]
|
71
|
+
queries = client(parent_options).queries
|
72
|
+
queries.sort{|a,b| (a['targets'].first <=> b['targets'].first).nonzero? || a['name'] <=> b['name']}.each do |q|
|
73
|
+
puts "#{q['name']}\t#{q['targets'].join(',')}\t#{q['expression']}"
|
74
|
+
end
|
75
|
+
puts "#{queries.size} queries found." unless options[:simple]
|
57
76
|
end
|
58
|
-
puts "#{queries.size} queries found." unless options[:simple]
|
59
77
|
end
|
60
78
|
|
61
79
|
desc "add QUERY_NAME QUERY_EXPRESSION", "register a query"
|
62
80
|
def add(query_name, expression)
|
63
|
-
|
81
|
+
wrap do
|
82
|
+
client(parent_options).register(query_name, expression)
|
83
|
+
end
|
64
84
|
end
|
65
85
|
|
66
86
|
desc "remove QUERY_NAME", "deregister a query"
|
67
87
|
def remove(query_name)
|
68
|
-
|
88
|
+
wrap do
|
89
|
+
client(parent_options).deregister(query_name)
|
90
|
+
end
|
69
91
|
end
|
70
92
|
end
|
71
93
|
|
@@ -75,17 +97,21 @@ class Norikra::Client
|
|
75
97
|
desc "list TARGET", "show list of field definitions of specified target"
|
76
98
|
option :simple, :type => :boolean, :default => false, :desc => "suppress header/footer", :aliases => "-s"
|
77
99
|
def list(target)
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
100
|
+
wrap do
|
101
|
+
puts "FIELD\tTYPE\tOPTIONAL" unless options[:simple]
|
102
|
+
fields = client(parent_options).fields(target)
|
103
|
+
fields.each do |f|
|
104
|
+
puts "#{f['name']}\t#{f['type']}\t#{f['optional']}"
|
105
|
+
end
|
106
|
+
puts "#{fields.size} fields found." unless options[:simple]
|
82
107
|
end
|
83
|
-
puts "#{fields.size} fields found." unless options[:simple]
|
84
108
|
end
|
85
109
|
|
86
110
|
desc "add TARGET FIELDNAME TYPE", "reserve fieldname and its type of target"
|
87
111
|
def add(target, field, type)
|
88
|
-
|
112
|
+
wrap do
|
113
|
+
client(parent_options).reserve(target, field, type)
|
114
|
+
end
|
89
115
|
end
|
90
116
|
end
|
91
117
|
|
@@ -96,17 +122,19 @@ class Norikra::Client
|
|
96
122
|
option :format, :type => :string, :default => 'json', :desc => "format of input data per line of stdin [json(default), ltsv]"
|
97
123
|
option :batch_size, :type => :numeric, :default => 10000, :desc => "records sent in once transferring (default: 10000)"
|
98
124
|
def send(target)
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
125
|
+
wrap do
|
126
|
+
client = client(parent_options)
|
127
|
+
parser = parser(options[:format])
|
128
|
+
buffer = []
|
129
|
+
$stdin.each_line do |line|
|
130
|
+
buffer.push(parser.parse(line))
|
131
|
+
if buffer.size >= options[:batch_size]
|
132
|
+
client.send(target, buffer)
|
133
|
+
buffer = []
|
134
|
+
end
|
107
135
|
end
|
136
|
+
client.send(target, buffer) if buffer.size > 0
|
108
137
|
end
|
109
|
-
client.send(target, buffer) if buffer.size > 0
|
110
138
|
end
|
111
139
|
|
112
140
|
desc "fetch QUERY_NAME", "fetch events from specified query"
|
@@ -114,12 +142,14 @@ class Norikra::Client
|
|
114
142
|
option :time_key, :type => :string, :default => 'time', :desc => "output key name for event time (default: time)"
|
115
143
|
option :time_format, :type => :string, :default => '%Y/%m/%d %H:%M:%S', :desc => "output time format (default: '2013/05/14 17:57:59')"
|
116
144
|
def fetch(query_name)
|
117
|
-
|
118
|
-
|
145
|
+
wrap do
|
146
|
+
formatter = formatter(options[:format])
|
147
|
+
time_formatter = lambda{|t| Time.at(t).strftime(options[:time_format])}
|
119
148
|
|
120
|
-
|
121
|
-
|
122
|
-
|
149
|
+
client(parent_options).event(query_name).each do |time,event|
|
150
|
+
event = {options[:time_key] => Time.at(time).strftime(options[:time_format])}.merge(event)
|
151
|
+
puts formatter.format(event)
|
152
|
+
end
|
123
153
|
end
|
124
154
|
end
|
125
155
|
|
@@ -129,19 +159,21 @@ class Norikra::Client
|
|
129
159
|
option :time_key, :type => :string, :default => 'time', :desc => "output key name for event time (default: time)"
|
130
160
|
option :time_format, :type => :string, :default => '%Y/%m/%d %H:%M:%S', :desc => "output time format (default: '2013/05/14 17:57:59')"
|
131
161
|
def sweep
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
162
|
+
wrap do
|
163
|
+
formatter = formatter(options[:format])
|
164
|
+
time_formatter = lambda{|t| Time.at(t).strftime(options[:time_format])}
|
165
|
+
|
166
|
+
data = client(parent_options).sweep
|
167
|
+
|
168
|
+
data.keys.sort.each do |queryname|
|
169
|
+
events = data[queryname]
|
170
|
+
events.each do |time,event|
|
171
|
+
event = {
|
172
|
+
options[:time_key] => Time.at(time).strftime(options[:time_format]),
|
173
|
+
options[:query_name_key] => queryname,
|
174
|
+
}.merge(event)
|
175
|
+
puts formatter.format(event)
|
176
|
+
end
|
145
177
|
end
|
146
178
|
end
|
147
179
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: norikra-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- TAGOMORI Satoshi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-08-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: msgpack-rpc-over-http
|
@@ -126,3 +126,4 @@ signing_key:
|
|
126
126
|
specification_version: 4
|
127
127
|
summary: Client commands and libraries for Norikra
|
128
128
|
test_files: []
|
129
|
+
has_rdoc:
|