ardtweeno 0.3.1 → 0.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +60 -0
- data/Gemfile +0 -1
- data/Gemfile.lock +35 -33
- data/INSTALL +12 -8
- data/README.md +17 -17
- data/Rakefile +20 -8
- data/lib/ardtweeno/api.rb +409 -9
- data/lib/ardtweeno/dispatcher.rb +177 -128
- data/lib/ardtweeno/nodemanager.rb +33 -14
- data/lib/ardtweeno/restapi.rb +77 -26
- data/lib/ardtweeno/ringbuffer.rb +115 -0
- data/lib/ardtweeno.rb +2 -2
- data/public/favicon.ico +0 -0
- data/public/main.css +80 -14
- data/public/main.js +8 -1
- data/test/api_test.rb +60 -7
- data/test/debug/run_mock +1 -1
- data/test/debug/run_packet_push +4 -4
- data/test/debug/run_post_watch +4 -4
- data/test/debug/tty0tty-1.1/pts/tty0tty +0 -0
- data/test/dispatcher_test.rb +11 -8
- data/test/node_test.rb +7 -3
- data/test/nodemanager_test.rb +9 -5
- data/test/packet_test.rb +7 -3
- data/test/parser_test.rb +1 -3
- data/test/rest_api_test.rb +8 -0
- data/test/ringbuffer_test.rb +64 -0
- data/views/home.erb +2 -1
- data/views/index.erb +14 -10
- data/views/punchcard.erb +55 -0
- data/views/status.erb +48 -135
- data/views/topology.erb +12 -0
- metadata +7 -34
- data/public/bootstrap.min.js +0 -6
- data/public/highcharts.js +0 -270
- data/public/jquery-1.8.2.min.js +0 -2
- data/public/jquery-2.0.1.min.js +0 -6
data/lib/ardtweeno/dispatcher.rb
CHANGED
@@ -2,18 +2,17 @@
|
|
2
2
|
# @author David Kirwan https://github.com/davidkirwan/ardtweeno
|
3
3
|
# @description Ardtweeno dispatcher system
|
4
4
|
#
|
5
|
-
# @date
|
5
|
+
# @date 2013-08-18
|
6
6
|
####################################################################################################
|
7
7
|
|
8
8
|
# Imports
|
9
|
-
require 'rubygems'
|
10
9
|
require 'serialport'
|
11
10
|
require 'logger'
|
12
11
|
require 'yaml'
|
13
12
|
require 'json'
|
14
13
|
require 'singleton'
|
15
|
-
require 'ardtweeno'
|
16
14
|
require 'mongo'
|
15
|
+
require 'ardtweeno'
|
17
16
|
|
18
17
|
module Ardtweeno
|
19
18
|
|
@@ -43,6 +42,8 @@ module Ardtweeno
|
|
43
42
|
@running = false
|
44
43
|
@parser = nil
|
45
44
|
|
45
|
+
@statusbuffer = Ardtweeno::RingBuffer.new(90)
|
46
|
+
|
46
47
|
if Ardtweeno.options[:test]
|
47
48
|
@confdata = Ardtweeno.options[:confdata]
|
48
49
|
else
|
@@ -52,6 +53,51 @@ module Ardtweeno
|
|
52
53
|
end
|
53
54
|
|
54
55
|
|
56
|
+
|
57
|
+
##
|
58
|
+
# Ardtweeno::Dispatcher#constructPunchcard method for constructing the punchcard graph
|
59
|
+
#
|
60
|
+
# * *Args* :
|
61
|
+
# - ++ ->
|
62
|
+
# * *Returns* :
|
63
|
+
# - Array data containing the 168 hourly packet totals for the last week,
|
64
|
+
# Array of strings containing the names of the last 7 days
|
65
|
+
# * *Raises* :
|
66
|
+
#
|
67
|
+
#
|
68
|
+
def constructPunchcard(params)
|
69
|
+
theData, theDays, theDateRange = Ardtweeno::API.buildPunchcard(@nodeManager.nodeList, params)
|
70
|
+
|
71
|
+
return theData, theDays, theDateRange
|
72
|
+
end
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
##
|
77
|
+
# Ardtweeno::Dispatcher#constructTopology method for constructing the topology graph
|
78
|
+
#
|
79
|
+
# * *Args* :
|
80
|
+
# - ++ -> Hash params, not really used for the moment
|
81
|
+
# * *Returns* :
|
82
|
+
# - String containing the Raphael.js code to generate the graph
|
83
|
+
# * *Raises* :
|
84
|
+
#
|
85
|
+
#
|
86
|
+
def constructTopology(params=nil)
|
87
|
+
apitimer = Time.now
|
88
|
+
|
89
|
+
nodes = Ardtweeno::API.retrievenodes(@nodeManager.nodeList, params)
|
90
|
+
zones = Ardtweeno::API.retrievezones(@confdata, params)
|
91
|
+
|
92
|
+
topology = Ardtweeno::API.parseTopology(zones, nodes)
|
93
|
+
result = Ardtweeno::API.buildTopology(topology)
|
94
|
+
|
95
|
+
@log.debug "Duration: #{Time.now - apitimer} seconds"
|
96
|
+
return result
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
|
55
101
|
##
|
56
102
|
# Ardtweeno::Dispatcher#flush method for flushing packet data to the Database
|
57
103
|
#
|
@@ -73,7 +119,7 @@ module Ardtweeno
|
|
73
119
|
db_collection = @confdata["db"]["dbPacketsColl"]
|
74
120
|
|
75
121
|
if @db == nil
|
76
|
-
@log.
|
122
|
+
@log.warn "The database connector is not connected to a database!"
|
77
123
|
@log.debug "Attempting to construct the MongoDB driver instance"
|
78
124
|
|
79
125
|
begin
|
@@ -140,6 +186,7 @@ module Ardtweeno
|
|
140
186
|
end
|
141
187
|
|
142
188
|
|
189
|
+
|
143
190
|
##
|
144
191
|
# Ardtweeno::Dispatcher#retrieve_zones method for retrieving zone data from the system
|
145
192
|
#
|
@@ -198,6 +245,38 @@ module Ardtweeno
|
|
198
245
|
return result
|
199
246
|
end
|
200
247
|
|
248
|
+
|
249
|
+
|
250
|
+
##
|
251
|
+
# Ardtweeno::Dispatcher#watchList method to return Array of Hash containing watched node information
|
252
|
+
#
|
253
|
+
# * *Args* :
|
254
|
+
# - ++ ->
|
255
|
+
# * *Returns* :
|
256
|
+
# - Array of Hash { String :node, String :notifyURL,
|
257
|
+
# String :method, String :timeouts }
|
258
|
+
# * *Raises* :
|
259
|
+
#
|
260
|
+
def watchList
|
261
|
+
return {:watched=>@nodeManager.watchList}
|
262
|
+
end
|
263
|
+
|
264
|
+
|
265
|
+
|
266
|
+
##
|
267
|
+
# Ardtweeno::Dispatcher#watched? method to discover if a node is being watched
|
268
|
+
#
|
269
|
+
# * *Args* :
|
270
|
+
# - ++ -> params Hash containing: {:node String name of the node}
|
271
|
+
# * *Returns* :
|
272
|
+
# - Hash {watched=>true|false}
|
273
|
+
# * *Raises* :
|
274
|
+
#
|
275
|
+
def watched?(params)
|
276
|
+
return {:watched=>@nodeManager.watched?(params[:node])}
|
277
|
+
end
|
278
|
+
|
279
|
+
|
201
280
|
|
202
281
|
##
|
203
282
|
# Ardtweeno::Dispatcher#addWatch method to add a watch on a node
|
@@ -217,6 +296,8 @@ module Ardtweeno
|
|
217
296
|
begin
|
218
297
|
apitimer = Time.now
|
219
298
|
|
299
|
+
params = params.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
|
300
|
+
|
220
301
|
if params.has_key? :node and
|
221
302
|
params.has_key? :notifyURL and
|
222
303
|
params.has_key? :method and
|
@@ -227,13 +308,14 @@ module Ardtweeno
|
|
227
308
|
raise Ardtweeno::InvalidWatch, "Invalid Parameters"
|
228
309
|
end
|
229
310
|
|
230
|
-
unless params[:timeout] >= 0
|
311
|
+
unless params[:timeout].to_i >= 0
|
231
312
|
raise Ardtweeno::InvalidWatch, "Invalid Parameters"
|
232
313
|
end
|
233
314
|
|
234
315
|
@log.debug "Watch API call seems valid, passing to NodeManager"
|
235
316
|
@nodeManager.addWatch(params)
|
236
317
|
else
|
318
|
+
@log.debug params.inspect
|
237
319
|
raise Ardtweeno::InvalidWatch, "Invalid Parameters"
|
238
320
|
end
|
239
321
|
|
@@ -242,10 +324,11 @@ module Ardtweeno
|
|
242
324
|
rescue Ardtweeno::AlreadyWatched => e
|
243
325
|
raise e, "This node already has a watch associated with it"
|
244
326
|
rescue Ardtweeno::InvalidWatch => e
|
245
|
-
raise e
|
327
|
+
raise e, "Invalid Parameters"
|
246
328
|
end
|
247
329
|
end
|
248
330
|
|
331
|
+
|
249
332
|
|
250
333
|
##
|
251
334
|
# Ardtweeno::Dispatcher#store stores a packet retrieved by the API into the system
|
@@ -280,7 +363,7 @@ module Ardtweeno
|
|
280
363
|
node.enqueue(packet)
|
281
364
|
|
282
365
|
@log.debug "Check if its being watched"
|
283
|
-
if @nodeManager.watched?(node)
|
366
|
+
if @nodeManager.watched?(node.node)
|
284
367
|
@log.debug "There is a watch on this node, pushing notifications"
|
285
368
|
@nodeManager.pushNotification(node.node)
|
286
369
|
else
|
@@ -301,6 +384,7 @@ module Ardtweeno
|
|
301
384
|
|
302
385
|
return true
|
303
386
|
end
|
387
|
+
|
304
388
|
|
305
389
|
|
306
390
|
##
|
@@ -369,6 +453,7 @@ module Ardtweeno
|
|
369
453
|
return false
|
370
454
|
|
371
455
|
end
|
456
|
+
|
372
457
|
|
373
458
|
|
374
459
|
##
|
@@ -411,9 +496,11 @@ module Ardtweeno
|
|
411
496
|
return false
|
412
497
|
|
413
498
|
end
|
499
|
+
|
500
|
+
|
414
501
|
|
415
502
|
##
|
416
|
-
# Ardtweeno::Dispatcher#reboot which reboots the Ardtweeno Gateway host
|
503
|
+
# Ardtweeno::Dispatcher#reboot which flushes data then reboots the Ardtweeno Gateway host
|
417
504
|
#
|
418
505
|
# * *Args* :
|
419
506
|
# - ++ ->
|
@@ -425,61 +512,96 @@ module Ardtweeno
|
|
425
512
|
@log.debug "Dispatcher#reboot has been called, restarting the gateway host.."
|
426
513
|
|
427
514
|
cmd = 'ls -l' #'sudo reboot'
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
515
|
+
sh "#{cmd}"
|
516
|
+
end
|
517
|
+
|
518
|
+
|
519
|
+
|
520
|
+
##
|
521
|
+
# Ardtweeno::Dispatcher#bootstrap which configures the Dispatcher instance for initial operation
|
522
|
+
#
|
523
|
+
# * *Args* :
|
524
|
+
# - ++ ->
|
525
|
+
# * *Returns* :
|
526
|
+
# -
|
527
|
+
# * *Raises* :
|
528
|
+
#
|
529
|
+
def diskUsage()
|
530
|
+
return Ardtweeno::API.diskUsage
|
531
|
+
end
|
532
|
+
|
533
|
+
|
534
|
+
|
535
|
+
##
|
536
|
+
# Ardtweeno::Dispatcher#statuslist returns a Array of Hash containing system statuses for
|
537
|
+
# the last 15 minutes
|
538
|
+
#
|
539
|
+
# * *Args* :
|
540
|
+
# - ++ ->
|
541
|
+
# * *Returns* :
|
542
|
+
# - Array [Hash {Boolean running, String cpuload, String memload}]
|
543
|
+
# * *Raises* :
|
544
|
+
#
|
545
|
+
def statuslist()
|
546
|
+
@log.debug "Ardtweeno::Dispatcher#statuslist executing"
|
547
|
+
begin
|
548
|
+
rawdata = @statusbuffer.to_a
|
549
|
+
|
550
|
+
cpu = Array.new
|
551
|
+
mem = Array.new
|
552
|
+
running = Array.new
|
553
|
+
|
554
|
+
now = (Time.now.to_i * 1000) # Get the milliseconds since the epoch
|
555
|
+
start = now - (rawdata.size * 10000) # Get the milliseconds from the start of the buffer
|
556
|
+
|
557
|
+
rawdata.each do |i|
|
558
|
+
cpu << [start, i[:cpuload]]
|
559
|
+
mem << [start, i[:memload]]
|
560
|
+
running << [start, i[:running]]
|
561
|
+
|
562
|
+
start += 10000
|
563
|
+
end
|
564
|
+
|
565
|
+
cpuseries = {:label=>"CPU %", :data=>cpu, :color=>"#ED0E0E"}
|
566
|
+
memseries = {:label=>"MEM %", :data=>mem, :color=>"#0E7AED"}
|
567
|
+
runningseries = {:label=>"Active", :data=>running}
|
568
|
+
|
569
|
+
return [cpuseries, memseries, runningseries]
|
570
|
+
|
571
|
+
rescue Exception => e
|
572
|
+
raise e
|
432
573
|
end
|
433
574
|
end
|
434
575
|
|
435
576
|
|
577
|
+
|
436
578
|
##
|
437
579
|
# Ardtweeno::Dispatcher#status? returns the system status of the Ardtweeno Gateway host
|
438
580
|
#
|
439
581
|
# * *Args* :
|
440
582
|
# - ++ ->
|
441
583
|
# * *Returns* :
|
442
|
-
# - Hash
|
584
|
+
# - Hash {Boolean running, String cpuload, String memload}
|
443
585
|
# * *Raises* :
|
444
586
|
#
|
445
587
|
def status?()
|
446
588
|
@log.debug "Ardtweeno::Dispatcher#status? executing"
|
447
589
|
begin
|
448
590
|
unless Ardtweeno.options[:test] ||= false
|
449
|
-
|
450
|
-
|
451
|
-
|
452
|
-
# Get Avgload
|
453
|
-
currentLoadPercentage = calculateAvgLoad(maxLoad)
|
454
|
-
|
455
|
-
# Get MEM Usage
|
456
|
-
usedMem, totalMem = calculateMemLoad()
|
457
|
-
|
458
|
-
|
459
|
-
thecpuload = '%.2f' % currentLoadPercentage
|
460
|
-
thememload = '%.2f' % ((usedMem / totalMem.to_f) * 100)
|
461
|
-
|
462
|
-
theResponse = {:running=>@running,
|
463
|
-
:cpuload=>thecpuload,
|
464
|
-
:memload=>thememload}
|
465
|
-
|
466
|
-
@log.debug theResponse.inspect
|
467
|
-
|
591
|
+
theResponse = Ardtweeno::API.status
|
592
|
+
theResponse[:running] = @running
|
468
593
|
return theResponse
|
469
|
-
|
470
594
|
else # When in testing mode, return blank data
|
471
595
|
theResponse = {:running=>@running,
|
472
|
-
|
473
|
-
|
474
|
-
|
475
|
-
@log.debug theResponse.inspect
|
596
|
+
:cpuload=>0.0,
|
597
|
+
:memload=>0.0}
|
476
598
|
|
599
|
+
@log.debug theResponse.inspect
|
477
600
|
return theResponse
|
478
601
|
end
|
479
|
-
|
480
602
|
rescue Exception => e
|
481
|
-
|
482
|
-
end
|
603
|
+
raise e
|
604
|
+
end
|
483
605
|
end
|
484
606
|
|
485
607
|
|
@@ -498,6 +620,7 @@ module Ardtweeno
|
|
498
620
|
end
|
499
621
|
|
500
622
|
|
623
|
+
|
501
624
|
##
|
502
625
|
# Ardtweeno::Dispatcher#authenticate? Checks the API key provided with that in the DB
|
503
626
|
#
|
@@ -522,6 +645,7 @@ module Ardtweeno
|
|
522
645
|
end
|
523
646
|
end
|
524
647
|
|
648
|
+
|
525
649
|
|
526
650
|
##
|
527
651
|
# Ardtweeno::Dispatcher#getPostsURI returns the front page news URI ~/.ardtweeno/conf.yaml
|
@@ -554,6 +678,7 @@ module Ardtweeno
|
|
554
678
|
return Array.new
|
555
679
|
end
|
556
680
|
end
|
681
|
+
|
557
682
|
|
558
683
|
|
559
684
|
##
|
@@ -569,6 +694,7 @@ module Ardtweeno
|
|
569
694
|
@posts["posts"] = newPosts
|
570
695
|
Ardtweeno::ConfigReader.save(@posts, Ardtweeno::POSTPATH)
|
571
696
|
end
|
697
|
+
|
572
698
|
|
573
699
|
|
574
700
|
##
|
@@ -586,6 +712,7 @@ module Ardtweeno
|
|
586
712
|
end
|
587
713
|
|
588
714
|
|
715
|
+
|
589
716
|
##
|
590
717
|
# Ardtweeno::Dispatcher#bootstrap which configures the Dispatcher instance for initial operation
|
591
718
|
#
|
@@ -597,6 +724,14 @@ module Ardtweeno
|
|
597
724
|
#
|
598
725
|
def bootstrap
|
599
726
|
|
727
|
+
# Create a thread which updates the statusbuffer
|
728
|
+
@statusthread = Thread.new do
|
729
|
+
loop do
|
730
|
+
@statusbuffer.push(status?)
|
731
|
+
sleep(10)
|
732
|
+
end
|
733
|
+
end
|
734
|
+
|
600
735
|
# Read in the configuration files
|
601
736
|
begin
|
602
737
|
@log.debug "Reading in the configuration files"
|
@@ -606,8 +741,6 @@ module Ardtweeno
|
|
606
741
|
@posts = Ardtweeno::ConfigReader.load(Ardtweeno::POSTPATH)
|
607
742
|
|
608
743
|
rescue Exception => e
|
609
|
-
@log.fatal e.message
|
610
|
-
@log.fatal e.backtrace
|
611
744
|
raise e
|
612
745
|
end
|
613
746
|
|
@@ -636,8 +769,6 @@ module Ardtweeno
|
|
636
769
|
|
637
770
|
@nodeManager = Ardtweeno::NodeManager.new(nmoptions)
|
638
771
|
rescue Exception => e
|
639
|
-
@log.debug e.message
|
640
|
-
@log.debug e.backtrace
|
641
772
|
raise e
|
642
773
|
end
|
643
774
|
|
@@ -668,93 +799,11 @@ module Ardtweeno
|
|
668
799
|
rescue Exception => e
|
669
800
|
raise e
|
670
801
|
end
|
671
|
-
|
672
|
-
|
673
|
-
end # End of the bootstrap()
|
674
|
-
|
675
|
-
|
676
|
-
def calculateMemLoad()
|
677
|
-
begin
|
678
|
-
memhash = Hash.new
|
679
|
-
meminfo = File.read('/proc/meminfo')
|
680
|
-
meminfo.each_line do |i|
|
681
|
-
key, val = i.split(':')
|
682
|
-
if val.include?('kB') then val = val.gsub(/\s+kB/, ''); end
|
683
|
-
memhash["#{key}"] = val.strip
|
684
|
-
end
|
685
|
-
|
686
|
-
totalMem = memhash["MemTotal"].to_i
|
687
|
-
freeMem = memhash["MemFree"].to_i + memhash["Buffers"].to_i + memhash["Cached"].to_i
|
688
|
-
usedMem = totalMem - freeMem
|
689
|
-
|
690
|
-
@log.debug "Total Memory: #{totalMem} (100%)"
|
691
|
-
@log.debug "Used Memory: #{usedMem} (#{'%.2f' % ((usedMem / totalMem.to_f) * 100)}%)"
|
692
|
-
@log.debug "Free Memory: #{freeMem} (#{'%.2f' % ((freeMem / totalMem.to_f) * 100)}%)"
|
693
|
-
|
694
|
-
return usedMem, totalMem
|
695
|
-
|
696
|
-
rescue Exception => e
|
697
|
-
@log.debug "Some issue accessing /proc/meminfo"
|
698
|
-
usedMem, totalMem = 0, 0
|
699
|
-
|
700
|
-
return usedMem, totalMem
|
701
|
-
end
|
702
|
-
end
|
703
|
-
|
704
|
-
def calculateAvgLoad(maxLoad)
|
705
|
-
begin
|
706
|
-
loadavg = File.read('/proc/loadavg')
|
707
|
-
loads = loadavg.scan(/\d+.\d+/)
|
708
|
-
onemin = loads[0]
|
709
|
-
fivemin = loads[1]
|
710
|
-
fifteenmin = loads[2]
|
711
|
-
|
712
|
-
@log.debug "LoadAvg are as follows: 1min #{onemin}, 5min #{fivemin}, 15min #{fifteenmin}"
|
713
802
|
|
714
|
-
|
715
|
-
currentLoadPercentage = loadval * 100
|
716
|
-
|
717
|
-
@log.debug "Currently running at #{'%.2f' % currentLoadPercentage}% of max load"
|
718
|
-
|
719
|
-
return currentLoadPercentage
|
720
|
-
|
721
|
-
rescue Exception => e
|
722
|
-
@log.debug "Some issue accessing /proc/loadavg"
|
723
|
-
onemin, fivemin, fifteenmin = 0, 0, 0
|
724
|
-
|
725
|
-
loadval = (onemin.to_f / maxLoad)
|
726
|
-
currentLoadPercentage = loadval * 100
|
727
|
-
|
728
|
-
return currentLoadPercentage
|
729
|
-
end
|
730
|
-
end
|
731
|
-
|
732
|
-
|
733
|
-
def calculateCPUCores()
|
734
|
-
begin # Checking for multi-core CPU
|
735
|
-
cpuinfo = File.read('/proc/cpuinfo')
|
736
|
-
coreinfo = cpuinfo.scan(/cpu cores\s+:\s+\d+/)
|
737
|
-
|
738
|
-
tempVal = coreinfo[0]
|
739
|
-
numOfCores = tempVal.scan(/\d+/)[0].to_i
|
740
|
-
numOfThreadsPerCore = coreinfo.size / numOfCores
|
741
|
-
maxLoad = (numOfThreadsPerCore * numOfCores).to_f
|
742
|
-
|
743
|
-
@log.debug "Found #{numOfCores} cores with #{numOfThreadsPerCore} threads per core"
|
744
|
-
@log.debug "Max desirable cpu load: #{maxLoad}"
|
745
|
-
|
746
|
-
return maxLoad
|
747
|
-
|
748
|
-
rescue Exception => e
|
749
|
-
@log.debug "Unable to find cpu core info in /proc/cpuinfo, assuming system has a single core"
|
750
|
-
maxLoad = 1.0
|
751
|
-
|
752
|
-
return maxLoad
|
753
|
-
end
|
754
|
-
end
|
803
|
+
end # End of the bootstrap()
|
755
804
|
|
756
805
|
|
757
|
-
private :bootstrap
|
806
|
+
private :bootstrap
|
758
807
|
|
759
808
|
end
|
760
809
|
end
|
@@ -178,8 +178,8 @@ module Ardtweeno
|
|
178
178
|
|
179
179
|
@watchlist.each do |i|
|
180
180
|
|
181
|
-
@log.debug "Comparing " + i[:node] + " and " + node
|
182
|
-
if i[:node] == node
|
181
|
+
unless node.nil? then @log.debug "Comparing " + i[:node] + " and " + node; end
|
182
|
+
if i[:node] == node
|
183
183
|
return true
|
184
184
|
end
|
185
185
|
end
|
@@ -205,7 +205,7 @@ module Ardtweeno
|
|
205
205
|
node = search({:node=>params[:node]})
|
206
206
|
@log.debug "Found Node: " + node.inspect
|
207
207
|
|
208
|
-
if watched?(node)
|
208
|
+
if watched?(params[:node])
|
209
209
|
raise Ardtweeno::AlreadyWatched
|
210
210
|
end
|
211
211
|
|
@@ -241,20 +241,44 @@ module Ardtweeno
|
|
241
241
|
#
|
242
242
|
def removeWatch(node)
|
243
243
|
begin
|
244
|
-
node
|
244
|
+
@log.debug "removeWatch called, querying the node manager for the correct node"
|
245
|
+
@log.debug "Searching watchlist for node"
|
246
|
+
@log.debug "Size of watchlist before: " + @watchlist.size.to_s
|
245
247
|
|
246
248
|
@watchlist.each do |i|
|
247
|
-
|
249
|
+
@log.debug "Comparing #{i[:node]} to #{node}"
|
250
|
+
if i[:node] == node
|
251
|
+
@log.debug "Node to be deleted has been found, deleting"
|
248
252
|
@watchlist.delete(i)
|
249
253
|
end
|
250
254
|
end
|
251
255
|
|
256
|
+
@log.debug "Size of watchlist after: " + @watchlist.size.to_s
|
257
|
+
|
252
258
|
rescue Ardtweeno::NotInNodeList => e
|
253
259
|
raise e
|
254
260
|
end
|
255
261
|
end
|
256
262
|
|
257
263
|
|
264
|
+
|
265
|
+
##
|
266
|
+
# Ardtweeno::NodeManager#watchList returns the list of nodes being watched
|
267
|
+
#
|
268
|
+
# * *Args* :
|
269
|
+
# - ++ ->
|
270
|
+
# * *Returns* :
|
271
|
+
# - Array of Hash { String :node, String :notifyURL,
|
272
|
+
# String :method, String :timeouts }
|
273
|
+
# * *Raises* :
|
274
|
+
# -
|
275
|
+
#
|
276
|
+
def watchList
|
277
|
+
return @watchlist
|
278
|
+
end
|
279
|
+
|
280
|
+
|
281
|
+
|
258
282
|
##
|
259
283
|
# Ardtweeno::NodeManager#pushNotification pushes a notification to the node watcher
|
260
284
|
#
|
@@ -270,28 +294,23 @@ module Ardtweeno
|
|
270
294
|
@log.debug "Traversing watchlist"
|
271
295
|
@watchlist.each do |i|
|
272
296
|
|
273
|
-
@log.debug "Comparing " + i[:node]
|
297
|
+
@log.debug "Comparing " + i[:node] + " to " + node
|
274
298
|
|
275
|
-
if i[:node]
|
299
|
+
if i[:node] == node
|
276
300
|
|
277
301
|
@log.debug "Associated watch found, checking for method " + i[:method]
|
278
302
|
|
279
303
|
if i[:method] == "POST"
|
280
304
|
@log.debug "HTTP POST method executing"
|
281
|
-
@log.debug "URL: #{i[:notifyURL]}"
|
282
|
-
@log.debug "Title: Push notification"
|
283
|
-
@log.debug "Content: #{i[:node].node}"
|
284
|
-
@log.debug "Code: #{i[:node].to_s}"
|
285
|
-
|
286
305
|
Typhoeus::Request.post(i[:notifyURL],
|
287
306
|
:body=> { :title=>"Push notification",
|
288
|
-
:content=>"#{i[:node]
|
307
|
+
:content=>"#{i[:node]}",
|
289
308
|
:code=>""})
|
290
309
|
elsif i[:method] == "GET"
|
291
310
|
@log.debug "HTTP GET method executing"
|
292
311
|
Typhoeus::Request.get(i[:notifyURL],
|
293
312
|
:body=> { :title=>"Push notification",
|
294
|
-
:content=>"#{i[:node]
|
313
|
+
:content=>"#{i[:node]}",
|
295
314
|
:code=>""})
|
296
315
|
end
|
297
316
|
|