summaryrefslogtreecommitdiffstats
path: root/gearman/wolWorker.py
diff options
context:
space:
mode:
authorBjörn Geiger2011-07-21 12:00:50 +0200
committerBjörn Geiger2011-07-21 12:00:50 +0200
commit5a495dc5d04197604841f28f14625727f7b97876 (patch)
tree33de0fc307132ccaa8135451ac0f697975f28c75 /gearman/wolWorker.py
parentboot Action im GearmanController (diff)
downloadpoolctrl-5a495dc5d04197604841f28f14625727f7b97876.tar.gz
poolctrl-5a495dc5d04197604841f28f14625727f7b97876.tar.xz
poolctrl-5a495dc5d04197604841f28f14625727f7b97876.zip
wolWorker hinzugefügt
Diffstat (limited to 'gearman/wolWorker.py')
-rw-r--r--gearman/wolWorker.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/gearman/wolWorker.py b/gearman/wolWorker.py
new file mode 100644
index 0000000..be0fca2
--- /dev/null
+++ b/gearman/wolWorker.py
@@ -0,0 +1,42 @@
+#!/usr/bin/python
+
+from gearman import GearmanWorker
+import socket
+import struct
+
+# http://code.activestate.com/recipes/358449-wake-on-lan/
+def wake_on_lan(macaddress):
+ """ Switches on remote computers using WOL. """
+
+ # Check macaddress format and try to compensate.
+ if len(macaddress) == 12:
+ pass
+ elif len(macaddress) == 12 + 5:
+ sep = macaddress[2]
+ macaddress = macaddress.replace(sep, '')
+ else:
+ raise ValueError('Incorrect MAC address format')
+
+ # Pad the synchronization stream.
+ data = ''.join(['FFFFFFFFFFFF', macaddress * 20])
+ send_data = ''
+
+ # Split up the hex values and pack.
+ for i in range(0, len(data), 2):
+ send_data = ''.join([send_data,
+ struct.pack('B', int(data[i: i + 2], 16))])
+
+ # Broadcast it to the LAN.
+ sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
+ sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
+ sock.sendto(send_data, ('<broadcast>', 7))
+
+def wolTask(worker, job):
+ wake_on_lan(job.data)
+ print 'WOL send to: %s' % job.data
+ return 'Magic packet send.\n'
+
+worker = GearmanWorker(["127.0.0.1"])
+worker.register_task('wol', wolTask)
+print 'starting wol worker'
+worker.work() \ No newline at end of file