def wiki_page_changed(self, page, version, t, comment, author, ipnr): log = EventLogIO() event = {} event['event'] = "wiki_edited" event['project'] = self.env_name event['username'] = author log.write_event(event)
def download_created(self, context, download): log = EventLogIO() event = {} event['event'] = "release_uploaded" event['project'] = self.env_name event['username'] = context.req.authname log.write_event(event)
def ticket_created(self, ticket): event_log = EventLogIO() event = {} event['event'] = "ticket_created" event['project'] = self.env_name event['username'] = ticket['reporter'] event_log.write_event(event)
def wiki_page_added(self, page): log = EventLogIO() event = {} event['event'] = "wiki_created" event['project'] = self.env_name event['username'] = page.author log.write_event(event)
class FilesAnalytics(Component): """ Class handling 'file_uploaded', 'file_copied', 'file_deleted', 'file_downloaded' """ implements(IFilesEventListener) def __init__(self): self.event_log = EventLogIO() def node_created(self, username, target_node): if target_node.is_file(): self._event_write('file_uploaded', username) if target_node.is_download(): self._event_write('release_uploaded', username) def node_moved(self, username, target_node, destination_node): if target_node.is_file(): self._event_write('file_moved', username) if target_node.is_download(): if destination_node.is_download(): self._event_write('release_moved', username) else: self._event_write('release_deleted', username) elif destination_node.is_download(): self._event_write('release_uploaded', username) def node_copied(self, username, target_node, destination_node): if target_node.is_file(): self._event_write('file_copied', username) if target_node.is_download(): if destination_node.is_download(): self._event_write('release_copied', username) # download -> file copies are file_copied events elif destination_node.is_download(): self._event_write('release_uploaded', username) def node_removed(self, username, target_node): if target_node.is_file(): self._event_write('file_deleted', username) if target_node.is_download(): self._event_write('release_deleted', username) def node_downloaded(self, username, target_node): if target_node.is_file(): self._event_write('file_downloaded', username) if target_node.is_download(): self._event_write('release_downloaded', username) def _event_write(self, event_name, username): event = { 'event': event_name, 'project': self.env.project_identifier, 'username': username, 'comment': '' } try: self.event_log.write_event(event) except: self.log.error("FilesAnalytics._event_write(): EventLogIO.write_event failed")
def topic_deleted(self, context, topic): log = EventLogIO() event = {} event['event'] = "topic_deleted" event['project'] = self.env_name event['username'] = context.req.authname event['forum_id'] = topic['forum'] log.write_event(event)
def message_deleted(self, context, message): log = EventLogIO() event = {} event['event'] = "message_deleted" event['project'] = self.env_name event['username'] = context.req.authname event['forum_id'] = message['forum'] log.write_event(event)
def ticket_changed(self, ticket, comment, author, old_values): if ticket['status'] == 'closed': event_log = EventLogIO() event = {} event['event'] = "ticket_closed" event['project'] = self.env_name event['username'] = ticket['author'] event_log.write_event(event)
def downloaded(self, context, download): """Called when a file is downloaded """ log = EventLogIO() event = {} event['event'] = "release_downloaded" event['project'] = self.env_name event['username'] = context.req.authname log.write_event(event)
def _log_event(self, project, eventname): """ Internal method for creating event in analytics log """ self.log.info('Received notification for %s: %s' % (project, eventname)) # Load username from project author information or fallback to anonymous user = project.author username = user.username if user else 'anonymous' log = EventLogIO() event = {'event':eventname, 'project':project.env_name, 'username':username} log.write_event(event)
def pre_process_request(self, req, handler): # If request is applicable (not in ignore list) # Write page_request in event log if self.is_applicable(req): event = {} event['event'] = 'page_request' event['project'] = self.env_name event['username'] = req.authname event['method'] = req.method event['path_info'] = req.path_info log = EventLogIO() log.write_event(event) return handler
class EventGenerator(object): """ Simple analytical event generator """ def __init__(self): self.log = EventLogIO() self.etl = EventLogETL() def generate(self, count, projects, users, events): event = dict() for i in xrange(count): eventtype = random.choice(events) if eventtype not in EVENT_DESCRIPTIONS.keys(): logging.warning('Event type "%s" is not known, skipping it' % eventtype) continue event['project'] = random.choice(projects) event['event'] = eventtype event['username'] = random.choice(users) self.log.write_event(event) print '.', print '' def process(self): # Update tables self.etl.run() # Run summaries from last two full hours dt_now = datetime.utcnow() dt_end = dt_now - timedelta(minutes=dt_now.minute, seconds=dt_now.second, microseconds=dt_now.microsecond) dt_start = dt_end - timedelta(hours=2) stl = SummaryETL(dt_start, dt_end) stl.run()
class EventGenerator(object): """ Simple analytical event generator """ def __init__(self): self.log = EventLogIO() self.etl = EventLogETL() def generate(self, count, projects, users, events): event = dict() for i in xrange(count): eventtype = random.choice(events) if eventtype not in EVENT_DESCRIPTIONS.keys(): logging.warning('Event type "%s" is not known, skipping it' % eventtype) continue event['project'] = random.choice(projects) event['event'] = eventtype event['username'] = random.choice(users) self.log.write_event(event) print '.', print '' def process(self): # Update tables self.etl.run() # Run summaries from last two full hours dt_now = datetime.utcnow() dt_end = dt_now - timedelta(minutes = dt_now.minute, seconds = dt_now.second, microseconds = dt_now.microsecond) dt_start = dt_end - timedelta(hours = 2) stl = SummaryETL(dt_start, dt_end) stl.run()
class FilesAnalytics(Component): """ Class handling 'file_uploaded', 'file_copied', 'file_deleted', 'file_downloaded' """ implements(IFilesEventListener) def __init__(self): self.event_log = EventLogIO() def node_created(self, username, target_node): if target_node.is_file(): self._event_write('file_uploaded', username) if target_node.is_download(): self._event_write('release_uploaded', username) def node_moved(self, username, target_node, destination_node): if target_node.is_file(): self._event_write('file_moved', username) if target_node.is_download(): if destination_node.is_download(): self._event_write('release_moved', username) else: self._event_write('release_deleted', username) elif destination_node.is_download(): self._event_write('release_uploaded', username) def node_copied(self, username, target_node, destination_node): if target_node.is_file(): self._event_write('file_copied', username) if target_node.is_download(): if destination_node.is_download(): self._event_write('release_copied', username) # download -> file copies are file_copied events elif destination_node.is_download(): self._event_write('release_uploaded', username) def node_removed(self, username, target_node): if target_node.is_file(): self._event_write('file_deleted', username) if target_node.is_download(): self._event_write('release_deleted', username) def node_downloaded(self, username, target_node): if target_node.is_file(): self._event_write('file_downloaded', username) if target_node.is_download(): self._event_write('release_downloaded', username) def _event_write(self, event_name, username): event = { 'event': event_name, 'project': self.env.project_identifier, 'username': username, 'comment': '' } try: self.event_log.write_event(event) except: self.log.error( "FilesAnalytics._event_write(): EventLogIO.write_event failed")
# Generic script for all source control management incoming hooks import sys from multiproject.core.analytics.event import EventLogIO from datetime import datetime event_log = EventLogIO() script, repo_path, author = sys.argv event_log.write_event({'username':author, 'project':repo_path.split("/")[-3], 'timestamp':datetime.utcnow(), 'event':'source_checkin' })