2 # NEPI, a framework to manage network experiments
3 # Copyright (C) 2013 INRIA
5 # This program is free software: you can redistribute it and/or modify
6 # it under the terms of the GNU General Public License as published by
7 # the Free Software Foundation, either version 3 of the License, or
8 # (at your option) any later version.
10 # This program is distributed in the hope that it will be useful,
11 # but WITHOUT ANY WARRANTY; without even the implied warranty of
12 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 # GNU General Public License for more details.
15 # You should have received a copy of the GNU General Public License
16 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 # Author: Alina Quereilhac <alina.quereilhac@inria.fr>
19 # Julien Tribino <julien.tribino@inria.fr>
21 from xml.etree import cElementTree as ET
23 class MessageHandler():
25 .. class:: Class Args :
27 :param sliceid: Slice Name (= Xmpp Slice)
29 :param expid: Experiment ID (= Xmpp User)
34 This class is used only for OMF 5.4 Protocol and is going to become unused
38 def __init__(self, sliceid, expid ):
41 :param sliceid: Slice Name (= Xmpp Slice)
43 :param expid: Experiment ID (= Xmpp User)
47 self._slice_id = sliceid
51 def _id_element(self, parent, markup):
52 """ Insert a markup element with an id
54 :param parent: Parent element in an XML point of view
55 :type parent: ElementTree Element
56 :param markup: Name of the markup
60 elt = ET.SubElement(parent, markup)
61 elt.set("id", "\'omf-payload\'")
64 def _attr_element(self, parent, markup, text):
65 """ Insert a markup element with a text (value)
67 :param parent: Parent element in an XML point of view
68 :type parent: ElementTree Element
69 :param markup: Name of the markup
71 :param text: Value of the markup element
75 elt = ET.SubElement(parent, markup)
79 def execute_function(self, target, appid, cmdlineargs, path, env):
80 """ Build an Execute Message
82 :param target: Hrn of the target node (ex : omf.plexus.wlab17)
84 :param appid: Application id
86 :param cmdlineargs: Arguments of the application
87 :type cmdlineargs: str
88 :param path: Path of the application
90 :param env: Environment variables
94 payload = ET.Element("omf-message")
95 execute = self._id_element(payload,"EXECUTE")
96 env = self._attr_element(execute, "ENV", env)
97 sliceid = self._attr_element(execute,"SLICEID",self._slice_id)
98 expid = self._attr_element(execute,"EXPID",self._exp_id)
99 target = self._attr_element(execute,"TARGET",target)
100 appid = self._attr_element(execute,"APPID",appid)
101 cmdlineargs = self._attr_element(execute,"CMDLINEARGS",cmdlineargs)
102 path = self._attr_element(execute,"PATH",path)
105 def stdin_function(self, target, value, appid):
106 """ Build an Execute Message
108 :param value: parameter that go in the stdin
110 :param target: Hrn of the target node (ex : omf.plexus.wlab17)
112 :param appid: Application id
116 payload = ET.Element("omf-message")
117 stdin = self._id_element(payload,"STDIN")
118 value = self._attr_element(stdin,"VALUE",value)
119 sliceid = self._attr_element(stdin,"SLICEID",self._slice_id)
120 expid = self._attr_element(stdin,"EXPID",self._exp_id)
121 target = self._attr_element(stdin,"TARGET",target)
122 appid = self._attr_element(stdin,"APPID",appid)
125 def exit_function(self, target, appid):
126 """ Build an Exit Message
128 :param target: Hrn of the target node (ex : omf.plexus.wlab17)
130 :param appid: Application id (ex : vlc#1)
134 payload = ET.Element("omf-message")
135 execute = self._id_element(payload,"EXIT")
136 sliceid = self._attr_element(execute,"SLICEID",self._slice_id)
137 expid = self._attr_element(execute,"EXPID",self._exp_id)
138 target = self._attr_element(execute,"TARGET",target)
139 appid = self._attr_element(execute,"APPID",appid)
142 def configure_function(self, target, value, path):
143 """ Build a Configure Message
145 :param target: Hrn of the target node (ex : omf.plexus.wlab17)
147 :param value: guid of the RM
149 :param path: Path of the element to configure (ex : net/w0/channel)
153 payload = ET.Element("omf-message")
154 config = self._id_element(payload, "CONFIGURE")
155 sliceid = self._attr_element(config,"SLICEID",self._slice_id)
156 expid = self._attr_element(config,"EXPID",self._exp_id)
157 target = self._attr_element(config,"TARGET",target)
158 value = self._attr_element(config,"VALUE",value)
159 path = self._attr_element(config,"PATH",path)
162 def log_function(self,level, logger, level_name, data):
163 """ Build a Log Message
165 :param level: Level of logging
167 :param logger: Element publishing the log
169 :param level_name: Name of the level (ex : INFO)
170 :type level_name: str
171 :param data: Content to publish
175 payload = ET.Element("omf-message")
176 log = self._id_element(payload, "LOGGING")
177 level = self._attr_element(log,"LEVEL",level)
178 sliceid = self._attr_element(log,"SLICEID",self._slice_id)
179 logger = self._attr_element(log,"LOGGER",logger)
180 expid = self._attr_element(log,"EXPID",self._exp_id)
181 level_name = self._attr_element(log,"LEVEL_NAME",level_name)
182 data = self._attr_element(log,"DATA",data)
185 def alias_function(self, name, target):
186 """ Build an Alias Message
188 :param name: Name of the new alias
190 :param target: Hrn of the target node (ex : omf.plexus.wlab17)
194 payload = ET.Element("omf-message")
195 alias = self._id_element(payload,"ALIAS")
196 sliceid = self._attr_element(alias,"SLICEID",self._slice_id)
197 expid = self._attr_element(alias,"EXPID",self._exp_id)
198 name = self._attr_element(alias,"NAME",name)
199 target = self._attr_element(alias,"TARGET",target)
202 def enroll_function(self, enrollkey, image, index, target ):
203 """ Build an Enroll Message
205 :param enrollkey: Type of enrollment (= 1)
207 :param image: Image (= * when all the nodes are concerned)
209 :param index: Index (= 1 in general)
211 :param target: Hrn of the target node (ex : omf.plexus.wlab17)
215 payload = ET.Element("omf-message")
216 enroll = self._id_element(payload,"ENROLL")
217 enrollkey = self._attr_element(enroll,"ENROLLKEY",enrollkey)
218 sliceid = self._attr_element(enroll,"SLICEID",self._slice_id)
219 image = self._attr_element(enroll,"IMAGE",image)
220 expid = self._attr_element(enroll,"EXPID",self._exp_id)
221 index = self._attr_element(enroll,"INDEX",index)
222 target = self._attr_element(enroll,"TARGET",target)
225 def noop_function(self,target):
226 """ Build a Noop Message
228 :param target: Hrn of the target node (ex : omf.plexus.wlab17)
232 payload = ET.Element("omf-message")
233 noop = self._id_element(payload,"NOOP")
234 sliceid = self._attr_element(noop,"SLICEID",self._slice_id)
235 expid = self._attr_element(noop,"EXPID",self._exp_id)
236 target = self._attr_element(noop,"TARGET",target)
239 def newexp_function(self, experimentid, address):
240 """ Build a NewExp Message
242 :param experimentid: Id of the new experiment
243 :type experimentid: str
244 :param address: Adress of the destination set of nodes
248 payload = ET.Element("omf-message")
249 newexp = self._id_element(payload,"EXPERIMENT_NEW")
250 experimentid = self._attr_element(newexp,"EXPERIMENT_ID",experimentid)
251 sliceid = self._attr_element(newexp,"SLICEID",self._slice_id)
252 expid = self._attr_element(newexp,"EXPID",self._exp_id)
253 address = self._attr_element(newexp,"ADDRESS",address)