def test_event_repo(self): if bootstrap.CFG.system.mockdb: raise SkipTest("only works with CouchDB views") dsm = DatastoreManager() event_repo = EventRepository(dsm) event_repo1 = EventRepository(dsm) event1 = Event(origin="resource1") event_id, _ = event_repo.put_event(event1) event1r = event_repo.get_event(event_id) self.assertEquals(event1.origin, event1r.origin) ts = 1328680477138 events2 = [] for i in xrange(5): ev = Event(origin="resource2", ts_created=str(ts + i)) event_id, _ = event_repo.put_event(ev) events2.append((ev,event_id)) events_r = event_repo.find_events(origin='resource2') self.assertEquals(len(events_r), 5) events_r = event_repo.find_events(origin='resource2', reverse_order=True) self.assertEquals(len(events_r), 5) events_r = event_repo.find_events(origin='resource2', max_results=3) self.assertEquals(len(events_r), 3) events_r = event_repo.find_events(origin='resource2', start_ts=str(ts+3)) self.assertEquals(len(events_r), 2) events_r = event_repo.find_events(origin='resource2', end_ts=str(ts+2)) self.assertEquals(len(events_r), 3) events_r = event_repo.find_events(origin='resource2', start_ts=str(ts+3), end_ts=str(ts+4)) self.assertEquals(len(events_r), 2) events_r = event_repo.find_events(start_ts=str(ts+3), end_ts=str(ts+4)) self.assertEquals(len(events_r), 2) event3 = ResourceLifecycleEvent(origin="resource3") event_id, _ = event_repo.put_event(event3) events_r = event_repo.find_events(event_type="ResourceLifecycleEvent") self.assertEquals(len(events_r), 1)
def test_event_repo(self): dsm = DatastoreManager() event_repo = EventRepository(dsm) event_repo1 = EventRepository(dsm) event1 = Event(origin="resource1") event_id, _ = event_repo.put_event(event1) event1r = event_repo.get_event(event_id) self.assertEquals(event1.origin, event1r.origin) ts = 1328680477138 events2 = [] for i in xrange(5): ev = Event(origin="resource2", ts_created=str(ts + i)) event_id, _ = event_repo.put_event(ev) events2.append((ev, event_id)) events_r = event_repo.find_events(origin='resource2') self.assertEquals(len(events_r), 5) events_r = event_repo.find_events(origin='resource2', descending=True) self.assertEquals(len(events_r), 5) events_r = event_repo.find_events(origin='resource2', limit=3) self.assertEquals(len(events_r), 3) events_r = event_repo.find_events(origin='resource2', start_ts=str(ts + 3)) self.assertEquals(len(events_r), 2) events_r = event_repo.find_events(origin='resource2', end_ts=str(ts + 2)) self.assertEquals(len(events_r), 3) events_r = event_repo.find_events(origin='resource2', start_ts=str(ts + 3), end_ts=str(ts + 4)) self.assertEquals(len(events_r), 2) events_r = event_repo.find_events(start_ts=str(ts + 3), end_ts=str(ts + 4)) self.assertEquals(len(events_r), 2) event3 = ResourceLifecycleEvent(origin="resource3") event_id, _ = event_repo.put_event(event3) events_r = event_repo.find_events(event_type="ResourceLifecycleEvent") self.assertEquals(len(events_r), 1)
def start(self): log.debug("Container starting...") if self._is_started: raise ContainerError("Container already started") # Check if this UNIX process already runs a Container. self.pidfile = "cc-pid-%d" % os.getpid() if os.path.exists(self.pidfile): raise ContainerError("Container.on_start(): Container is a singleton per UNIX process. Existing pid file found: %s" % self.pidfile) # write out a PID file containing our agent messaging name with open(self.pidfile, 'w') as f: pid_contents = {'messaging': dict(CFG.server.amqp), 'container-agent': self.name, 'container-xp': bootstrap.get_sys_name() } f.write(msgpack.dumps(pid_contents)) atexit.register(self._cleanup_pid) self._capabilities.append("PID_FILE") # set up abnormal termination handler for this container def handl(signum, frame): try: self._cleanup_pid() # cleanup the pidfile first self.quit() # now try to quit - will not error on second cleanup pidfile call finally: signal.signal(signal.SIGTERM, self._normal_signal) os.kill(os.getpid(), signal.SIGTERM) self._normal_signal = signal.signal(signal.SIGTERM, handl) self.datastore_manager.start() self._capabilities.append("DATASTORE_MANAGER") # Self-register with Directory self.directory.register("/Containers", self.id, cc_agent=self.name) self.directory.register("/Containers/%s" % self.id, "Processes") self._capabilities.append("DIRECTORY") # Event repository self.event_repository = EventRepository() self.event_pub = EventPublisher() self._capabilities.append("EVENT_REPOSITORY") # Local resource registry self.resource_registry = ResourceRegistry() self._capabilities.append("RESOURCE_REGISTRY") # Persistent objects self.datastore_manager.get_datastore("objects", DataStore.DS_PROFILE.OBJECTS) # State repository self.state_repository = StateRepository() self._capabilities.append("STATE_REPOSITORY") # Start ExchangeManager, which starts the node (broker connection) self.ex_manager.start() self._capabilities.append("EXCHANGE_MANAGER") self.proc_manager.start() self._capabilities.append("PROC_MANAGER") self.app_manager.start() self._capabilities.append("APP_MANAGER") self.governance_controller.start() self._capabilities.append("GOVERNANCE_CONTROLLER") if CFG.container.get('sflow', {}).get('enabled', False): self.sflow_manager.start() self._capabilities.append("SFLOW_MANAGER") # Start the CC-Agent API rsvc = ProcessRPCServer(node=self.node, from_name=self.name, service=self, process=self) # Start an ION process with the right kind of endpoint factory proc = self.proc_manager.proc_sup.spawn(name=self.name, listeners=[rsvc], service=self) self.proc_manager.proc_sup.ensure_ready(proc) self._capabilities.append("CONTAINER_AGENT") self.event_pub.publish_event(event_type="ContainerLifecycleEvent", origin=self.id, origin_type="CapabilityContainer", sub_type="START", state=ContainerStateEnum.START) self._is_started = True self._status = "RUNNING" log.info("Container started, OK.")
def test_event_repo(self): dsm = DatastoreManager() event_repo = EventRepository(dsm) event_repo1 = EventRepository(dsm) event1 = Event(origin="resource1") event_id, _ = event_repo.put_event(event1) event1r = event_repo.get_event(event_id) self.assertEquals(event1.origin, event1r.origin) ts = 1328680477138 events2 = [] for i in xrange(5): ev = Event(origin="resource2", ts_created=str(ts + i)) event_id, _ = event_repo.put_event(ev) events2.append((ev,event_id)) events_r = event_repo.find_events(origin='resource2') self.assertEquals(len(events_r), 5) events_r = event_repo.find_events(origin='resource2', descending=True) self.assertEquals(len(events_r), 5) events_r = event_repo.find_events(origin='resource2', limit=3) self.assertEquals(len(events_r), 3) events_r = event_repo.find_events(origin='resource2', start_ts=str(ts+3)) self.assertEquals(len(events_r), 2) events_r = event_repo.find_events(origin='resource2', end_ts=str(ts+2)) self.assertEquals(len(events_r), 3) events_r = event_repo.find_events(origin='resource2', start_ts=str(ts+3), end_ts=str(ts+4)) self.assertEquals(len(events_r), 2) events_r = event_repo.find_events(start_ts=str(ts+3), end_ts=str(ts+4)) self.assertEquals(len(events_r), 2) event3 = ResourceLifecycleEvent(origin="resource3") event_id, _ = event_repo.put_event(event3) events_r = event_repo.find_events(event_type="ResourceLifecycleEvent") self.assertEquals(len(events_r), 1)