1
0
mirror of https://github.com/gryf/ferrit.git synced 2026-02-07 08:45:53 +01:00

Added more event to be supported from REST server.

Also, now we closing channel in case of "gerrit stream-events" command,
since it is a command like any other - there is no special case for
keeping it open.
This commit is contained in:
2019-10-31 19:05:58 +01:00
parent 4a93576e92
commit ff40d285de
2 changed files with 105 additions and 36 deletions

View File

@@ -14,44 +14,105 @@ LOG_PATH = './'
LOG = logging.getLogger('bottle')
LOG.setLevel(logging.DEBUG)
handler = logging.FileHandler(os.path.join(LOG_PATH, 'ferrit-http.log'))
handler.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
handler.setFormatter(logging.Formatter('%(message)s'))
LOG.addHandler(handler)
JDOE = {"email": "j.doe@nonexistent.com",
"name": "John Doe",
"username": "jdoe"}
PATCHSET_CREATED = {"change": {"branch": "master",
"commitMessage": "commit msg",
"id": "I1",
"number": "691277",
"owner": {"email": "j.doe@nonexistent.com",
"name": "John Doe",
"username": "jdoe"},
"number": "1",
"owner": JDOE,
"project": "foo",
"status": "NEW",
"subject": "create new patch",
"url": "http://localhost:8181/1"},
"changeKey": {"id": "I1"},
"eventCreatedOn": int(time.time()),
"patchSet": {"author": {"email": "j.doe@nonexistent.com",
"name": "John Doe",
"username": "jdoe"},
"patchSet": {"author": JDOE,
"createdOn": int(time.time()) - 1000,
"isDraft": False,
"kind": "REWORK",
"number": "1",
"parents": ["559721d9"],
"ref": "refs/changes/77/691277/1",
"parents": ["2"],
"ref": "refs/changes/77/1/1",
"revision": "e3c8ac50",
"sizeDeletions": -15,
"sizeInsertions": 29,
"uploader": {"email": "j.doe@nonexistent.com",
"name": "John Doe",
"username": "jdoe"}},
"uploader": JDOE},
"project": "foo",
"refName": "refs/heads/master",
"type": "patchset-created",
"uploader": {"email": "j.doe@nonexistent.com",
"name": "John Doe",
"username": "jdoe"}}
"uploader": JDOE}
RECHECK = {"approvals": [{"description": "Verified",
"type": "Verified",
"value": "0"},
{"description": "Code-Review",
"type": "Code-Review",
"value": "0"},
{"description": "Workflow",
"type": "Workflow",
"value": "0"}],
"author": JDOE,
"change": {"branch": "master",
"commitMessage": "commit msg",
"id": "I1",
"number": "690077",
"owner": JDOE,
"project": "foo",
"status": "NEW",
"subject": "create new patch",
"topic": "test",
"url": "http://localhost:8181/1"},
"changeKey": {"id": "I1"},
"comment": "Patch Set 1:\n\nrecheck",
"eventCreatedOn": int(time.time()),
"patchSet": {"author": JDOE,
"createdOn": int(time.time()) - 1000,
"isDraft": False,
"kind": "NO_CODE_CHANGE",
"number": "1",
"parents": ["2"],
"ref": "refs/changes/77/1/1",
"revision": "e3c8ac50",
"sizeDeletions": -15,
"sizeInsertions": 29,
"uploader": JDOE},
"project": "foo",
"refName": "refs/heads/master",
"type": "comment-added"}
MERGED = {"change": {"branch": "master",
"commitMessage": "commit msg",
"id": "I1",
"number": "1",
"owner": JDOE,
"project": "foo",
"status": "MERGED",
"subject": "create new patch",
"topic": "test",
"url": "http://localhost:8181/3"},
"changeKey": {"id": "I1"},
"eventCreatedOn": int(time.time()),
"newRev": "0ce5beac",
"patchSet": {
"author": JDOE,
"createdOn": int(time.time()) - 1000,
"isDraft": False,
"kind": "REWORK",
"number": "3",
"parents": ["1"],
"ref": "refs/changes/77/1/1",
"revision": "e3c8ac50",
"sizeDeletions": -8,
"sizeInsertions": 83,
"uploader": JDOE},
"project": "foo",
"refName": "refs/heads/master",
"submitter": {"name": "CI",
"username": "ci"},
"type": "change-merged"}
class App(bottle.Bottle):
@@ -66,19 +127,24 @@ class App(bottle.Bottle):
self.post('/make/event', callback=self._mk_event)
def _mk_event(self):
if bottle.request.forms.get('type') == 'patchset-created':
data = dict(PATCHSET_CREATED)
events = {PATCHSET_CREATED['type']: PATCHSET_CREATED,
RECHECK['type']: RECHECK,
MERGED['type']: MERGED}
if 'project' in bottle.request.forms:
data['change']['project'] = bottle.request.forms['project']
data['project'] = bottle.request.forms['project']
if bottle.request.forms.get('type') not in events.keys():
return
if 'branch' in bottle.request.forms:
data['change']['branch'] = bottle.request.forms['branch']
data = dict(events[bottle.request.forms.get('type')])
if 'project' in bottle.request.forms:
data['change']['project'] = bottle.request.forms['project']
data['project'] = bottle.request.forms['project']
with open(FIFO, 'w') as fobj:
fobj.write(json.dumps(data))
fobj.write('\n')
if 'branch' in bottle.request.forms:
data['change']['branch'] = bottle.request.forms['branch']
with open(FIFO, 'w') as fobj:
fobj.write(json.dumps(data))
fobj.write('\n')
def _documentation(self, whatever, params=None):
return
@@ -122,7 +188,6 @@ class App(bottle.Bottle):
return
LOG.info(json.dumps(bottle.request.json))
LOG.info('Verified: %s', labels.get('Verified'))
def main():
@@ -132,7 +197,7 @@ def main():
if __name__ == "__main__":
# development version, meant to be run as stand alone module, like
# python -m ferrit.http
# python -m ferrit.rest
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter('%(asctime)s %(message)s'))
LOG.addHandler(handler)

View File

@@ -116,6 +116,7 @@ class SSHHandler(socketserver.StreamRequestHandler):
LOG.debug("Writing %s to channel", data)
channel.send(data)
data = None
channel.close()
def _version(self, channel):
LOG.debug('sending version string')
@@ -181,13 +182,6 @@ def main():
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-k', '--key', default=KEY,
help='Path to the private server key')
args = parser.parse_args()
KEY = args.key
os.mkfifo(FIFO)
handler = logging.StreamHandler(sys.stdout)
handler.setFormatter(logging.Formatter('%(asctime)s [%(levelname)s] '
'%(funcName)s:%(lineno)s - '
@@ -196,7 +190,17 @@ if __name__ == "__main__":
LOG.setLevel(logging.DEBUG)
LOG.addHandler(handler)
LOG.debug('Start up development server')
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('-k', '--key', default=KEY,
help='Path to the private server key')
args = parser.parse_args()
KEY = args.key
LOG.debug('Creating FIFO: %s', FIFO)
os.mkfifo(FIFO)
try:
main()
finally:
LOG.debug('Removing FIFO: %s', FIFO)
os.unlink(FIFO)