riemann-babbler 1.0.8.8 → 1.1.0pre2

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.
Files changed (35) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +1 -2
  3. data/Gemfile.lock +2 -6
  4. data/README.md +8 -0
  5. data/Rakefile +13 -0
  6. data/bin/riemann-babbler +3 -4
  7. data/config.yml +1 -3
  8. data/ext/sysinfo/extconf.rb +3 -0
  9. data/ext/sysinfo/sysinfo.c +476 -0
  10. data/ext/sysinfo/sysinfo.h +2 -0
  11. data/lib/riemann/{babbler.rb → babbler/plugin.rb} +9 -8
  12. data/lib/riemann/babbler/plugins/cpu.rb +1 -5
  13. data/lib/riemann/babbler/plugins/{cpu_fan.rb → cpufan.rb} +2 -2
  14. data/lib/riemann/babbler/plugins/{cpu_temp.rb → cputemp.rb} +2 -2
  15. data/lib/riemann/babbler/plugins/disk.rb +4 -8
  16. data/lib/riemann/babbler/plugins/exim4.rb +1 -1
  17. data/lib/riemann/babbler/plugins/http.rb +2 -2
  18. data/lib/riemann/babbler/plugins/mdadm.rb +2 -2
  19. data/lib/riemann/babbler/plugins/{mega_cli.rb → megacli.rb} +1 -1
  20. data/lib/riemann/babbler/plugins/memory.rb +8 -22
  21. data/lib/riemann/babbler/plugins/net.rb +3 -23
  22. data/lib/riemann/babbler/plugins/netstat.rb +15 -0
  23. data/lib/riemann/babbler/plugins/nginx.rb +12 -3
  24. data/lib/riemann/babbler/plugins/runit.rb +3 -5
  25. data/lib/riemann/babbler/support/monkey_patches.rb +3 -3
  26. data/lib/riemann/babbler/support/plugin_helpers.rb +1 -21
  27. data/lib/riemann/babbler/sysinfo.rb +1 -0
  28. data/lib/riemann/{babbler/version.rb → version.rb} +1 -1
  29. data/lib/{riemann/babbler/start.rb → start.rb} +4 -5
  30. data/riemann-babbler.gemspec +7 -6
  31. data/spec/default.rb +3 -2
  32. metadata +21 -51
  33. data/lib/riemann/babbler/plugins/net_stat.rb +0 -33
  34. data/lib/riemann/babbler/plugins/status_file.rb +0 -23
  35. data/lib/riemann/babbler/plugins/tw_cli.rb +0 -22
data/.gitignore CHANGED
@@ -2,3 +2,4 @@ pkg/
2
2
  .idea
3
3
  .rvmrc
4
4
  *.swp
5
+ Makefile
data/Gemfile CHANGED
@@ -6,9 +6,8 @@ gem 'logger'
6
6
  gem 'trollop'
7
7
  gem 'sys-filesystem'
8
8
  gem 'rest-client'
9
+ gem 'sequel'
9
10
  gem 'net-ping'
10
- gem 'file-tail'
11
- gem 'sys-proctable'
12
11
 
13
12
  gem 'rspec'
14
13
  gem 'rake'
data/Gemfile.lock CHANGED
@@ -8,8 +8,6 @@ GEM
8
8
  yamler (>= 0.1.0)
9
9
  diff-lcs (1.2.2)
10
10
  ffi (1.4.0)
11
- file-tail (1.0.12)
12
- tins (~> 0.5)
13
11
  logger (1.2.8)
14
12
  method_source (0.8.1)
15
13
  mime-types (1.21)
@@ -35,11 +33,10 @@ GEM
35
33
  rspec-expectations (2.13.0)
36
34
  diff-lcs (>= 1.1.3, < 2.0)
37
35
  rspec-mocks (2.13.0)
36
+ sequel (3.46.0)
38
37
  slop (3.4.3)
39
38
  sys-filesystem (1.1.0)
40
39
  ffi
41
- sys-proctable (0.9.3)
42
- tins (0.8.0)
43
40
  trollop (2.0)
44
41
  yamler (0.1.0)
45
42
 
@@ -49,7 +46,6 @@ PLATFORMS
49
46
  DEPENDENCIES
50
47
  awesome_print
51
48
  configatron
52
- file-tail
53
49
  logger
54
50
  net-ping
55
51
  pry
@@ -57,6 +53,6 @@ DEPENDENCIES
57
53
  rest-client
58
54
  riemann-client
59
55
  rspec
56
+ sequel
60
57
  sys-filesystem
61
- sys-proctable
62
58
  trollop
data/README.md CHANGED
@@ -1,5 +1,13 @@
1
1
  [![Build Status](https://travis-ci.org/vadv/riemann-babbler.png)](https://travis-ci.org/vadv/riemann-babbler)
2
2
 
3
+ ### Beware!
4
+ Currently I'm working on c-ext from zabbix.
5
+ It's not all fully working :)
6
+ Use stable gem please!
7
+ ```
8
+ gem "riemann-babbler", "~> 1.0.7.3"
9
+ ```
10
+
3
11
  ### Install
4
12
  ```
5
13
  gem install riemann-babbler
data/Rakefile CHANGED
@@ -1 +1,14 @@
1
+ require 'rspec/core/rake_task'
1
2
  require 'bundler/gem_tasks'
3
+
4
+ RSpec::Core::RakeTask.new('spec')
5
+ task :build do
6
+ Dir.chdir('ext/sysinfo') do
7
+ output = `ruby extconf.rb`
8
+ raise output unless $? == 0
9
+ output = `make`
10
+ raise output unless $? == 0
11
+ end
12
+ end
13
+
14
+ task :spec => :build
data/bin/riemann-babbler CHANGED
@@ -1,12 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
- # coding: utf-8
2
+ #encoding: utf-8
3
3
 
4
4
  require 'trollop'
5
5
  require 'configatron'
6
6
 
7
- $:.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
8
- require 'riemann/babbler/version'
9
- require 'riemann/babbler/start'
7
+ require File.expand_path('../../lib/riemann/version', __FILE__)
8
+ require File.expand_path('../../lib/start', __FILE__)
10
9
 
11
10
  opts = Trollop::options do
12
11
  version "Riemann babbler #{Riemann::Babbler::VERSION}"
data/config.yml CHANGED
@@ -40,6 +40,7 @@ plugins:
40
40
 
41
41
  net:
42
42
  service: net
43
+ interval: 60
43
44
 
44
45
  cpufan:
45
46
  service: cpufan
@@ -56,9 +57,6 @@ plugins:
56
57
  megacli:
57
58
  service: megacli
58
59
 
59
- twcli:
60
- interval: 300
61
-
62
60
  nginx:
63
61
  service: nginx
64
62
 
@@ -0,0 +1,3 @@
1
+ require 'mkmf'
2
+
3
+ create_makefile('sysinfo/sysinfo')
@@ -0,0 +1,476 @@
1
+ #include "sysinfo.h"
2
+ #include <ruby.h>
3
+ #include <sys/sysinfo.h>
4
+ #include <sys/statvfs.h>
5
+
6
+ /* Begin FS Part */
7
+ static void get_fs_size_stat(const char *fs, uint64_t *total, uint64_t *free,
8
+ uint64_t *used, double *pfree, double *pused)
9
+ {
10
+ struct statvfs s;
11
+
12
+ if (0 != statvfs(fs, &s))
13
+ rb_raise(rb_eRuntimeError, "statvfs call");
14
+
15
+ if (total)
16
+ *total = (uint64_t)s.f_blocks * s.f_frsize;
17
+ if (free)
18
+ *free = (uint64_t)s.f_bavail * s.f_frsize;
19
+ if (used)
20
+ *used = (uint64_t)(s.f_blocks - s.f_bfree) * s.f_frsize;
21
+ if (pfree)
22
+ {
23
+ if (0 != s.f_blocks - s.f_bfree + s.f_bavail)
24
+ *pfree = (double)(100.0 * s.f_bavail) /
25
+ (s.f_blocks - s.f_bfree + s.f_bavail);
26
+ else
27
+ *pfree = 0;
28
+ }
29
+ if (pused)
30
+ {
31
+ if (0 != s.f_blocks - s.f_bfree + s.f_bavail)
32
+ *pused = 100.0 - (double)(100.0 * s.f_bavail) /
33
+ (s.f_blocks - s.f_bfree + s.f_bavail);
34
+ else
35
+ *pused = 0;
36
+ }
37
+ }
38
+
39
+ static int VFS_FS_USED(VALUE self, VALUE mount)
40
+ {
41
+ uint64_t value = 0;
42
+ get_fs_size_stat(RSTRING_PTR(mount), NULL, NULL, &value, NULL, NULL);
43
+ return INT2NUM(value);
44
+ }
45
+
46
+ static int VFS_FS_TOTAL(VALUE self, VALUE mount)
47
+ {
48
+ uint64_t value = 0;
49
+ get_fs_size_stat(RSTRING_PTR(mount), &value, NULL, NULL, NULL, NULL);
50
+ return INT2NUM(value);
51
+ }
52
+
53
+ static int VFS_FS_FREE(VALUE self, VALUE mount)
54
+ {
55
+ uint64_t value = 0;
56
+ get_fs_size_stat(RSTRING_PTR(mount), NULL, &value, NULL, NULL, NULL);
57
+ return INT2NUM(value);
58
+ }
59
+
60
+ static int VFS_FS_PFREE(VALUE self, VALUE mount)
61
+ {
62
+ double value = 0;
63
+ get_fs_size_stat(RSTRING_PTR(mount), NULL, NULL, NULL, &value, NULL);
64
+ return rb_float_new(value);
65
+ }
66
+
67
+ static int VFS_FS_PUSED(VALUE self, VALUE mount)
68
+ {
69
+ double value = 0;
70
+ get_fs_size_stat(RSTRING_PTR(mount), NULL, NULL, NULL, NULL, &value);
71
+ return INT2NUM(value);
72
+ }
73
+
74
+ /* ---------- INODE ---------- */
75
+ union _val {
76
+ unsigned long long ul_val;
77
+ double d_val;
78
+ };
79
+
80
+ static void get_fs_inodes_stat(const char *fs, int type,union _val * val)
81
+ {
82
+ struct statvfs s;
83
+ if ( statvfs( fs, &s) != 0 )
84
+ {
85
+ rb_raise(rb_eRuntimeError, "statvfs call");
86
+ }
87
+ switch(type)
88
+ {
89
+ case 1: val->ul_val = (unsigned long long )(s.f_files); break;
90
+ case 2: val->ul_val = (unsigned long long )(s.f_favail); break;
91
+ case 3: val->ul_val = (unsigned long long )(s.f_files - s.f_favail); break;
92
+ case 4:
93
+ if (0 != s.f_files){
94
+ val->d_val = (100.0 * (s.f_files - s.f_favail)) / s.f_files;
95
+ } else
96
+ *(double *)val = 0;
97
+ break;
98
+ }
99
+ }
100
+
101
+ static int VFS_FS_INODE_PUSED(VALUE self, VALUE mount)
102
+ {
103
+ union _val val;
104
+ get_fs_inodes_stat(RSTRING_PTR(mount), 4, &val );
105
+ return rb_float_new(val.d_val);
106
+ }
107
+
108
+ static int VFS_FS_INODE_USED(VALUE self, VALUE mount)
109
+ {
110
+ union _val val;
111
+ get_fs_inodes_stat(RSTRING_PTR(mount), 3, &val );
112
+ return INT2NUM(val.ul_val);
113
+ }
114
+
115
+ static int VFS_FS_INODE_FREE(VALUE self, VALUE mount)
116
+ {
117
+ union _val val;
118
+ get_fs_inodes_stat(RSTRING_PTR(mount), 2, &val );
119
+ return INT2NUM(val.ul_val);
120
+ }
121
+
122
+ static int VFS_FS_INODE_TOTAL(VALUE self, VALUE mount)
123
+ {
124
+ union _val val;
125
+ get_fs_inodes_stat(RSTRING_PTR(mount), 1, &val );
126
+ return INT2NUM(val.ul_val);
127
+ }
128
+
129
+ /* End FS Part */
130
+
131
+ /* Begin Memory Part */
132
+ static int VM_MEMORY_CACHED(VALUE self)
133
+ {
134
+ FILE *f;
135
+ char *t;
136
+ char c[MAX_STRING_LEN];
137
+ uint64_t res = 0;
138
+
139
+ if(NULL == (f = fopen("/proc/meminfo","r") ))
140
+ {
141
+ rb_raise(rb_eRuntimeError, "fail to read /proc/meminfo");
142
+ }
143
+ while(NULL!=fgets(c,MAX_STRING_LEN,f))
144
+ {
145
+ if(strncmp(c,"Cached:",7) == 0)
146
+ {
147
+ t=(char *)strtok(c," ");
148
+ t=(char *)strtok(NULL," ");
149
+ sscanf(t, FS_UI64, &res );
150
+ t=(char *)strtok(NULL," ");
151
+
152
+ if(strcasecmp(t,"kb")) res <<= 10;
153
+ else if(strcasecmp(t, "mb")) res <<= 20;
154
+ else if(strcasecmp(t, "gb")) res <<= 30;
155
+ else if(strcasecmp(t, "tb")) res <<= 40;
156
+
157
+ break;
158
+ }
159
+ }
160
+ fclose(f);
161
+ return INT2NUM(res);
162
+ }
163
+
164
+ static int VM_MEMORY_BUFFERS(VALUE self)
165
+ {
166
+ struct sysinfo info;
167
+ if( 0 == sysinfo(&info))
168
+ {
169
+ return INT2NUM(info.bufferram);
170
+ }
171
+ else
172
+ rb_raise(rb_eRuntimeError, "sysinfo call");
173
+ }
174
+
175
+ static int VM_MEMORY_SHARED(VALUE self)
176
+ {
177
+ struct sysinfo info;
178
+ if( 0 == sysinfo(&info))
179
+ {
180
+ return INT2NUM(info.sharedram);
181
+ }
182
+ else
183
+ rb_raise(rb_eRuntimeError, "sysinfo call");
184
+ }
185
+
186
+ static int VM_MEMORY_TOTAL(VALUE self)
187
+ {
188
+ struct sysinfo info;
189
+ if( 0 == sysinfo(&info))
190
+ {
191
+ return INT2NUM(info.totalram);
192
+ }
193
+ else
194
+ rb_raise(rb_eRuntimeError, "sysinfo call");
195
+ }
196
+
197
+ static int VM_MEMORY_FREE(VALUE self)
198
+ {
199
+ struct sysinfo info;
200
+ if( 0 == sysinfo(&info))
201
+ {
202
+ return INT2NUM(info.freeram);
203
+ }
204
+ else
205
+ rb_raise(rb_eRuntimeError, "sysinfo call");
206
+ }
207
+ static int VM_MEMORY_AVAILABLE(VALUE self)
208
+ {
209
+ struct sysinfo info;
210
+ if( 0 == sysinfo(&info))
211
+ {
212
+ return INT2NUM(info.freeram + info.bufferram + VM_MEMORY_CACHED(self));
213
+ }
214
+ else
215
+ rb_raise(rb_eRuntimeError, "sysinfo call");
216
+ }
217
+ /* End Memory Part */
218
+
219
+ /* Begin Net Part */
220
+ typedef struct
221
+ {
222
+ uint64_t ibytes;
223
+ uint64_t ipackets;
224
+ uint64_t ierr;
225
+ uint64_t idrop;
226
+ uint64_t obytes;
227
+ uint64_t opackets;
228
+ uint64_t oerr;
229
+ uint64_t odrop;
230
+ uint64_t colls;
231
+ }
232
+ net_stat_t;
233
+
234
+
235
+ static void get_net_stat(const char *if_name, net_stat_t *result)
236
+ {
237
+ char line[MAX_STRING_LEN];
238
+ char name[MAX_STRING_LEN];
239
+
240
+ uint64_t tmp = 0;
241
+
242
+ FILE *f;
243
+ char *p;
244
+
245
+ if(NULL != (f = fopen("/proc/net/dev","r") ))
246
+ {
247
+ while(fgets(line,MAX_STRING_LEN,f) != NULL)
248
+ {
249
+ p = strstr(line,":");
250
+ if(p) p[0]='\t';
251
+
252
+ if(sscanf(line,"%s\t" FS_UI64 "\t" FS_UI64 "\t" FS_UI64 "\t" FS_UI64 "\t" FS_UI64 "\t"
253
+ FS_UI64 "\t" FS_UI64 "\t" FS_UI64 "\t \
254
+ " FS_UI64 "\t" FS_UI64 "\t" FS_UI64 "\t" FS_UI64 "\t" FS_UI64 "\t"
255
+ FS_UI64 "\t" FS_UI64 "\t" FS_UI64 "\n",
256
+ name,
257
+ &(result->ibytes), /* bytes */
258
+ &(result->ipackets), /* packets */
259
+ &(result->ierr), /* errs */
260
+ &(result->idrop), /* drop */
261
+ &(tmp), /* fifo */
262
+ &(tmp), /* frame */
263
+ &(tmp), /* compressed */
264
+ &(tmp), /* multicast */
265
+ &(result->obytes), /* bytes */
266
+ &(result->opackets), /* packets*/
267
+ &(result->oerr), /* errs */
268
+ &(result->odrop), /* drop */
269
+ &(tmp), /* fifo */
270
+ &(result->colls), /* icolls */
271
+ &(tmp), /* carrier */
272
+ &(tmp) /* compressed */
273
+ ) == 17)
274
+ {
275
+ if(strncmp(name, if_name, MAX_STRING_LEN) == 0)
276
+ {
277
+ break;
278
+ }
279
+ }
280
+ }
281
+ fclose(f);
282
+ }
283
+ }
284
+
285
+ int NET_IF_IN(VALUE self, VALUE my_if_name, VALUE my_mode)
286
+ {
287
+ net_stat_t ns;
288
+
289
+ char *if_name = RSTRING_PTR(my_if_name);
290
+ char *mode = RSTRING_PTR(my_mode);
291
+
292
+ get_net_stat(if_name, &ns);
293
+ if(strncmp(mode, "bytes", MAX_STRING_LEN) == 0)
294
+ {
295
+ return INT2NUM(ns.ibytes);
296
+ }
297
+ else if(strncmp(mode, "packets", MAX_STRING_LEN) == 0)
298
+ {
299
+ return INT2NUM(ns.ipackets);
300
+ }
301
+ else if(strncmp(mode, "errors", MAX_STRING_LEN) == 0)
302
+ {
303
+ return INT2NUM(ns.ierr);
304
+ }
305
+ else if(strncmp(mode, "dropped", MAX_STRING_LEN) == 0)
306
+ {
307
+ return INT2NUM(ns.idrop);
308
+ }
309
+ else
310
+ rb_raise(rb_eRuntimeError, "give me mode");
311
+ }
312
+
313
+ int NET_IF_OUT(VALUE self, VALUE my_if_name, VALUE my_mode)
314
+ {
315
+ net_stat_t ns;
316
+
317
+ char *if_name = RSTRING_PTR(my_if_name);
318
+ char *mode = RSTRING_PTR(my_mode);
319
+
320
+ get_net_stat(if_name, &ns);
321
+
322
+ if (strncmp(mode, "bytes", MAX_STRING_LEN) == 0)
323
+ {
324
+ return INT2NUM(ns.obytes);
325
+ }
326
+ else if(strncmp(mode, "packets", MAX_STRING_LEN) == 0)
327
+ {
328
+ return INT2NUM(ns.opackets);
329
+ }
330
+ else if(strncmp(mode, "errors", MAX_STRING_LEN) == 0)
331
+ {
332
+ return INT2NUM(ns.oerr);
333
+ }
334
+ else if(strncmp(mode, "dropped", MAX_STRING_LEN) == 0)
335
+ {
336
+ return INT2NUM(ns.odrop);
337
+ }
338
+ else
339
+ rb_raise(rb_eRuntimeError, "give me mode");
340
+ }
341
+
342
+ int NET_IF_TOTAL(VALUE self, VALUE my_if_name, VALUE my_mode)
343
+ {
344
+ net_stat_t ns;
345
+
346
+ char *if_name = RSTRING_PTR(my_if_name);
347
+ char *mode = RSTRING_PTR(my_mode);
348
+
349
+ get_net_stat(if_name, &ns);
350
+ if(strncmp(mode, "bytes", MAX_STRING_LEN) == 0)
351
+ {
352
+ return INT2NUM(ns.obytes + ns.ibytes);
353
+ }
354
+ else if(strncmp(mode, "packets", MAX_STRING_LEN) == 0)
355
+ {
356
+ return INT2NUM(ns.opackets + ns.ipackets);
357
+ }
358
+ else if(strncmp(mode, "errors", MAX_STRING_LEN) == 0)
359
+ {
360
+ return INT2NUM(ns.oerr + ns.ierr);
361
+ }
362
+ else if(strncmp(mode, "dropped", MAX_STRING_LEN) == 0)
363
+ {
364
+ return INT2NUM(ns.odrop + ns.idrop);
365
+ }
366
+ else
367
+ rb_raise(rb_eRuntimeError, "give me mode");
368
+ }
369
+
370
+ int NET_IF_COLLISIONS(VALUE self, VALUE my_if_name)
371
+ {
372
+ net_stat_t ns;
373
+ char *if_name = RSTRING_PTR(my_if_name);
374
+
375
+ get_net_stat(if_name, &ns);
376
+ return INT2NUM(ns.odrop);
377
+ }
378
+
379
+ /* End Net Part */
380
+
381
+ /* Begin Cpu Part */
382
+ int SYSTEM_CPU_SWITCHES(VALUE self)
383
+ {
384
+ char line[MAX_STRING_LEN], name[32];
385
+ uint64_t value = 0;
386
+ FILE *f;
387
+
388
+ if (NULL == (f = fopen("/proc/stat", "r")))
389
+ rb_raise(rb_eRuntimeError, "Can't open /proc/stat");
390
+
391
+ while (NULL != fgets(line, sizeof(line), f))
392
+ {
393
+ if (2 != sscanf(line, "%s " FS_UI64, name, &value))
394
+ continue;
395
+
396
+ if (0 == strcmp(name, "ctxt"))
397
+ {
398
+ return INT2NUM(value);
399
+ break;
400
+ }
401
+ }
402
+ fclose(f);
403
+ }
404
+ /* End Cpu Part */
405
+
406
+ void Init_sysinfo(void) {
407
+
408
+ VALUE mSI = rb_define_module("SysInfo");
409
+ VALUE mFS = rb_define_module_under(mSI, "FS");
410
+ VALUE cBlock = rb_define_class_under(mFS, "Block", rb_cObject);
411
+ VALUE cInode = rb_define_class_under(mFS, "Inode", rb_cObject);
412
+ VALUE cMem = rb_define_class_under(mSI, "Memory", rb_cObject);
413
+ VALUE cNet = rb_define_class_under(mSI, "Net", rb_cObject);
414
+ VALUE cCpu = rb_define_class_under(mSI, "Cpu", rb_cObject);
415
+
416
+ rb_define_singleton_method(cBlock,
417
+ "used", VFS_FS_USED, 1);
418
+
419
+ rb_define_singleton_method(cBlock,
420
+ "free", VFS_FS_FREE, 1);
421
+
422
+ rb_define_singleton_method(cBlock,
423
+ "total", VFS_FS_TOTAL, 1);
424
+
425
+ rb_define_singleton_method(cBlock,
426
+ "pfree", VFS_FS_PFREE, 1);
427
+
428
+ rb_define_singleton_method(cBlock,
429
+ "pused", VFS_FS_PUSED, 1);
430
+
431
+ rb_define_singleton_method(cInode,
432
+ "used", VFS_FS_INODE_USED, 1);
433
+
434
+ rb_define_singleton_method(cInode,
435
+ "free", VFS_FS_INODE_FREE, 1);
436
+
437
+ rb_define_singleton_method(cInode,
438
+ "total", VFS_FS_INODE_TOTAL, 1);
439
+
440
+ rb_define_singleton_method(cInode,
441
+ "pused", VFS_FS_INODE_PUSED, 1);
442
+
443
+ rb_define_singleton_method(cMem,
444
+ "cached", VM_MEMORY_CACHED, 0);
445
+
446
+ rb_define_singleton_method(cMem,
447
+ "buffers", VM_MEMORY_BUFFERS, 0);
448
+
449
+ rb_define_singleton_method(cMem,
450
+ "shared", VM_MEMORY_SHARED, 0);
451
+
452
+ rb_define_singleton_method(cMem,
453
+ "total", VM_MEMORY_TOTAL, 0);
454
+
455
+ rb_define_singleton_method(cMem,
456
+ "free", VM_MEMORY_FREE, 0);
457
+
458
+ rb_define_singleton_method(cMem,
459
+ "avaiable", VM_MEMORY_AVAILABLE, 0);
460
+
461
+ rb_define_singleton_method(cNet,
462
+ "in", NET_IF_IN, 2);
463
+
464
+ rb_define_singleton_method(cNet,
465
+ "out", NET_IF_OUT, 2);
466
+
467
+ rb_define_singleton_method(cNet,
468
+ "total", NET_IF_TOTAL, 2);
469
+
470
+ rb_define_singleton_method(cNet,
471
+ "collisions", NET_IF_COLLISIONS, 1);
472
+
473
+ rb_define_singleton_method(cCpu,
474
+ "switches", SYSTEM_CPU_SWITCHES, 0);
475
+
476
+ }
@@ -0,0 +1,2 @@
1
+ #define MAX_STRING_LEN 2048
2
+ #define FS_UI64 "%I64u"
@@ -1,14 +1,15 @@
1
- # encoding: utf-8
1
+ #encoding: utf-8
2
2
 
3
- require 'riemann/babbler/support/plugin_helpers'
3
+ require File.expand_path('../support/plugin_helpers', __FILE__)
4
4
  require 'riemann/client'
5
5
  require 'open3'
6
6
  require 'timeout'
7
7
  require 'rest_client'
8
8
  require 'socket'
9
9
  require 'net/ping'
10
- require 'file/tail'
11
- require 'riemann/babbler/support/monkey_patches'
10
+ require 'sequel'
11
+ require 'riemann/babbler/sysinfo'
12
+ require File.expand_path('../support/monkey_patches', __FILE__)
12
13
 
13
14
 
14
15
  # Базовое описание плагина
@@ -65,9 +66,9 @@ module Riemann
65
66
  def report_with_diff(event)
66
67
  current_metric = event[:metric]
67
68
  if @storage.has_key?(event[:service])
68
- unless current_metric + @storage[event[:service]] > 2**64
69
- event[:metric] = current_metric - @storage[event[:service]]
70
- end unless @storage[event[:service]].nil?
69
+ next if @storage[ event[:service] ].nil?
70
+ next if current_metric + @storage[ event[:service] ] > 2**64
71
+ event[:metric] = current_metric - @storage[ event[:service] ]
71
72
  end
72
73
  @storage[ event[:service] ] = current_metric
73
74
  event.delete(:as_diff)
@@ -100,7 +101,7 @@ module Riemann
100
101
  if plugin.run.nil?
101
102
  true
102
103
  else
103
- plugin.run ? true : false
104
+ plugin.run == true ? true : false
104
105
  end
105
106
  end
106
107
 
@@ -2,17 +2,13 @@
2
2
 
3
3
  class Riemann::Babbler::Cpu < Riemann::Babbler
4
4
 
5
- def desc
6
- "#{shell('ps -eo pcpu,pid,cmd --sort -pcpu | head -3').chomp}"
7
- end
8
-
9
5
  def init
10
6
  @old_cpu = Hash.new
11
7
  end
12
8
 
13
9
  def collect
14
10
  array = Array.new
15
- description = desc
11
+ description = 'Cpu usage'
16
12
  File.read('/proc/stat').split("\n").each do |cpu_line|
17
13
 
18
14
  # проверяем есть строчка /cpu\d+/ или /cpu / и сграбливаем это в переменную
@@ -1,4 +1,4 @@
1
- class Riemann::Babbler::CpuFan < Riemann::Babbler
1
+ class Riemann::Babbler::Cpufan < Riemann::Babbler
2
2
 
3
3
  def init
4
4
  plugin.set_default(:service, 'cpufan')
@@ -13,7 +13,7 @@ class Riemann::Babbler::CpuFan < Riemann::Babbler
13
13
  end
14
14
 
15
15
  def collect
16
- { :service => plugin.service, :metric => shell(plugin.cmd).to_i, :description => 'CPU Fan Speed'}
16
+ { :service => plugin.service, :metric => shell(plugin.cmd).to_i, :description => "CPU Fan Speed" }
17
17
  end
18
18
 
19
19
  end
@@ -1,4 +1,4 @@
1
- class Riemann::Babbler::CpuTemp < Riemann::Babbler
1
+ class Riemann::Babbler::Cputemp < Riemann::Babbler
2
2
 
3
3
  def init
4
4
  plugin.set_default(:service, 'cputemp')
@@ -13,7 +13,7 @@ class Riemann::Babbler::CpuTemp < Riemann::Babbler
13
13
  end
14
14
 
15
15
  def collect
16
- { :service => plugin.service, :metric => shell(plugin.cmd).to_i, :description => 'CPU Temperature'}
16
+ { :service => plugin.service, :metric => shell(plugin.cmd).to_i, :description => "CPU Temperature" }
17
17
  end
18
18
 
19
19
  end
@@ -2,9 +2,6 @@
2
2
 
3
3
  class Riemann::Babbler::Disk < Riemann::Babbler
4
4
 
5
- require 'sys/filesystem'
6
- include Sys
7
-
8
5
  NOT_MONITORING_FS = %w(sysfs nfs devpts squashfs proc devtmpfs)
9
6
 
10
7
  def collect
@@ -18,13 +15,12 @@ class Riemann::Babbler::Disk < Riemann::Babbler
18
15
  end
19
16
  disk = Array.new
20
17
  monit_points.each do |point|
21
- point_stat = Filesystem.stat point
22
18
  human_point = point == '/' ? '/root' : point
23
19
  human_point = human_point.gsub(/^\//, '').gsub(/\//, '_')
24
- disk << { :service => plugin.service + " #{human_point} % block", :description => "Disk usage #{point}, %", :metric => (1- point_stat.blocks_available.to_f/point_stat.blocks).round(2) * 100 } unless point_stat.blocks == 0
25
- disk << { :service => plugin.service + " #{human_point} % inode", :description => "Disk usage #{point}, inodes %", :metric => (1 - point_stat.files_available.to_f/point_stat.files).round(2) * 100 } unless point_stat.files == 0
26
- disk << { :service => plugin.service + " #{human_point} abs free", :description => "Disk free #{point}, B", :metric => point_stat.blocks_free * point_stat.block_size, :state => 'ok'}
27
- disk << { :service => plugin.service + " #{human_point} abs total", :description => "Disk space #{point}, B", :metric => point_stat.blocks * point_stat.block_size, :state => 'ok'}
20
+ disk << { :service => plugin.service + " #{human_point} % block", :description => "Disk usage #{point}, %", :metric => SysInfo::FS::Block.pused(point) }
21
+ disk << { :service => plugin.service + " #{human_point} % inode", :description => "Disk usage #{point}, inodes %", :metric => SysInfo::FS::Inode.pused(point)}
22
+ disk << { :service => plugin.service + " #{human_point} abs free", :description => "Disk free #{point}, B", :metric => SysInfo::FS::Block.total(point), :state => 'ok'}
23
+ disk << { :service => plugin.service + " #{human_point} abs total", :description => "Disk space #{point}, B", :metric => SysInfo::FS::Inode.total(point), :state => 'ok'}
28
24
  end
29
25
  disk
30
26
  end
@@ -13,7 +13,7 @@ class Riemann::Babbler::Exim4 < Riemann::Babbler
13
13
  end
14
14
 
15
15
  def collect
16
- { :service => plugin.service, :metric => shell(plugin.cmd).to_i, :description => 'Exim4: count frozen mails'}
16
+ { :service => plugin.service, :metric => shell(plugin.cmd).to_i, :description => "Exim4: count frozen mails" }
17
17
  end
18
18
 
19
19
  end
@@ -24,9 +24,9 @@ class Riemann::Babbler::Http < Riemann::Babbler
24
24
  command += " --max-time #{plugin.max_time} --fail"
25
25
  command += " #{plugin.url} -o /dev/null"
26
26
 
27
- out = shell(command).to_i
27
+ out = shell(command)
28
28
 
29
- if out != plugin.http_code
29
+ if out.to_i != plugin.http_code
30
30
  metric = 1
31
31
  else
32
32
  metric = 0
@@ -14,8 +14,8 @@ class Riemann::Babbler::Mdadm < Riemann::Babbler
14
14
  file = File.read('/proc/mdstat').split("\n")
15
15
  status = Array.new
16
16
  file.each_with_index do |line, index|
17
- next unless line.include? '_'
18
- device = file[index-1].split(':')[0].strip
17
+ next unless line.include? "_"
18
+ device = file[index-1].split(":")[0].strip
19
19
  status << { :service => plugin.service + " #{device}", :metric => 1, :description => "mdadm failed device #{device}" }
20
20
  end
21
21
  status
@@ -12,7 +12,7 @@ class Riemann::Babbler::MegaCli < Riemann::Babbler
12
12
  end
13
13
 
14
14
  def collect
15
- {:service => plugin.service, :metric => shell(plugin.cmd).to_i, :description => 'MegaCli status'}
15
+ {:service => plugin.service, :metric => shell(plugin.cmd).to_i, :description => "MegaCli status" }
16
16
  end
17
17
 
18
18
  end
@@ -3,31 +3,17 @@
3
3
  class Riemann::Babbler::Memory < Riemann::Babbler
4
4
 
5
5
  def collect
6
- m = File.read('/proc/meminfo').split(/\n/).inject({}) { |info, line|
7
- x = line.split(/:?\s+/)
8
- info[x[0]] = x[1].to_i
9
- info
10
- }
11
- free = m['MemFree'].to_i * 1024
12
- cached =m['Cached'].to_i * 1024
13
- buffers =m['Buffers'].to_i * 1024
14
- total = m['MemTotal'].to_i * 1024
15
- used = total - free
16
- free_bc = free + buffers + cached
17
-
6
+ total = SysInfo::Memory.total
7
+ free_bc = SysInfo::Memory.free + SysInfo::Memory.buffers + SysInfo::Memory.cached
18
8
  fraction = 1 - (free_bc.to_f / total)
19
- swap_fraction = m['SwapTotal'] == 0 ? 0 : 1 - m['SwapFree'].to_f/m['SwapTotal']
20
-
21
- desc = "#{shell('ps -eo pmem,pid,cmd --sort -pmem | head -3').chomp}"
22
9
  [
23
10
  { :service => plugin.service + ' % free', :description => 'Memory usage, %', :metric => fraction.round(2) * 100 },
24
- { :service => plugin.service + ' % swap', :description => 'Swap usage, %', :metric => swap_fraction.round(2) * 100 },
25
- { :service => plugin.service + ' abs free', :description => "Memory free (kB)\n\n #{desc}", :metric => free, :state => 'ok' },
26
- { :service => plugin.service + ' abs total', :description => "Memory total (kB)\n\n #{desc}", :metric => total, :state => 'ok' },
27
- { :service => plugin.service + ' abs cached', :description => "Memory usage, cached (kB)\n\n #{desc}", :metric => cached, :state => 'ok' },
28
- { :service => plugin.service + ' abs buffers', :description => "Memory usage, buffers (kB)\n\n #{desc}", :metric => buffers, :state => 'ok' },
29
- { :service => plugin.service + ' abs used', :description => "Memory usage, used (kB)\n\n #{desc}", :metric => used , :state => 'ok' },
30
- { :service => plugin.service + ' abs free_bc', :description => "Memory usage with cache и buffers (kB)\n\n #{desc}", :metric => free_bc , :state => 'ok' }
11
+ { :service => plugin.service + ' abs free', :description => "Memory free (Bytes)", :metric => SysInfo::Memory.free, :state => 'ok' },
12
+ { :service => plugin.service + ' abs total', :description => "Memory total (Bytes)", :metric => total, :state => 'ok' },
13
+ { :service => plugin.service + ' abs cached', :description => "Memory usage, cached (Bytes)", :metric => SysInfo::Memory.cached, :state => 'ok' },
14
+ { :service => plugin.service + ' abs buffers', :description => "Memory usage, buffers (Bytes)", :metric => SysInfo::Memory.buffers, :state => 'ok' },
15
+ { :service => plugin.service + ' abs used', :description => "Memory usage, used (Bytes)", :metric => SysInfo::Memory.total - SysInfo::Memory.free , :state => 'ok' },
16
+ { :service => plugin.service + ' abs free_bc', :description => "Memory usage with cache и buffers (Bytes)", :metric => free_bc , :state => 'ok' }
31
17
  ]
32
18
  end
33
19
 
@@ -1,21 +1,5 @@
1
1
  class Riemann::Babbler::Net < Riemann::Babbler
2
2
 
3
- WORDS = ['rx bytes',
4
- 'rx packets',
5
- 'rx errs',
6
- 'rx drop',
7
- 'rx fifo',
8
- 'rx frame',
9
- 'rx compressed',
10
- 'rx multicast',
11
- 'tx bytes',
12
- 'tx packets',
13
- 'tx drops',
14
- 'tx fifo',
15
- 'tx colls',
16
- 'tx carrier',
17
- 'tx compressed']
18
-
19
3
  def collect
20
4
  f = File.read('/proc/net/dev')
21
5
  status = Array.new
@@ -23,13 +7,9 @@ class Riemann::Babbler::Net < Riemann::Babbler
23
7
  iface = line.split(':')[0].strip
24
8
  iface.gsub!(/\./, '_')
25
9
  next unless line =~ /(\w*)\:\s*([\s\d]+)\s*/
26
- WORDS.map do |service|
27
- "#{plugin.service} #{iface} #{service}"
28
- end.zip(
29
- $2.split(/\s+/).map { |str| str.to_i }
30
- ).each do |service, value|
31
- status << { :service => service, :metric => value, :as_diff => true}
32
- end
10
+ status << { :service => "#{plugin.service} #{iface} bytes out", :metric => SysInfo::Net.out(iface, 'bytes'), :as_diff => true }
11
+ status << { :service => "#{plugin.service} #{iface} bytes in", :metric => SysInfo::Net.in(iface, 'bytes'), :as_diff => true }
12
+ status << { :service => "#{plugin.service} #{iface} bytes errors", :metric => SysInfo::Net.total(iface, 'errors'), :state => 'ok' }
33
13
  end
34
14
  status
35
15
  end
@@ -0,0 +1,15 @@
1
+ class Riemann::Babbler::Netstat < Riemann::Babbler
2
+
3
+ def init
4
+ plugin.set_default(:service, 'netstat')
5
+ plugin.set_default(:interval, 60)
6
+ plugin.set_default(:port, 80)
7
+ plugin.states.set_default(:warning, 300)
8
+ plugin.states.set_default(:critical, 400)
9
+ end
10
+
11
+ def collect
12
+ count = shell("netstat -nat4 | egrep -e ':#{plugin.port}\s' | grep ESTA | wc -l").to_i
13
+ {:service => "#{plugin.service} tcp #{plugin.port}", :metric => count, :description => "count established connects: #{count} to port #{plugin.port}"}
14
+ end
15
+ end
@@ -1,7 +1,16 @@
1
1
  class Riemann::Babbler::Nginx < Riemann::Babbler
2
2
 
3
- NGINX_STATUS_1 = %W(accepts handled requests)
4
- NGINX_STATUS_2 = %W(reading writing waiting)
3
+ NGINX_STATUS_1 = [
4
+ 'accepts',
5
+ 'handled',
6
+ 'requests'
7
+ ]
8
+
9
+ NGINX_STATUS_2 = [
10
+ 'reading',
11
+ 'writing',
12
+ 'waiting'
13
+ ]
5
14
 
6
15
  def init
7
16
  plugin.set_default(:service, 'nginx')
@@ -21,7 +30,7 @@ class Riemann::Babbler::Nginx < Riemann::Babbler
21
30
  status << { :service => plugin.service + " #{NGINX_STATUS_1[index]}", :metric => value.to_i, :as_diff => true }
22
31
  end
23
32
  # line[0]: Active connections: XXXX
24
- status << { :service => plugin.service + ' active', :metric => lines[0].split(':')[1].strip.to_i }
33
+ status << { :service => plugin.service + " active", :metric => lines[0].split(":")[1].strip.to_i }
25
34
  # lines[3]: Reading: 0 Writing: 1 Waiting: 0
26
35
  lines[3].scan(/\d+/).each_with_index do |value, index|
27
36
  status << { :service => plugin.service + " #{NGINX_STATUS_2[index]}", :metric => value.to_i }
@@ -15,16 +15,14 @@ class Riemann::Babbler::Runit < Riemann::Babbler
15
15
  status = Array.new
16
16
  Dir.glob('/etc/service/*').each do |srv|
17
17
  next if plugin.not_monit.include? srv
18
- human_srv = ' ' + srv.gsub(/\/etc\/service\//, '')
18
+ human_srv = ' ' + srv.gsub(/\/etc\/service\//,"")
19
19
  stat_file = File.join(srv, 'supervise', 'stat')
20
20
  next unless File.exists? stat_file
21
21
  if File.read( stat_file ).strip == 'run'
22
- @status_history.delete human_srv
22
+ @status_history.delete "human_srv"
23
23
  status << {:service => plugin.service + human_srv , :state => 'ok', :description => "runit service #{human_srv} running"}
24
24
  else
25
- if @status_history.include? human_srv
26
- status << {:service => plugin.service + human_srv , :state => 'critical', :description => "runit service #{human_srv} not running"}
27
- end
25
+ status << {:service => plugin.service + human_srv , :state => 'critical', :description => "runit service #{human_srv} not running"} if @status_history.include? human_srv
28
26
  @status_history << human_srv unless @status_history.include? human_srv
29
27
  end
30
28
  end
@@ -1,9 +1,9 @@
1
1
  module Beefcake
2
2
  class Buffer
3
3
 
4
- def initialize(buf='')
4
+ def initialize(buf="")
5
5
  if buf.respond_to?(:force_encoding)
6
- self.buf = buf.force_encoding('BINARY')
6
+ self.buf = buf.force_encoding("BINARY")
7
7
  else
8
8
  self.buf = buf
9
9
  end
@@ -12,7 +12,7 @@ module Beefcake
12
12
  def append_string(s)
13
13
  append_uint64(s.length)
14
14
  if s.respond_to?(:force_encoding)
15
- self << s.force_encoding('BINARY')
15
+ self << s.force_encoding("BINARY")
16
16
  else
17
17
  self << s
18
18
  end
@@ -43,25 +43,6 @@ module Riemann
43
43
  end
44
44
  end
45
45
 
46
- def file_grep(filename, regexp, max_lines=100)
47
- readed_lines = 0
48
- lines = Array.new
49
- begin
50
- Timeout::timeout(plugin_timeout) do
51
- File::Tail::Logfile.open(file, :backward => 0) do |log|
52
- log.tail do |line|
53
- readed_lines += 1
54
- lines << line if line.match?(regexp)
55
- return lines if readed_lines >= max_lines
56
- end
57
- end
58
- end
59
- rescue => e
60
- helper_error("#{e.class} #{e}\n#{e.backtrace.join "\n"}")
61
- end
62
- return lines
63
- end
64
-
65
46
  def tcp_port_aviable?(ip, port)
66
47
  begin
67
48
  Timeout::timeout(plugin_timeout) do
@@ -74,9 +55,8 @@ module Riemann
74
55
  end
75
56
  end
76
57
  rescue Timeout::Error
77
- return false
78
58
  end
79
- false
59
+ return false
80
60
  end
81
61
 
82
62
  # http rest
@@ -0,0 +1 @@
1
+ require 'sysinfo/sysinfo'
@@ -1,5 +1,5 @@
1
1
  module Riemann
2
2
  class Babbler
3
- VERSION = '1.0.8.8'
3
+ VERSION = '1.1.0pre2'
4
4
  end
5
5
  end
@@ -2,8 +2,8 @@ require 'yaml'
2
2
  require 'logger'
3
3
  require 'resolv'
4
4
 
5
- require 'riemann/babbler/support/deep_merge'
6
- require 'riemann/babbler'
5
+ require File.expand_path('../riemann/babbler/support/deep_merge', __FILE__)
6
+ require File.expand_path('../riemann/babbler/plugin', __FILE__)
7
7
 
8
8
  class Riemann::Babbler::Starter
9
9
 
@@ -37,7 +37,7 @@ class Riemann::Babbler::Starter
37
37
  logger.warn "Can't load config file #{opts[:config]}"
38
38
  Hash.new
39
39
  end
40
- config_default = YAML.load_file( File.expand_path('../../../../config.yml', __FILE__) )
40
+ config_default = YAML.load_file( File.expand_path('../../config.yml', __FILE__) )
41
41
  config_from_file = config_default.deep_merge( config_file )
42
42
  config.configure_from_hash config_from_file
43
43
  end
@@ -61,7 +61,7 @@ class Riemann::Babbler::Starter
61
61
 
62
62
  def load_plugins
63
63
  plugins = Array.new
64
- default_plugins_dir = File.expand_path('../plugins/', __FILE__)
64
+ default_plugins_dir = File.expand_path('../riemann/babbler/plugins/', __FILE__)
65
65
  Dir.glob( default_plugins_dir + '/*.rb') do |file|
66
66
  plugins << file
67
67
  end
@@ -140,7 +140,6 @@ class Riemann::Babbler::Starter
140
140
  def start_plugins!
141
141
  plugin_threads = started_plugins.map do |plugin|
142
142
  Thread.new {
143
- logger.unknown "Start plugin #{plugin}"
144
143
  plugin.new( config, logger, $riemann ).run
145
144
  }
146
145
  end
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: utf-8 -*-
2
- require File.expand_path('../lib/riemann/babbler/version', __FILE__)
2
+ require File.expand_path('../lib/riemann/version', __FILE__)
3
3
 
4
4
  Gem::Specification.new do |s|
5
5
  s.name = 'riemann-babbler'
@@ -7,19 +7,20 @@ Gem::Specification.new do |s|
7
7
  s.authors = ['Vasiliev D.V.']
8
8
  s.email = %w(vadv.mkn@gmail.com)
9
9
  s.homepage = 'https://github.com/vadv/riemann-babbler'
10
- s.summary = %q{Plugin manager for riemann.}
11
- s.description = %q{Plugin manager for riemann.}
10
+ s.summary = %q{Riemann health checker.}
11
+ s.description = %q{Some plugins manager for riemann.}
12
12
  s.licenses = %w(MIT)
13
13
 
14
14
  s.add_dependency('riemann-client')
15
15
  s.add_dependency('configatron')
16
16
  s.add_dependency('logger')
17
17
  s.add_dependency('trollop')
18
- s.add_dependency('sys-filesystem')
18
+ #s.add_dependency('sys-filesystem')
19
19
  s.add_dependency('rest-client')
20
20
  s.add_dependency('net-ping')
21
- s.add_dependency('file-tail')
22
- s.add_dependency('sys-proctable')
21
+ s.add_dependency('sequel')
22
+
23
+ s.extensions = ['ext/sysinfo/extconf.rb']
23
24
 
24
25
  s.files = `git ls-files`.split("\n")
25
26
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
data/spec/default.rb CHANGED
@@ -1,7 +1,8 @@
1
1
  #encoding: utf-8
2
2
 
3
- require 'riemann/babbler'
4
- require 'riemann/babbler/start'
3
+ $: << File.dirname(__FILE__) + '/../ext/sysinfo'
4
+ require 'riemann/babbler/plugin'
5
+ require 'start'
5
6
  require 'configatron'
6
7
 
7
8
  opts = Hash.new
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: riemann-babbler
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.8.8
5
- prerelease:
4
+ version: 1.1.0pre2
5
+ prerelease: 5
6
6
  platform: ruby
7
7
  authors:
8
8
  - Vasiliev D.V.
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-22 00:00:00.000000000 Z
12
+ date: 2013-06-26 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: riemann-client
@@ -75,22 +75,6 @@ dependencies:
75
75
  - - ! '>='
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
- - !ruby/object:Gem::Dependency
79
- name: sys-filesystem
80
- requirement: !ruby/object:Gem::Requirement
81
- none: false
82
- requirements:
83
- - - ! '>='
84
- - !ruby/object:Gem::Version
85
- version: '0'
86
- type: :runtime
87
- prerelease: false
88
- version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
- requirements:
91
- - - ! '>='
92
- - !ruby/object:Gem::Version
93
- version: '0'
94
78
  - !ruby/object:Gem::Dependency
95
79
  name: rest-client
96
80
  requirement: !ruby/object:Gem::Requirement
@@ -124,23 +108,7 @@ dependencies:
124
108
  - !ruby/object:Gem::Version
125
109
  version: '0'
126
110
  - !ruby/object:Gem::Dependency
127
- name: file-tail
128
- requirement: !ruby/object:Gem::Requirement
129
- none: false
130
- requirements:
131
- - - ! '>='
132
- - !ruby/object:Gem::Version
133
- version: '0'
134
- type: :runtime
135
- prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
- requirements:
139
- - - ! '>='
140
- - !ruby/object:Gem::Version
141
- version: '0'
142
- - !ruby/object:Gem::Dependency
143
- name: sys-proctable
111
+ name: sequel
144
112
  requirement: !ruby/object:Gem::Requirement
145
113
  none: false
146
114
  requirements:
@@ -155,12 +123,13 @@ dependencies:
155
123
  - - ! '>='
156
124
  - !ruby/object:Gem::Version
157
125
  version: '0'
158
- description: Plugin manager for riemann.
126
+ description: Some plugins manager for riemann.
159
127
  email:
160
128
  - vadv.mkn@gmail.com
161
129
  executables:
162
130
  - riemann-babbler
163
- extensions: []
131
+ extensions:
132
+ - ext/sysinfo/extconf.rb
164
133
  extra_rdoc_files: []
165
134
  files:
166
135
  - .gitignore
@@ -172,29 +141,31 @@ files:
172
141
  - Rakefile
173
142
  - bin/riemann-babbler
174
143
  - config.yml
175
- - lib/riemann/babbler.rb
144
+ - ext/sysinfo/extconf.rb
145
+ - ext/sysinfo/sysinfo.c
146
+ - ext/sysinfo/sysinfo.h
147
+ - lib/riemann/babbler/plugin.rb
176
148
  - lib/riemann/babbler/plugins/cpu.rb
177
- - lib/riemann/babbler/plugins/cpu_fan.rb
178
- - lib/riemann/babbler/plugins/cpu_temp.rb
149
+ - lib/riemann/babbler/plugins/cpufan.rb
150
+ - lib/riemann/babbler/plugins/cputemp.rb
179
151
  - lib/riemann/babbler/plugins/disk.rb
180
152
  - lib/riemann/babbler/plugins/dummy.rb
181
153
  - lib/riemann/babbler/plugins/exim4.rb
182
154
  - lib/riemann/babbler/plugins/http.rb
183
155
  - lib/riemann/babbler/plugins/la.rb
184
156
  - lib/riemann/babbler/plugins/mdadm.rb
185
- - lib/riemann/babbler/plugins/mega_cli.rb
157
+ - lib/riemann/babbler/plugins/megacli.rb
186
158
  - lib/riemann/babbler/plugins/memory.rb
187
159
  - lib/riemann/babbler/plugins/net.rb
188
- - lib/riemann/babbler/plugins/net_stat.rb
160
+ - lib/riemann/babbler/plugins/netstat.rb
189
161
  - lib/riemann/babbler/plugins/nginx.rb
190
162
  - lib/riemann/babbler/plugins/runit.rb
191
- - lib/riemann/babbler/plugins/status_file.rb
192
- - lib/riemann/babbler/plugins/tw_cli.rb
193
- - lib/riemann/babbler/start.rb
194
163
  - lib/riemann/babbler/support/deep_merge.rb
195
164
  - lib/riemann/babbler/support/monkey_patches.rb
196
165
  - lib/riemann/babbler/support/plugin_helpers.rb
197
- - lib/riemann/babbler/version.rb
166
+ - lib/riemann/babbler/sysinfo.rb
167
+ - lib/riemann/version.rb
168
+ - lib/start.rb
198
169
  - riemann-babbler.gemspec
199
170
  - spec/config.yml
200
171
  - spec/default.rb
@@ -214,16 +185,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
214
185
  required_rubygems_version: !ruby/object:Gem::Requirement
215
186
  none: false
216
187
  requirements:
217
- - - ! '>='
188
+ - - ! '>'
218
189
  - !ruby/object:Gem::Version
219
- version: '0'
190
+ version: 1.3.1
220
191
  requirements: []
221
192
  rubyforge_project:
222
193
  rubygems_version: 1.8.23
223
194
  signing_key:
224
195
  specification_version: 3
225
- summary: Plugin manager for riemann.
196
+ summary: Riemann health checker.
226
197
  test_files:
227
198
  - spec/config.yml
228
199
  - spec/default.rb
229
- has_rdoc:
@@ -1,33 +0,0 @@
1
- class Riemann::Babbler::NetStat < Riemann::Babbler
2
-
3
- def init
4
- plugin.set_default(:service, 'netstat')
5
- plugin.set_default(:interval, 5)
6
- plugin.set_default(:ports, [80, 3994])
7
- plugin.states.set_default(:warning, nil)
8
- plugin.states.set_default(:critical, nil)
9
- end
10
-
11
- def get_conn_count
12
- filter = nil
13
- plugin.ports.each do |port|
14
- if filter == nil
15
- filter = "\\( src *:#{port}"
16
- else
17
- filter += " or src *:#{port}"
18
- end
19
- end
20
- filter += " \\) and not dst 127.0.0.1:*"
21
- cmd = "ss -t -4 -n state established " + filter + " | wc -l"
22
- shell(cmd).to_i - 1
23
- end
24
-
25
- def collect
26
- count = get_conn_count()
27
- {
28
- :service => "#{plugin.service} tcp #{plugin.ports.join(', ')}",
29
- :metric => count,
30
- :description => "count established connects: #{count} to ports #{plugin.ports.join(', ')}"
31
- }
32
- end
33
- end
@@ -1,23 +0,0 @@
1
- class Riemann::Babbler::StatusFile < Riemann::Babbler
2
-
3
- def init
4
- plugin.set_default(:service, 'check state file')
5
- plugin.states.set_default(:critical, 1)
6
- plugin.set_default(:file, '/var/tmp/error.txt')
7
- plugin.set_default(:interval, 60)
8
- plugin.set_default(:max_lines, 100)
9
- plugin.set_default(:report_lines, 5)
10
- end
11
-
12
- def collect
13
- return [] unless File.exists? plugin.file
14
- content = File.read(plugin.file).split("\n").delete_if {|x| x.strip.empty? }
15
- {
16
- :service => plugin.service + " #{plugin.file}",
17
- :description => content.last(plugin.report_lines).join("\n"),
18
- :metric => content.count
19
- }
20
- end
21
-
22
- end
23
-
@@ -1,22 +0,0 @@
1
- class Riemann::Babbler::TwCli < Riemann::Babbler
2
-
3
- def init
4
- plugin.set_default(:service, 'twcli')
5
- plugin.set_default(:cmd, "/usr/sbin/tw_cli /$(/usr/sbin/tw_cli show | grep ^c | cut -f1 -d' ') show | egrep '^[upb]' | grep -v ' OK ' | grep -v ' VERIFYING ' | grep -v ' VERIFY-PAUSED ' | wc -l")
6
- plugin.states.set_default(:critical, 1)
7
- plugin.set_default(:interval, 300)
8
- end
9
-
10
- def run_plugin
11
- File.exists? '/usr/sbin/tw_cli'
12
- end
13
-
14
- def collect
15
- {
16
- :service => plugin.service,
17
- :metric => shell(plugin.cmd).to_i,
18
- :description => 'Hardware raid tw_cli status'
19
- }
20
- end
21
-
22
- end