This repository has been archived by the owner on Mar 16, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 27
/
Copy pathadsl-monitoring.py
executable file
·139 lines (107 loc) · 4.25 KB
/
adsl-monitoring.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#!/usr/bin/python
##############################################################################
#
# Copyright (C) 2004-2005 Kevin Deldycke <[email protected]>
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#
##############################################################################
from commands import getstatusoutput
from os import system
def getInternetUpStatus():
# Do the shell command
result = getstatusoutput("ping -c 3 google.com | grep packets")
# Test the return code of the command
if result[0] != 0:
return False
else:
return True
def isRunningProcess(process):
# Use the 'c' option in ps to avoid self-reference to grep process
result = getstatusoutput("ps axc | grep " + process)
# Create a list of found processes
process_list = result[1].splitlines()
# Count the number of found process to be sure that our program is running
if len(process_list) == 0:
return False
else:
return True
def checkDhcpd():
if isRunningProcess("dhcpd"):
system("logger -t reconnect dhcpd is working well")
else:
system("logger -t reconnect dhcpd do not work")
system("/etc/init.d/dhcpd restart")
system("logger -t reconnect dhcpd restarted")
def checkMldonkey():
if isRunningProcess("mlnet"):
system("logger -t reconnect Mldonkey is working well")
else:
system("logger -t reconnect Mldonkey do not work")
result = getstatusoutput("/etc/init.d/mldonkey restart")
if result[1].find("File ./file_sources.ini.tmp exists") != -1:
system("rm -f /var/lib/mldonkey/file_sources.ini.tmp")
system("logger -t reconnect File file_sources.ini.tmp removed")
system("/etc/init.d/mldonkey restart")
system("logger -t reconnect Mldonkey restarted")
def getPppId():
# Get the line of ifconfig command where the ppp network interface is found
result = getstatusoutput("/sbin/ifconfig | grep ppp")
# Extract just the IP address
if result[0] != 0:
return None
else:
return str(result[1].strip().split(" ")[0])[3:]
def getPppIp():
# Get the line of ifconfig command where the IP is displayed
result = getstatusoutput("/sbin/ifconfig | grep -A 1 ppp | grep inet")
# Extract just the IP address
return str(result[1].strip().split(" ")[1])[5:]
def main():
system("logger -t reconnect Start the reconnect script...")
# Check that some important deamon running
# checkDhcpd()
# checkMldonkey()
# Number of retry
retry = 3
# Try to reconnect if needed
ppp_current_id = getPppId()
net_status = getInternetUpStatus()
while (net_status == False or ppp_current_id != '0') and retry > 0:
# Print the good message corresponding to the true problem
if net_status == False:
system("logger -t reconnect Internet do not work !")
else:
system("logger -t reconnect ppp interface ID is not 0 !")
# Restart the internet service
system("logger -t reconnect Restart network service...")
system("/etc/init.d/network restart")
ppp_current_id = getPppId()
net_status = getInternetUpStatus()
retry -= 1
# Keep a log message of the current script effect
if retry == 0:
system("logger -t reconnect Connection to internet failed after 3 restart")
if ppp_current_id == '0':
system("logger -t reconnect The computer has to be restarted to get the right ppp ID")
system("shutdown -r now")
else:
pass
# TODO : A problems can lead to this situation : the modem is "overheated";
# Find a solution !!! (modem remote off-power for x seconds ?)
else:
system("logger -t reconnect Internet is working, public IP is " + getPppIp())
if __name__ == "__main__":
main()