blob: b881476e70eacbb7eebb342d9f65e377038ff938 [file] [log] [blame]
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Create configuration for code search."""
import argparse
import json
import urllib.request
import sys
DEFAULT_GERRIT = "gerrit.onap.org"
API_PREFIX = "/r"
API_PROJECTS = "/projects/"
MAGIC_PREFIX = ")]}'"
CODE_LOCATION = "{path}{anchor}"
GITWEB_ANCHOR = "#l{line}"
GIT_ANCHOR = "#n{line}"
DEFAULT_POLL = 3600
def get_projects_list(gerrit):
"""Request list of all available projects from ONAP Gerrit."""
resp = urllib.request.urlopen("https://{}{}{}".format(gerrit, API_PREFIX, API_PROJECTS))
resp_body = resp.read()
no_magic = resp_body[len(MAGIC_PREFIX):]
decoded = no_magic.decode("utf-8")
projects = json.loads(decoded)
return projects.keys()
def create_repos_list(projects, gerrit, ssh, git, poll):
"""Create a map of all projects to their repositories' URLs."""
gerrit_url = "https://{}{}".format(gerrit, API_PREFIX)
git_url = "git://{}".format(git)
gerrit_project_url_base = "{}/{{}}.git".format(gerrit_url)
gitweb_code_url_base = "{}/gitweb?p={{}}.git;hb=HEAD;a=blob;f=".format(gerrit_url)
git_project_url_base = "{}/{{}}.git".format(git_url)
repos_list = {}
for project in projects:
project_url = gerrit_project_url_base.format(project)
code_url = gitweb_code_url_base.format(project) + CODE_LOCATION
anchor = GITWEB_ANCHOR
if ssh and len(ssh) == 2:
user, port = ssh[0], ssh[1]
project_url = "ssh://{}@{}:{}/{}.git".format(user, gerrit, port, project)
if git:
code_url = "https://{}/{}/tree/".format(git, project) + CODE_LOCATION
project_url = git_project_url_base.format(project)
anchor = GIT_ANCHOR
repos_list[project] = {
"url": project_url,
"url-pattern": {
"base-url": code_url,
"anchor": anchor,
"ms-between-poll": poll * 1000
}
}
return repos_list
def parse_arguments():
"""Return parsed command-line arguments."""
parser = argparse.ArgumentParser(description=__doc__)
group = parser.add_mutually_exclusive_group()
parser.add_argument('--gerrit', help='Gerrit address', default=DEFAULT_GERRIT)
group.add_argument('--ssh', help='SSH information for Gerrit access: user, port', nargs=2)
group.add_argument('--git', help='External git address. Does not support --ssh')
parser.add_argument('--poll-interval', help='Repositories polling interval in seconds', type=int, default=DEFAULT_POLL)
return parser.parse_args()
def main():
"""Main entry point for the script."""
arguments = parse_arguments()
projects = get_projects_list(arguments.gerrit)
repos = create_repos_list(projects, arguments.gerrit, arguments.ssh, arguments.git, arguments.poll_interval)
config = {
"max-concurrent-indexers": 2,
"dbpath": "data",
"health-check-uri": "/healthz",
"repos": repos
}
print(json.dumps(config, sort_keys=True, indent=4, separators=(',', ': ')))
if __name__ == '__main__':
sys.exit(main())