Пример #1
0
    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)
Пример #2
0
    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')
Пример #3
0
    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
Пример #4
0
    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))
Пример #5
0
    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)))
Пример #6
0
    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)