# $Id$
+# $URL$
from PLC.Faults import *
from PLC.Method import Method
from PLC.Parameter import Parameter, Mixed
from PLC.Auth import Auth, BootAuth, SessionAuth
from PLC.Nodes import Node, Nodes
-can_update = ['run_level', 'extrainfo']
+can_update = ['run_level']
class ReportRunlevel(Method):
"""
accepts = [
Mixed(BootAuth(), SessionAuth(), Auth()),
{'run_level': Node.fields['run_level'],
- 'extrainfo': Node.fields['extrainfo'],
},
Mixed(Node.fields['node_id'],
Node.fields['hostname'])
nodes = [self.caller]
node = nodes[0]
+ # avoid logging this even too often
+ # avoid logging occurrences where run_level does not change
+ former_level=None
+ if 'run_level' in node: former_level=node['run_level']
node.update_last_contact()
for field in can_update:
node.update({field : report_fields[field]})
node.sync(commit=True)
-
- self.message = "Node Runlevel Report : %s" % ", ".join(report_fields.keys())
+
+ # skip logging in this case
+ if former_level and 'run_level' in node and node['run_level'] == former_level:
+ pass
+ else:
+ # handle the 'run_level' key
+ message="run level " + node['hostname'] + ":"
+ if 'run_level' in report_fields:
+ message += str(former_level) + "->" + report_fields['run_level']
+ message += ", ".join( [ k + "->" + v for (k,v) in report_fields.items() if k not in ['run_level'] ] )
return 1