Example #1
0
 def __init__(self, host):
     self._factory = GerritEventFactory()
     self._events = Queue()
     self._stream = None
     self._ssh_client = GerritSSHClient(host)
Example #2
0
class GerritClient(object):

    """ Gerrit client interface. """

    def __init__(self, host):
        self._factory = GerritEventFactory()
        self._events = Queue()
        self._stream = None
        self._ssh_client = GerritSSHClient(host)

    def gerrit_version(self):
        """ Get the version of Gerrit that is connected to. """
        return self._ssh_client.get_remote_version()

    def query(self, term):
        """ Run `gerrit query` with the given term.

        Return a list of results as `Change` objects.

        """
        results = []
        command = ["query", "--current-patch-set", "--all-approvals", "--format JSON", "--commit-message"]
        if isinstance(term, list):
            command += [escape_string(" ".join(term))]
        else:
            command += [escape_string(term)]
        result = self._ssh_client.run_gerrit_command(command)
        decoder = JSONDecoder()
        for line in result.stdout.read().splitlines():
            # Gerrit's response to the query command contains one or more
            # lines of JSON-encoded strings.  The last one is a status
            # dictionary containing the key "type" whose value indicates
            # whether or not the operation was successful.
            # According to http://goo.gl/h13HD it should be safe to use the
            # presence of the "type" key to determine whether the dictionary
            # represents a change or if it's the query status indicator.
            try:
                data = decoder.decode(line)
            except ValueError as err:
                raise GerritError("Query returned invalid data: %s", err)
            if "type" in data and data["type"] == "error":
                raise GerritError("Query error: %s" % data["message"])
            elif "project" in data:
                results.append(Change(data))
        return results

    def start_event_stream(self):
        """ Start streaming events from `gerrit stream-events`. """
        if not self._stream:
            self._stream = GerritStream(self, ssh_client=self._ssh_client)
            self._stream.start()

    def stop_event_stream(self):
        """ Stop streaming events from `gerrit stream-events`."""
        if self._stream:
            self._stream.stop()
            self._stream.join()
            self._stream = None
            with self._events.mutex:
                self._events.queue.clear()

    def get_event(self, block=True, timeout=None):
        """ Get the next event from the queue.

        Return a `GerritEvent` instance, or None if:
         - `block` is False and there is no event available in the queue, or
         - `block` is True and no event is available within the time
        specified by `timeout`.

        """
        try:
            return self._events.get(block, timeout)
        except Empty:
            return None

    def put_event(self, json_data):
        """ Create event from `json_data` and add it to the queue.

        Raise GerritError if the queue is full, or the factory could not
        create the event.

        """
        try:
            event = self._factory.create(json_data)
            self._events.put(event)
        except Full:
            raise GerritError("Unable to add event: queue is full")
Example #3
0
    help='Show day with maximum number of patch sets overall projects')
parser.add_argument('--per-project',
                    action="store_true",
                    dest='per_project',
                    default=False,
                    help='Show statistics per each project')

args = parser.parse_args()

start = [int(i) for i in args.start.split('-')]
end = [int(i) for i in args.end.split('-')]

d_start = date(start[0], start[1], start[2])
d_end = date(end[0], end[1], end[2])

client = GerritSSHClient("review")

openstack_projects = [
    'nova', 'cinder', 'glance', 'keystone', 'horizon', 'neutron', 'designate',
    'heat', 'ironic', 'barbican', 'aodh', 'ceilometer', 'gnocchi', 'panko',
    'manila', 'salt', 'linux', 'reclass', 'galera', 'memcached', 'rabbitmq',
    'bind', 'apache', 'runtest', 'oslo-templates', 'auditd', 'octavia',
    'openscap'
]
openstack_salt_formulas = [
    'salt-formulas/{}'.format(i) for i in openstack_projects
]
pkg_projects = ['^packaging/specs/.*']
aio_model = ['salt-models/mcp-virtual-aio']
model_projects = ['mk/cookiecutter-templates', 'salt-models/reclass-system']
projects = openstack_salt_formulas + pkg_projects + model_projects + aio_model
Example #4
0

def applyProp(d, query, prop, arg, sep):
    p = safeGet(arg, d)
    if p is not None:
        tmp = sep.join(p)

    query += " {}:{} ".format(prop, tmp)
    return query


def applyOrProp(d, query, prop, arg):
    return applyProp(d, query, prop, arg, " OR ")


client = GerritSSHClient("gerrit.ovirt.org")


def run_gerrit_command(command):
    try:
        return client.run_gerrit_command(command)
    except Exception as e:
        print 'Error when running gerrit command:', e


def get_topic_changes(d):
    query = "query --format=JSON status:open --current-patch-set"
    query = applyOrProp(d, query, "owner", "owners")
    query = applyOrProp(d, query, "topic", "topics")
    query = applyOrProp(d, query, "project", "projects")
    log.info("Running query %s", query)
Example #5
0
                return d[key]
        return None

def applyProp(d, query, prop, arg, sep):
	p = safeGet(arg, d)
        if p is not None:
        	tmp = sep.join(p)

        query+=" {}:{} ".format(prop, tmp)
        return query

def applyOrProp(d, query, prop, arg):
	return applyProp(d, query, prop, arg, " OR ")


client = GerritSSHClient("gerrit.ovirt.org")

def run_gerrit_command(command):
        try:
                return client.run_gerrit_command(command)
        except Exception as e:
                print 'Error when running gerrit command:', e

def get_topic_changes(d):
	query = "query --format=JSON status:open --current-patch-set"
	query = applyOrProp(d, query, "owner", "owners")
	query = applyOrProp(d, query, "topic", "topics")
	query = applyOrProp(d, query, "project", "projects")
	log.info("Running query %s", query)
	query_result = run_gerrit_command(query)
	result = query_result.stdout.readlines()