internet_box_logger 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +33 -15
- data/lib/internet_box_logger/parsers/freebox_v5_parser.rb +39 -0
- data/lib/internet_box_logger/parsers/utils.rb +0 -41
- data/lib/internet_box_logger/version.rb +1 -1
- data/spec/parsers_spec.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dafa9767902f6c0af10854c35f868267a3b53649
|
4
|
+
data.tar.gz: 98ef8698aae623a5c3b1222082095c823b8ac9a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1078ea5be514a32be8312a88c4db1073b6434a1a4d80c0fe92ec4a2bcf12c6c8bff4ba97d84671d44f4f882b6d5a00deefce6a9e5c7eba7ec09d0bf7ca4b61e5
|
7
|
+
data.tar.gz: 56c0477a59266bd91835cb7052c55fa076532bffd5a43c786e5b556a9b2aa8f8685e6004c89b02f350c57d9bcfe759dcbfc4fe877c43e7bc73c3ebf3c8423747
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# [InternetBoxLogger][IBL]
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/lbriais/internet_box_logger.
|
4
|
-
[![Gem Version](https://badge.fury.io/rb/internet_box_logger.
|
3
|
+
[![Build Status](https://travis-ci.org/lbriais/internet_box_logger.svg)](https://travis-ci.org/lbriais/internet_box_logger)
|
4
|
+
[![Gem Version](https://badge.fury.io/rb/internet_box_logger.svg)](http://badge.fury.io/rb/internet_box_logger)
|
5
5
|
|
6
6
|
## Overview
|
7
7
|
|
@@ -37,7 +37,8 @@ Or install it yourself as:
|
|
37
37
|
|
38
38
|
### Configuration
|
39
39
|
|
40
|
-
Configuration thanks to [EasyAppHelper][EAP] enables multiple places to store your configuration. But most useful
|
40
|
+
Configuration, thanks to [EasyAppHelper][EAP], enables multiple places to store your configuration. But most useful
|
41
|
+
ones should be:
|
41
42
|
|
42
43
|
* '`/etc/internet_box_logger.conf`' for a system-wide installation
|
43
44
|
* '`~/.config/internet_box_logger.conf`' for a user-specific installation
|
@@ -59,22 +60,18 @@ default_elastic_search:
|
|
59
60
|
elastic_binary: /opt/elasticsearch/bin/elasticsearch
|
60
61
|
```
|
61
62
|
|
62
|
-
`box_type` specifies the module in charge of gathering data from your box. it Should not be changed but you can define
|
63
|
+
* `box_type` specifies the module in charge of gathering data from your box. it Should not be changed but you can define
|
63
64
|
your own. **It is the way for you to add other types of boxes** if needed. If you do so, please do a pull-request
|
64
65
|
afterwards.
|
65
|
-
|
66
|
-
`
|
67
|
-
|
68
|
-
`kibana_path` defines where your [Kibana][ELK] is installed. This one is only used by a rake task to setup default
|
66
|
+
* `cron_interval` defines the time in minutes between two measurements.
|
67
|
+
* `kibana_path` defines where your [Kibana][ELK] is installed. This one is only used by a rake task to setup default
|
69
68
|
dashboards for your box. This is not really needed for the script to work.
|
70
|
-
|
71
|
-
`
|
72
|
-
|
73
|
-
`elastic_servers` You can specify here, how to reach your ElasticSearch cluster. If you did the default install of
|
69
|
+
* `server_port` defines the port to run a simple HTTP server to serve the Kibana UI.
|
70
|
+
* `elastic_servers` You can specify here, how to reach your ElasticSearch cluster. If you did the default install of
|
74
71
|
ElasticSearch on the same machine as the gem is installed, then it should already be the correct host:port.
|
75
|
-
|
76
|
-
`elastic_binary` defines where your [ElasticSearch][ELK] is installed. This one is only used by a rake task
|
72
|
+
* `elastic_binary` defines where your [ElasticSearch][ELK] is installed. This one is only used by a rake task
|
77
73
|
(to stop/start and get info) about the ElasticSearch cluster. This is not really needed for the log process to work.
|
74
|
+
Only to enable stop/start of the server.
|
78
75
|
When you change it in your config, you do not need to set it in the `default_elastic_search` hash, but instead you can
|
79
76
|
directly set it at the root.
|
80
77
|
|
@@ -217,9 +214,30 @@ Then provided you started the embedded server you just need to navigate to:
|
|
217
214
|
Basically, to contribute you may want to:
|
218
215
|
|
219
216
|
* create the module to gather information from your box.
|
220
|
-
* build the Kibana report to display information.
|
221
217
|
* Update the tests accordingly
|
218
|
+
* build the Kibana report to display information.
|
219
|
+
|
220
|
+
### Code
|
221
|
+
|
222
|
+
The contract is pretty simple. Create a module to gather your box's data into the InternetBoxLogger::Parsers namespace
|
223
|
+
(module). This module should implement two methods:
|
224
|
+
|
225
|
+
* `get_box_data` that returns a hash of key-value pairs representing the data you monitor from your box. The way you
|
226
|
+
get these is not important. In the case of the Freebox V5 the sole possibility is to parse a page returned by the
|
227
|
+
box itself and than contains a lot of metrics. But maybe your box provides a more sophisticated API, REST or
|
228
|
+
whatever.
|
229
|
+
* `as_es_documents` should return an array of documents in the ElasticSearch way of thinking. This should the
|
230
|
+
transformation of the data returned by `get_box_data`, organised as an array of documents. This way you can organize
|
231
|
+
your data in a way that will allow you to query this data from Kibana to build your dashboards.
|
232
|
+
|
233
|
+
### Tests
|
234
|
+
|
235
|
+
You should upgrade the test set to cover what you added.
|
236
|
+
|
237
|
+
### Dashboard
|
222
238
|
|
239
|
+
You should add a new report into `config/kibana_reports`. The filename should end by "`_report.json`" to be taken in
|
240
|
+
account by the script and rake tasks.
|
223
241
|
|
224
242
|
That's all folks.
|
225
243
|
|
@@ -121,6 +121,45 @@ module InternetBoxLogger
|
|
121
121
|
self.send FIELD_POST_PROCESSING[field_name], field_name, match_data[field_name]
|
122
122
|
end
|
123
123
|
|
124
|
+
def as_es_documents(created_at=Time.now)
|
125
|
+
res = []
|
126
|
+
self.up_down_reports.each_pair do |measurement, name|
|
127
|
+
%w(up down).each do |measurement_type|
|
128
|
+
data_name = "#{measurement}_#{measurement_type}"
|
129
|
+
es_object = {
|
130
|
+
index: "#{self.class.name.underscore.tr('/', '_')}_#{measurement}",
|
131
|
+
type: measurement_type
|
132
|
+
}
|
133
|
+
data = {
|
134
|
+
created_at: created_at,
|
135
|
+
name: data_name,
|
136
|
+
description: name,
|
137
|
+
value: attributes[data_name.to_sym]
|
138
|
+
}
|
139
|
+
es_object[:body] = data
|
140
|
+
res << es_object
|
141
|
+
end
|
142
|
+
end
|
143
|
+
generic_info = {}
|
144
|
+
|
145
|
+
attributes.each do |attr_name, content|
|
146
|
+
# Tries to remove data that are up/down measurements already covered by previous collection
|
147
|
+
data_key = attr_name.to_s.gsub(/_(up|down)$/, '').to_sym
|
148
|
+
next if attr_name.length > 3 && self.up_down_reports.keys.include?(data_key)
|
149
|
+
# Else adds info to generic info
|
150
|
+
generic_info[attr_name] = content
|
151
|
+
end
|
152
|
+
generic_info[:name] = 'generic'
|
153
|
+
generic_info[:created_at] = created_at
|
154
|
+
|
155
|
+
res << {
|
156
|
+
index: "#{self.class.name.underscore.tr('/', '_')}_generic",
|
157
|
+
type: :info.to_s,
|
158
|
+
body: generic_info
|
159
|
+
}
|
160
|
+
|
161
|
+
res
|
162
|
+
end
|
124
163
|
|
125
164
|
end
|
126
165
|
end
|
@@ -69,47 +69,6 @@ module InternetBoxLogger
|
|
69
69
|
nil
|
70
70
|
end
|
71
71
|
|
72
|
-
def as_es_documents(created_at=Time.now)
|
73
|
-
res = []
|
74
|
-
self.up_down_reports.each_pair do |measurement, name|
|
75
|
-
%w(up down).each do |measurement_type|
|
76
|
-
data_name = "#{measurement}_#{measurement_type}"
|
77
|
-
es_object = {
|
78
|
-
index: "#{self.class.name.underscore.tr('/', '_')}_#{measurement}",
|
79
|
-
type: measurement_type
|
80
|
-
}
|
81
|
-
data = {
|
82
|
-
created_at: created_at,
|
83
|
-
name: data_name,
|
84
|
-
description: name,
|
85
|
-
value: attributes[data_name.to_sym]
|
86
|
-
}
|
87
|
-
es_object[:body] = data
|
88
|
-
res << es_object
|
89
|
-
end
|
90
|
-
end
|
91
|
-
generic_info = {}
|
92
|
-
|
93
|
-
attributes.each do |attr_name, content|
|
94
|
-
# Tries to remove data that are up/down measurements already covered by previous collection
|
95
|
-
data_key = attr_name.to_s.gsub(/_(up|down)$/, '').to_sym
|
96
|
-
next if attr_name.length > 3 && self.up_down_reports.keys.include?(data_key)
|
97
|
-
# Else adds info to generic info
|
98
|
-
generic_info[attr_name] = content
|
99
|
-
end
|
100
|
-
generic_info[:name] = 'generic'
|
101
|
-
generic_info[:created_at] = created_at
|
102
|
-
|
103
|
-
res << {
|
104
|
-
index: "#{self.class.name.underscore.tr('/', '_')}_generic",
|
105
|
-
type: :info.to_s,
|
106
|
-
body: generic_info
|
107
|
-
}
|
108
|
-
|
109
|
-
res
|
110
|
-
end
|
111
|
-
|
112
|
-
|
113
72
|
|
114
73
|
end
|
115
74
|
end
|
data/spec/parsers_spec.rb
CHANGED