CheckGameServiceState-Monitoring
Check game service state, if state turn to "INVALID", send alert to related department.
Last updated
Check game service state, if state turn to "INVALID", send alert to related department.
Last updated
Script to get state.
#!/bin/python
# -*- coding: utf-8 -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
from datetime import datetime
import sys
import os
import subprocess
import base64
monitorServer='10.**.**.**'
seleniumServer='10.**.**.**'
seleniumServer_Hostname="TH-**"
#kill process
def kill_process(myprocess):
subprocess.call(["salt", seleniumServer_Hostname,"cmd.run","taskkill /F /IM "+ myprocess.])
# subprocess.call(["salt", seleniumServer_Hostname,"cmd.exec_code","python", \
# "import psutil ; PROCNAME = '"+ myprocess +"' ; "+ \
# "[proc.kill() for proc in psutil.process_iter() if proc.name() == PROCNAME]"])
#star selenium server
def restart_selenium_server():
subprocess.call(["salt", seleniumServer_Hostname,"cmd.run","sc stop selenium & ping 127.0.0.1 -n 4 & sc start selenium"])
##############kill_process("chromedriver.exe")
#get input username and password
username="tw**"
password="***"
InGateD01='InGateD01'
InGateD02='InGateD02'
LobbyD='LobbyD'
LoGateD01='LoGateD01'
LoGateD02='LoGateD02'
Lobby_list=[InGateD01,\
InGateD02,\
LobbyD,\
LoGateD01,\
LoGateD02 ]
WorldDB01='WorldDB01'
WorldDB03='WorldDB03'
WorldDB04='WorldDB04'
Cache_list=[WorldDB01, \
WorldDB03, \
WorldDB04 ]
WorldD01='WorldD01'
WorldD03='WorldD03'
WorldD04='WorldD04'
Game_list=[ WorldD01, \
WorldD03, \
WorldD04 ]
ArenaLobby='ArenaLobby'
ArenaD01='ArenaD01'
ArenaD02='ArenaD02'
Dungeon01='Dungeon01'
Dungeon02='Dungeon02'
Arena_list=[ ArenaLobby,\
ArenaD01,\
ArenaD02,\
Dungeon01, \
Dungeon02 ]
AccountIn='AccountIn'
Achieve='Achieve'
CacheGate='CacheGate'
MarkDA='MarkDARA'
MarketDD='MarketDD'
MarkRA='MarkDARA'
MarketRD='MarketRD'
PostOffD='PostOffD'
Rank='Rank'
DuelBot='DuelBot'
Economy_list=[ AccountIn,\
Achieve,\
CacheGate,\
MarkDA,\
MarketDD,\
MarkRA,\
MarketRD,\
PostOffD,\
Rank,\
DuelBot ]
def state_check(seq,name):
try:
state=(browser.find_element_by_xpath('//*[@id="rowContents"]/tr['+str(seq+1)+']/td[5]')).text
print name+ ": "+state
except:
print "Get state fail. "
if state=="INVALID":
os.system('echo "Service '+name+' is Invalid!!! Please check right now!" | mutt -e "my_hdr from:thlive<master@th.com>" -s " game service check" abc@domain.com')
Msg=name+' INVALID '+ str(datetime.now())
print Msg
with open('/srv/salt/CheckServiceState/CheckServiceState.log',"a+") as logfile:
logfile.write(Msg+'\n')
def page_state_check(list_name,length):
for i in range(0,length):
state_check(i,list_name[i])
#print i,list_name[i]
def connect_selenium_server():
try:
global browser
browser= webdriver.Remote(
command_executor="http://"+ seleniumServer +":4444/wd/hub",
desired_capabilities={'browserName': 'chrome',
'version': '2',
'javascriptEnabled': True})
except:
global restart_time
if restart_time>2:
#kill_process("chrome.exe")
#kill_process("conhost.exe")
print "Selenium server restart fail."
#email alert
os.system('echo "Selenium server restart fail. Please check." | mutt -e "my_hdr from:thlive<master@th.com>" -s "selenium check" abc@domain.com')
exit()
else:
restart_time+=1
kill_process("chrome.exe")
kill_process("chromedriver.exe")
kill_process("java.exe")
restart_selenium_server()
print "restart time: "+str(restart_time)
print "Connection error. Webdriver restarted"
connect_selenium_server()
#return
def LiveService_state_check():
#kill_process("chromedriver.exe")
#kill_process("conhost.exe")
global restart_time
restart_time=0
connect_selenium_server()
####open website
try:
browser.get('http://'+username+':'+password+'@'+ monitorServer+'/monitoring/DaemonLobby.aspx')
print(browser.title+'\n')
browser.implicitly_wait(60)
except:
print "Open Website Error."
time.sleep(5)
browser.find_element_by_link_text('Lobby').click()
browser.implicitly_wait(10)
print 'Lobby'
page_state_check(Lobby_list,len(Lobby_list))
browser.find_element_by_link_text('Cache').click()
browser.implicitly_wait(10)
print 'Cache'
page_state_check(Cache_list,len(Cache_list))
browser.find_element_by_link_text('Game').click()
browser.implicitly_wait(10)
print 'Game'
page_state_check(Game_list,len(Game_list))
browser.find_element_by_link_text('Arena').click()
browser.implicitly_wait(10)
print 'Arena'
page_state_check(Arena_list,len(Arena_list))
browser.find_element_by_link_text('Economy').click()
browser.implicitly_wait(10)
print 'Economy'
page_state_check(Economy_list,len(Economy_list))
browser.quit()
LiveService_state_check()
If script return "INVALID", it will write to log file, use zabbix monitor that file and set alert. At the same time email alert will send to all related department.
4.Set schedule, run every two minutes.
vim /etc/crontab
*/2 * * * * root scl enable python27 "python /srv/salt/CheckServiceState/CheckServiceState.py"