summaryrefslogtreecommitdiffstats
path: root/gearman/pingWorker.py
diff options
context:
space:
mode:
authorBjörn Geiger2011-07-13 16:08:46 +0200
committerBjörn Geiger2011-07-13 16:08:46 +0200
commitb07c731b7ea19603419be92bb9e87a88e398baa3 (patch)
tree8b41269c214aa3f3ec3992e578b7ec571d791da1 /gearman/pingWorker.py
parentpingWorker hinzugefügt (diff)
downloadpoolctrl-b07c731b7ea19603419be92bb9e87a88e398baa3.tar.gz
poolctrl-b07c731b7ea19603419be92bb9e87a88e398baa3.tar.xz
poolctrl-b07c731b7ea19603419be92bb9e87a88e398baa3.zip
pinkWorker hinzugefügt
Diffstat (limited to 'gearman/pingWorker.py')
-rwxr-xr-xgearman/pingWorker.py43
1 files changed, 43 insertions, 0 deletions
diff --git a/gearman/pingWorker.py b/gearman/pingWorker.py
new file mode 100755
index 0000000..a880fc7
--- /dev/null
+++ b/gearman/pingWorker.py
@@ -0,0 +1,43 @@
+#!/usr/bin/python
+
+from gearman import GearmanWorker
+import subprocess
+import json
+import time
+import re
+
+def pingTask(worker, job):
+ total = 1
+ timeout = 1
+ ret = {"rawoutput": "", "alive": False, "rc": -1}
+ target = job.data.strip()
+ validIpAddressRegex = "^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$"
+ validHostnameRegex = "^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$"
+ if not (re.match(validIpAddressRegex, target) or re.match(validHostnameRegex, target)):
+ print 'malformed request'
+ return json.dumps({"error":"invalid parameter - must be ip or host address", "alive":False}) + "\n"
+ pingcmd = subprocess.Popen(["ping", "-W", "%s" % timeout, "-c", "%s" % total, "%s" % target],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ while pingcmd.returncode == None:
+ out = pingcmd.stdout.readline()
+ if out != None:
+ ret['rawoutput'] += out
+ time.sleep(0.05)
+ pingcmd.poll()
+
+ ret['rawoutput'] = ret['rawoutput'].strip() # get rid of newlines
+ rc = ret['rc'] = pingcmd.returncode
+ if rc == 0:
+ ret['alive'] = True
+ print '%s is alive ' % job.data
+ return json.dumps(ret) + "\n"
+ else:
+ print '%s is offline' % job.data
+ return json.dumps(ret) + "\n"
+
+worker = GearmanWorker(["127.0.0.1"])
+worker.register_task('ping', pingTask)
+print 'Starting gearman ping worker'
+worker.work() \ No newline at end of file