Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/opt/gitlab/embedded/bin/python3
"""
When this module is installed as a file hook in GitLab, it forwards the event to a web service for further handling
"""
import logging
import logging.config
import requests
from configparser import ConfigParser
import sys
from enum import Enum
import os
import pathlib
from typing import Any, Callable, Dict, Iterator, List, Optional, Tuple
def logger_setup(filepath: str) -> Dict[str, Any]:
"""
Returns a dictionary which can be used to configure a logger.
:param filepath: path of the log file
:return: a dictionary to configure a logger
"""
return {
"version": 1,
"disable_existing_loggers": False,
"formatters": {
"standard": {
"format": "%(asctime)s %(levelname)-8s [%(filename)-20s:%(lineno)4d]: %(message)s"
},
},
"handlers": {
"file_handler": {
"level": "INFO",
"filename": filepath,
"class": "logging.handlers.RotatingFileHandler",
"formatter": "standard",
"maxBytes": 524288,
"backupCount": 2,
}
},
"loggers": {
"": {"handlers": ["file_handler"], "level": "INFO", "propagate": True},
},
}
def read_gitlab_event() -> str:
"""
Reads the GitLab system hook event from stdin.
:return: The event
"""
event_content = ""
for line in sys.stdin:
event_content = event_content + line
return event_content
if __name__ == "__main__": # pragma: no cover
_LOG_FILE = "/var/log/gitlab/gitlab-rails/trigger_project_update_local.log"
logger_setup = logger_setup(_LOG_FILE)
logging.config.dictConfig(logger_setup)
logger = logging.getLogger(__name__)
indexServiceURL = "http://sharing_search:8080/api/gitlab/eventListener"
if(indexServiceURL is None):
logger.error("INDEXING_SERVICE_URL is not set")
sys.exit(1)
event = read_gitlab_event()
if event is not None:
headers = {'Content-Type': 'application/json; charset=utf-8'}
response = requests.post(indexServiceURL, headers=headers, data=event)
logger.info('forwarded event to %s: Status %s', indexServiceURL, response.status_code)