本文整理汇总了Python中pyon.event.event.EventPublisher._publish_event方法的典型用法代码示例。如果您正苦于以下问题:Python EventPublisher._publish_event方法的具体用法?Python EventPublisher._publish_event怎么用?Python EventPublisher._publish_event使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类pyon.event.event.EventPublisher
的用法示例。
在下文中一共展示了EventPublisher._publish_event方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: UserNotificationService
# 需要导入模块: from pyon.event.event import EventPublisher [as 别名]
# 或者: from pyon.event.event.EventPublisher import _publish_event [as 别名]
#.........这里部分代码省略.........
events = []
for event_id in ret_vals:
datastore = self.datastore_manager.get_datastore('events')
event_obj = datastore.read(event_id)
events.append(event_obj)
log.debug("(find_events) UNS found the following relevant events: %s" % events)
if limit > -1:
list = []
for i in xrange(limit):
list.append(events[i])
return list
#todo implement time ordering: ascending or descending
return events
def publish_event(self, event=None, scheduler_entry= None):
'''
Publish a general event at a certain time using the UNS
@param event Event
@param scheduler_entry SchedulerEntry This object is created through Scheduler Service
'''
log.debug("UNS to publish on schedule the event: %s" % event)
#--------------------------------------------------------------------------------
# Set up a subscriber to get the nod from the scheduler to publish the event
#--------------------------------------------------------------------------------
def publish(message, headers):
self.event_publisher._publish_event( event_msg = event,
origin=event.origin,
event_type = event.type_)
log.info("UNS published an event in response to a nod from the Scheduler Service.")
event_subscriber = EventSubscriber( event_type = "ResourceEvent", callback=publish)
event_subscriber.start()
# Use the scheduler to set up a timer
self.scheduler_service.create_timer(scheduler_entry)
def create_worker(self, number_of_workers=1):
'''
Creates notification workers
@param number_of_workers int
@ret_val pids list
'''
pids = []
for n in xrange(number_of_workers):
process_definition = ProcessDefinition( name='notification_worker_%s' % n)
process_definition.executable = {
'module': 'ion.processes.data.transforms.notification_worker',
'class':'NotificationWorker'
}
process_definition_id = self.process_dispatcher.create_process_definition(process_definition=process_definition)
# ------------------------------------------------------------------------------------
示例2: UserNotificationService
# 需要导入模块: from pyon.event.event import EventPublisher [as 别名]
# 或者: from pyon.event.event.EventPublisher import _publish_event [as 别名]
#.........这里部分代码省略.........
search_type = 'search "type_" is "*" from "events_index"'
search_string = search_time + ' and ' + search_origin + ' and ' + search_type
# get the list of ids corresponding to the events
ret_vals = self.discovery.parse(search_string)
log.debug("(find_events_extended) Discovery search returned the following event ids: %s" % ret_vals)
events = []
for event_id in ret_vals:
datastore = self.container.datastore_manager.get_datastore('events')
event_obj = datastore.read(event_id)
events.append(event_obj)
log.debug("(find_events_extended) UNS found the following relevant events: %s" % events)
if limit > -1:
list = []
for i in xrange(limit):
list.append(events[i])
return list
#todo implement time ordering: ascending or descending
return events
def publish_event(self, event=None):
"""
Publish a general event at a certain time using the UNS
@param event Event
"""
self.event_publisher._publish_event( event_msg = event,
origin=event.origin,
event_type = event.type_)
log.info("The publish_event() method of UNS was used to publish an event.")
def get_recent_events(self, resource_id='', limit = 100):
"""
Get recent events
@param resource_id str
@param limit int
@retval events list of Event objects
"""
now = self.makeEpochTime(datetime.utcnow())
events = self.find_events(origin=resource_id,limit=limit, max_datetime=now, descending=True)
ret = IonObject(OT.ComputedListValue)
if events:
ret.value = events
ret.status = ComputedValueAvailability.PROVIDED
else:
ret.status = ComputedValueAvailability.NOTAVAILABLE
return ret
def get_user_notifications(self, user_id=''):
"""
Get the notification request objects that are subscribed to by the user
@param user_id str
示例3: ResourceAgent
# 需要导入模块: from pyon.event.event import EventPublisher [as 别名]
# 或者: from pyon.event.event.EventPublisher import _publish_event [as 别名]
class ResourceAgent(BaseResourceAgent):
"""
A resource agent is an ION process of type "agent" that exposes the standard
resource agent service interface.
"""
process_type = "agent"
# Override in subclass to publish specific types of events
COMMAND_EVENT_TYPE = "ResourceCommandEvent"
# Override in subclass to set specific origin type
ORIGIN_TYPE = "Resource"
def __init__(self, *args, **kwargs):
super(ResourceAgent, self).__init__(*args, **kwargs)
# The ID of the AgentInstance subtype resource object
self.agent_id = None
# The ID of the AgentDefinition subtype resource object
self.agent_def_id = None
# The ID of the target resource object, e.g. a device id
self.resource_id = None
def _on_init(self):
log.debug("Resource Agent initializing. name=%s, resource_id=%s" % (self._proc_name, self.resource_id))
self._event_publisher = EventPublisher()
def _on_quit(self):
pass
def negotiate(self, resource_id="", sap_in=None):
pass
def execute(self, resource_id="", command=None):
return self._execute("rcmd_", command)
def execute_agent(self, resource_id="", command=None):
return self._execute("acmd_", command)
def _execute(self, cprefix, command):
if not command:
raise iex.BadRequest("execute argument 'command' not present")
if not command.command:
raise iex.BadRequest("command not set")
cmd_res = IonObject("AgentCommandResult", command_id=command.command_id, command=command.command)
cmd_func = getattr(self, cprefix + str(command.command), None)
if cmd_func:
cmd_res.ts_execute = get_ion_ts()
try:
res = cmd_func(*command.args, **command.kwargs)
cmd_res.status = 0
cmd_res.result = res
except iex.IonException as ex:
# TODO: Distinguish application vs. uncaught exception
cmd_res.status = getattr(ex, 'status_code', -1)
cmd_res.result = str(ex)
log.warn("Agent command %s failed with trace=%s" % (command.command, traceback.format_exc()))
else:
log.info("Agent command not supported: %s" % (command.command))
ex = iex.NotFound("Command not supported: %s" % command.command)
cmd_res.status = iex.NotFound.status_code
cmd_res.result = str(ex)
sub_type = "%s.%s" % (command.command, cmd_res.status)
post_event = self._event_publisher._create_event(event_type=self.COMMAND_EVENT_TYPE,
origin=self.resource_id, origin_type=self.ORIGIN_TYPE,
sub_type=sub_type, command=command, result=cmd_res)
post_event = self._post_execute_event_hook(post_event)
success = self._event_publisher._publish_event(post_event, origin=post_event.origin)
return cmd_res
def _post_execute_event_hook(self, event):
"""
Hook to add additional values to the event object to be published
@param event A filled out even object of type COMMAND_EVENT_TYPE
@retval an event object
"""
return event
def get_capabilities(self, resource_id="", capability_types=[]):
capability_types = capability_types or ["CONV_TYPE", "AGT_CMD", "AGT_PAR", "RES_CMD", "RES_PAR"]
cap_list = []
if "CONV_TYPE" in capability_types:
cap_list.extend([("CONV_TYPE", cap) for cap in self._get_agent_conv_types()])
if "AGT_CMD" in capability_types:
cap_list.extend([("AGT_CMD", cap) for cap in self._get_agent_commands()])
if "AGT_PAR" in capability_types:
cap_list.extend([("AGT_PAR", cap) for cap in self._get_agent_params()])
if "RES_CMD" in capability_types:
cap_list.extend([("RES_CMD", cap) for cap in self._get_resource_commands()])
if "RES_PAR" in capability_types:
cap_list.extend([("RES_PAR", cap) for cap in self._get_resource_params()])
return cap_list
def set_param(self, resource_id="", name='', value=''):
if not hasattr(self, "rpar_%s" % name):
raise iex.NotFound('Resource parameter not existing: %s' % name)
pvalue = getattr(self, "rpar_%s" % name)
#.........这里部分代码省略.........