Commit 5a55b7f2 authored by Kazunori Fujiwara's avatar Kazunori Fujiwara
Browse files

An example statistics respondent accepts two command:

   "statistics" group "getstat"
   "Boss"       group "shutdown"
An example statistics collector send "getstat" command to "statistics" group.
It also accepts "Boss" group "shutdown" command.


git-svn-id: svn://bind10.isc.org/svn/bind10/branches/f2f200910@179 e5f2f494-b856-4b98-b285-d166d9295462
parent 39f3bac6
#!/usr/bin/python
import ISC
cc = ISC.CC.Session()
cc.group_subscribe("Boss")
cc.group_sendmsg({ "command":"shutdown"},"Boss")
#!/usr/bin/python
#
# This program collects "counter" from "statistics" channel.
# It accepts one command: "Boss" group "shutdown"
import ISC
import time
import select
timeout = 1
tcp = ISC.CC.Session()
print tcp.lname
tcp.group_subscribe("statistics")
step_time = 1
statgroup = "statistics"
sent = time.time()
tcp.group_sendmsg({ "command": "whoareyou"}, "statistics")
cc = ISC.CC.Session()
print cc.lname
cc.group_subscribe(statgroup)
cc.group_subscribe("Boss")
print "SEND: whoareyou"
while (sent + timeout - time.time()) > 0:
wait = sent + timeout - time.time()
print "wait=",wait
r,w,e = select.select([tcp._socket],[],[], wait)
for sock in r:
if sock == tcp._socket:
data,envelope = tcp.group_recvmsg(False);
print "data:", data
print ""
server_by_name = {}
server_by_id = []
counter = []
timestamp = []
servers = 0
sent = -1
last_sent = -1
loop = 0
while loop < 10000:
print "loop=", loop, " SEND: getstat"
sent = time.time();
tcp.group_sendmsg({ "command": "getstat"}, "statistics")
while (sent + timeout - time.time()) > 0:
wait = sent + timeout - time.time()
r,w,e = select.select([tcp._socket],[],[], wait)
for sock in r:
if sock == tcp._socket:
data,envelope = tcp.group_recvmsg(False);
print envelope["from"], " : ", data
loop += 1
while 1:
wait = sent + step_time - time.time()
if wait <= 0:
sent = time.time();
command = { "command": "getstat", "sent":time.time() }
print "loop=", loop, " SEND: ", command
cc.group_sendmsg(command, "statistics")
wait = last_sent + step_time - time.time()
if wait < 0:
wait = step_time
loop += 1
r,w,e = select.select([cc._socket],[],[], wait)
for sock in r:
if sock == cc._socket:
data,envelope = cc.group_recvmsg(False)
if (envelope["group"] == "Boss"):
if (data["command"] == "shutdown"):
exit()
if (envelope["group"] == statgroup):
if (envelope["from"] in server_by_name):
id = server_by_name[envelope["from"]]
delta_t = float(data["sent"]) - float(timestamp[id])
delta_c = float(data["counter"]) - float(counter[id])
print "server",id," time=",data["sent"], " counter=", data["counter"], " dT=", delta_t, " dC=", delta_c
timestamp[id] = data["sent"]
counter[id] = data["counter"]
else:
print "server ", servers, " name ", envelope["from"]
server_by_id.append(envelope["from"])
server_by_name[envelope["from"]] = len(server_by_id) - 1
counter.append(data["counter"])
timestamp.append(data["sent"])
servers += 1
......@@ -3,34 +3,40 @@
# This program acts statistics respondent.
# It has pseudo "counter" which is incremented each 0.3 second and C-channel query.
# Two command is available
# "whoareyou"
# "getstat"
# "statistics" group: "getstat"
# "Boss" group: "shutdown"
import ISC
import socket
import select
import time
import random
statgroup = "statistics"
cc = ISC.CC.Session()
print cc.lname
print (cc.lname)
cc.group_subscribe(statgroup)
cc.group_subscribe("Boss")
counter = 0
while 1:
r,w,e = select.select([cc._socket],[],[],0.3)
counter += 1
r,w,e = select.select([cc._socket],[],[])
for sock in r:
if sock == cc._socket:
data,envelope = cc.group_recvmsg(False);
if (envelope["group"] == statgroup):
print data["command"]
if (data["command"] == "whoareyou"):
cc.group_reply(envelope, {"name": cc.lname })
elif (data["command"] == "getstat"):
cc.group_reply(envelope, {"timestamp": time.time(), "counter":counter})
if (data["command"] == "getstat"):
cc.group_reply(envelope,
{
"response":data["command"],
"sent": data["sent"],
"counter":counter
})
# Do another statistics command
elif (envelope["group"] == "Boss"):
if (data["command"] == "shutdown"):
exit()
# Do another group
# Do another socket
# Do main work
counter += random.randrange(1,100)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment