def __init__(self, go_server, pipeline_name, label1, label2): '''Currently we are able to parse git and pipeline materials.''' self.go_server = go_server self.materials = [] logger.debug("handling comparison") path = '/compare/' + pipeline_name + '/' + label1 + '/with/' + label2 retrieved = url.URL(self.go_server, path) self.set_materials(retrieved)
def __init__(self, go_server, pipeline_name, label, purge_deleted=True): self.go_server = go_server self.pipeline_name = pipeline_name self.label = label logger.debug("handling value stream") self.graph = nx.DiGraph(pipeline=self.pipeline_name, label=self.label) path = '/pipelines/value_stream_map/'+pipeline_name+'/'+label+'.json' retrieved = url.URL( self.go_server, path) data = json.loads(retrieved.contents[0]) # populate nodes for level_index, level_info in enumerate(data['levels']): for node in level_info['nodes']: id = node['id'] self.graph.add_node(node['id']) self.graph.node[node['id']] = node self.graph.node[node['id']]['level'] = level_index logger.debug('graph nodes are %s',self.graph.nodes()) # populate edges for level in data['levels']: for node in level['nodes']: my_id = node['id'] for parent_id in node['parents']: self.graph.add_edge(parent_id, my_id, relationship='parent_of', parent_of=True) # node['dependents'] contains same connection in reverse # to keep things simple, we will only set a parent relationship logger.debug('graph edges %s',self.graph.edges(data='relationship')) # purge deleted nodes, if requested self.purged_nodes = [] if purge_deleted: for level in data['levels']: for node in level['nodes']: id = node['id'] if node.has_key('view_type') and node['view_type'] == 'DELETED': self.purged_nodes.append(id) self.graph.remove_node(id) logger.debug('purged nodes %s',self.purged_nodes) # TODO: purge "DUMMY" nodes that are used for graphical VSM representation # create a sub-graph with only the pipelines self.pipeline_graph = self.filter_by_type('PIPELINE')
def __init__(self, go_server): self.go_server = go_server path = '/api/dashboard/' retrieved = url.URL( self.go_server, path, headers={'Accept': 'application/vnd.go.cd.v1+json'}) data = json.loads(''.join(retrieved.contents)) self.pipelines = {} for group in data['_embedded']['pipeline_groups']: for pipeline in group['_embedded']['pipelines']: name = pipeline['name'] logger.debug('adding dashboard pipeline %s', name) assert name not in self.pipelines self.pipelines[name] = pipeline
def __init__(self, go_server, pipeline_name): '''Convert a string of status json into python. From this, gather various metrics. An example status API url: http://gocd.your.org:8080/go/api/pipelines/your-pipeline/status''' self.go_server = go_server self.logger = logging.getLogger(__name__ + '.Status') self.logger.debug("handling status") my_url = '/api/pipelines/' + pipeline_name + \ '/status/' retrieved = url.URL(self.go_server, my_url) data = json.loads(retrieved.contents[0]) self.locked = bool(data['locked']) self.paused = bool(data['paused']) self.schedulable = bool(data['schedulable']) self.logger.debug('%s status: paused %s, schedulable %s' % (pipeline_name, self.paused, self.schedulable))
def __init__(self, go_server, pipeline_name, offset): '''Convert a string of history json into python. From this, gather various metrics. An example history API url: http://gocd.your.org:8080/go/api/pipelines/your-pipeline/history''' self.go_server = go_server self.pipeline_name = pipeline_name self.offset = offset my_url = '/api/pipelines/' + self.pipeline_name + \ '/history/' + offset retrieved = url.URL(self.go_server, my_url) self.logger = logging.getLogger(__name__ + '.HistoryPage') self.logger.debug("handling history") data = json.loads(retrieved.contents[0]) self.pagination = data['pagination'] self.pipelines = data['pipelines'] self.first = self.pipelines[0] self.logger.debug('%s first pipeline: %s' % (self.first['name'], pprint.pformat(self.first)))
def __init__(self, go_server): '''Convert a string of cctray xml into python. From this, gather various metrics. An example cctray url: http://gocd.your.org:8080/go/cctray.xml''' logger.debug("handling cctray.xml") retrieved = url.URL(go_server, '/cctray.xml') doc = xmltodict.parse("\n".join(retrieved.contents)) self.projects = doc['Projects']['Project'] self.pipelines = {} logger.info( 'cctray metrics are inaccurate and will be deprecated soon!') self.metrics = {} self.metrics['stages'] = 0 self.metrics['status_totals'] = {} self.metrics['total_age'] = 0 self.metrics['builds'] = 0 self.parse() self.metrics['pipelines'] = len(self.pipelines)