kannel_monitor 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +58 -0
- data/Rakefile +1 -0
- data/bin/kannel_monitor +6 -0
- data/config/kannel_monitor.yml +15 -0
- data/kannel_monitor.gemspec +28 -0
- data/lib/kannel_monitor.rb +7 -0
- data/lib/kannel_monitor/kannel_monitor.rb +99 -0
- data/lib/kannel_monitor/send_mail.rb +17 -0
- data/lib/kannel_monitor/version.rb +3 -0
- metadata +113 -0
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZjBmNzZiOTZlMjBjYmI2YTViZmUxY2NkNTE5OTZjNzJlMjIwOWM2NQ==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
MTc3YzQyNmIwYTdjMTQ5MDRmYzhkYjdmNjliZGJkMjNiMTU1MjhkMQ==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
M2U4ZjU5OTdjNzA5OTFlMzMyODIzYjg5ZGZmNTgwMmFkNTVkMjcwNDNlODE3
|
10
|
+
YTE2ZWI5MWU1NmZhZWU2YmE5ZTUzZmQwNDFmYWJkZGM5ZjYwZDNhZDhjODli
|
11
|
+
ZGQ3MGNlNDQwOGQ4OGNhODhiYjRjZjk3OTY1YmY0NzljZmNkMmM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
NzBhMjA2YzI5NjQxZTc5MzUwNGFjOTJjZWI3YjRkYzU0ODBlM2NlYzVlOGM1
|
14
|
+
YmRhNTBiZjUwMDJkNWJhYTBhOWRkOGRkNzAzZDEzZjA0Zjk4NWViNzQ0ZjEy
|
15
|
+
OTU1ZGY3MmZjZTVmZTJkN2ZkYzBiZGQzNWNjOWU1NmViZWE1ZmI=
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2013 shaiju
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# KannelMonitor
|
2
|
+
|
3
|
+
This is ruby gem for monitoring kannle smsc status. This gem will check
|
4
|
+
|
5
|
+
1 kannel status
|
6
|
+
2 kannel sms queue
|
7
|
+
3 smsc status
|
8
|
+
4 smsc queue
|
9
|
+
|
10
|
+
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add this line to your application's Gemfile:
|
15
|
+
|
16
|
+
gem 'kannel_monitor'
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
|
20
|
+
$ bundle
|
21
|
+
|
22
|
+
Or install it yourself as:
|
23
|
+
|
24
|
+
$ gem install kannel_monitor
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
To run this
|
29
|
+
|
30
|
+
|
31
|
+
$ kannel_monitor ' path to kannel /kannel_monitor.yml'
|
32
|
+
|
33
|
+
|
34
|
+
Format of kannel_monitor.yml
|
35
|
+
|
36
|
+
|
37
|
+
kannel_settings:
|
38
|
+
host: xxxxxxxxxx
|
39
|
+
port: xxxxxxx
|
40
|
+
username: admin
|
41
|
+
password: xxxxxxx
|
42
|
+
smsc_to_be_skipped:
|
43
|
+
- smsc1
|
44
|
+
- smsc2
|
45
|
+
kannel_name: 'TEST-KANNEL'
|
46
|
+
email_settings:
|
47
|
+
to: 'example@gmail.com'
|
48
|
+
from: 'notification@kannle.in'
|
49
|
+
|
50
|
+
|
51
|
+
|
52
|
+
## Contributing
|
53
|
+
|
54
|
+
1. Fork it
|
55
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
56
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
57
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
58
|
+
5. Create new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/kannel_monitor
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
kannel_settings:
|
2
|
+
host: xxxxxxxxxx
|
3
|
+
port: 13000
|
4
|
+
username: admin
|
5
|
+
password: xxxxxxx
|
6
|
+
smsc_to_be_skipped:
|
7
|
+
- VfirstTranscriticalESMS
|
8
|
+
- RouteSmsTransaction
|
9
|
+
kannel_name: 'FA-KANNEL'
|
10
|
+
email_settings:
|
11
|
+
to: 'shaiju@mobme.in'
|
12
|
+
from: 'notification@kannle.in'
|
13
|
+
|
14
|
+
|
15
|
+
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'kannel_monitor/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "kannel_monitor"
|
8
|
+
spec.version = KannelMonitor::VERSION
|
9
|
+
spec.authors = ["shaiju"]
|
10
|
+
spec.email = ["shaiju@mobme.in"]
|
11
|
+
spec.description = %q{Gem for monitor kannel}
|
12
|
+
spec.summary = %q{Gem for monitoring kannel }
|
13
|
+
spec.homepage = ""
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files`.split($/)
|
17
|
+
#spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.executables = ['kannel_monitor']
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
23
|
+
spec.add_development_dependency "rake"
|
24
|
+
spec.add_development_dependency "sendmail", "~> 0.0.1"
|
25
|
+
spec.add_development_dependency "pony", "~> 1.5.1"
|
26
|
+
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,99 @@
|
|
1
|
+
require "logger"
|
2
|
+
require 'yaml'
|
3
|
+
require 'nokogiri'
|
4
|
+
require 'open-uri'
|
5
|
+
require 'active_support/core_ext'
|
6
|
+
require_relative './send_mail'
|
7
|
+
|
8
|
+
module KannelMonitor
|
9
|
+
ERROR_COULD_NOT_CONNECT = "Could not connect to Kannel status URL"
|
10
|
+
ERROR_XML_PARSING = 'Could not parse Kannel status XML.'
|
11
|
+
ERROR_SMSC_QUEUE = 'SMS are getting queued on SMSC :: '
|
12
|
+
class Monitor
|
13
|
+
include Mailer
|
14
|
+
def initialize(configuration_file = {})
|
15
|
+
@settings = YAML.load_file(configuration_file).symbolize_keys!
|
16
|
+
@host = @settings[:kannel_settings]['host']
|
17
|
+
@port = @settings[:kannel_settings]['port']
|
18
|
+
@username = @settings[:kannel_settings]['username']
|
19
|
+
@password = @settings[:kannel_settings]['password']
|
20
|
+
@smsc_to_be_skipped = @settings[:kannel_settings]['smsc_to_be_skipped'] || []
|
21
|
+
@queue_alert_limit = @settings[:kannel_settings]['queue_alert_limit'] || 200
|
22
|
+
@kannel_name = @settings[:kannel_settings]['kannel_name'] || ""
|
23
|
+
@to_mails = @settings[:email_settings]['to']
|
24
|
+
@from_mail = @settings[:email_settings]['to'] || 'notification@kannel.org'
|
25
|
+
@logger = Logger.new(STDOUT)
|
26
|
+
@kannel_error_status = {'suspended' =>'kannel is in suspended state','isolated' => 'kannel is in isolated state' ,'full' => 'Kannel maximum-queue-length is achieved' ,'shutdown' =>'Kannel is shutdown state'}
|
27
|
+
@smsc_error_status = {'re-connecting' => 'SMSC is re-connecting :: ' , 'dead' => 'SMSC is dead ::' }
|
28
|
+
end
|
29
|
+
|
30
|
+
def start_monitoring
|
31
|
+
@xml_doc = prepare_xml_doc
|
32
|
+
if @xml_doc
|
33
|
+
fetch_kannel_status
|
34
|
+
fetch_smsc_status
|
35
|
+
fetch_queued_count
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def prepare_xml_doc
|
40
|
+
begin
|
41
|
+
@xml_content_doc = Nokogiri::XML(open("http://#{@host}:#{@port}/status.xml?username=#{@username}&password=#{@password}"))
|
42
|
+
@logger.info("Fetching Kannel status from http://#{@host}:#{@port}/status.xml?username=#{@username}&password=#{@password}")
|
43
|
+
rescue
|
44
|
+
@logger.info(ERROR_COULD_NOT_CONNECT)
|
45
|
+
send_mail(ERROR_COULD_NOT_CONNECT)
|
46
|
+
end
|
47
|
+
@xml_content_doc
|
48
|
+
end
|
49
|
+
|
50
|
+
def fetch_kannel_status
|
51
|
+
kannel_status = @xml_doc.css('status').text.split(",").first
|
52
|
+
@kannel_error_status.each do | key,value|
|
53
|
+
if kannel_status == key
|
54
|
+
@logger.info(value)
|
55
|
+
send_mail(value)
|
56
|
+
break
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def fetch_smsc_status
|
62
|
+
@logger.info('SMSC Status')
|
63
|
+
smscs = @xml_doc.css('smsc')
|
64
|
+
smscs.each do |smsc|
|
65
|
+
smsc_id = smsc.css('id').text
|
66
|
+
smsc_queue = smsc.css('queued').text
|
67
|
+
unless @smsc_to_be_skipped.include?(smsc_id)
|
68
|
+
status = smsc.css('status').text.split(' ')
|
69
|
+
@smsc_error_status.each do | key,value|
|
70
|
+
if status[0] == key
|
71
|
+
@logger.info(value + smsc_id )
|
72
|
+
send_mail(value + smsc_id)
|
73
|
+
break
|
74
|
+
end
|
75
|
+
end
|
76
|
+
if smsc_queue.to_i > @queue_alert_limit.to_i
|
77
|
+
@logger.info(ERROR_SMSC_QUEUE + smsc_id)
|
78
|
+
send_mail(ERROR_SMSC_QUEUE + smsc_id)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def fetch_queued_count
|
85
|
+
sent_status = @xml_doc.css('sent')
|
86
|
+
sent_status.each do |status|
|
87
|
+
queue_size = status.css('queued').text
|
88
|
+
if queue_size.to_i > @queue_alert_limit.to_i
|
89
|
+
text = "SMS are getting queued"
|
90
|
+
send_mail(text)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
#kannel_monitor = KannelMonitor::Monitor.new('/home/shaiju/kannel/kannel_monitor.yml')
|
99
|
+
#kannel_monitor.start_monitoring
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'sendmail'
|
3
|
+
require 'pony'
|
4
|
+
|
5
|
+
module KannelMonitor
|
6
|
+
module Mailer
|
7
|
+
def send_mail(text)
|
8
|
+
p "sending mail........."
|
9
|
+
Pony.mail(
|
10
|
+
:from => 'notification@kannel.org',
|
11
|
+
:to => @to_mails,
|
12
|
+
:via => :sendmail,
|
13
|
+
:subject => "[CRITICAL]::#{@kannel_name}::#{text}".upcase,
|
14
|
+
:body => "Kannel Name : #{@kannel_name} \nHost : #{@host} \nPort : #{@port} \n#{text} as on #{Time.now}")
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
metadata
ADDED
@@ -0,0 +1,113 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: kannel_monitor
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- shaiju
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2013-09-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ~>
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ~>
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ! '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ! '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sendmail
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.0.1
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.0.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pony
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: 1.5.1
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: 1.5.1
|
69
|
+
description: Gem for monitor kannel
|
70
|
+
email:
|
71
|
+
- shaiju@mobme.in
|
72
|
+
executables:
|
73
|
+
- kannel_monitor
|
74
|
+
extensions: []
|
75
|
+
extra_rdoc_files: []
|
76
|
+
files:
|
77
|
+
- Gemfile
|
78
|
+
- LICENSE.txt
|
79
|
+
- README.md
|
80
|
+
- Rakefile
|
81
|
+
- config/kannel_monitor.yml
|
82
|
+
- kannel_monitor.gemspec
|
83
|
+
- lib/kannel_monitor.rb
|
84
|
+
- lib/kannel_monitor/kannel_monitor.rb
|
85
|
+
- lib/kannel_monitor/send_mail.rb
|
86
|
+
- lib/kannel_monitor/version.rb
|
87
|
+
- bin/kannel_monitor
|
88
|
+
homepage: ''
|
89
|
+
licenses:
|
90
|
+
- MIT
|
91
|
+
metadata: {}
|
92
|
+
post_install_message:
|
93
|
+
rdoc_options: []
|
94
|
+
require_paths:
|
95
|
+
- lib
|
96
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - ! '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
101
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
|
+
requirements:
|
103
|
+
- - ! '>='
|
104
|
+
- !ruby/object:Gem::Version
|
105
|
+
version: '0'
|
106
|
+
requirements: []
|
107
|
+
rubyforge_project:
|
108
|
+
rubygems_version: 2.1.4
|
109
|
+
signing_key:
|
110
|
+
specification_version: 4
|
111
|
+
summary: Gem for monitoring kannel
|
112
|
+
test_files: []
|
113
|
+
has_rdoc:
|