forked from coala/community
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
ci_build/: Re-design build-logs webpage
The newly created webpage combines the previous two webpages- info.txt and log/index.html. This web-page combines the results of both the pages and shows them in a better UI/UX with additional features of filtering and searching within the existing logs. The logs are fetched from a JSON file which is created from the logs stored in the log file _site/community.log Closes coala#256
- Loading branch information
Showing
13 changed files
with
376 additions
and
87 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -9,7 +9,7 @@ packages: | |
- gci | ||
- gsoc | ||
- gamification | ||
- log | ||
- ci_build | ||
- meta_review | ||
- model | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,103 @@ | ||
import re | ||
import json | ||
import os | ||
import sys | ||
|
||
from django.views.generic import TemplateView | ||
|
||
from community.views import get_header_and_footer | ||
from community.git import ( | ||
get_org_name, | ||
get_owner, | ||
get_deploy_url, | ||
get_upstream_deploy_url | ||
) | ||
|
||
|
||
class BuildLogsView(TemplateView): | ||
template_name = 'build_logs.html' | ||
|
||
def get_build_info(self): | ||
data = { | ||
'Org name': get_org_name(), | ||
'Owner': get_owner(), | ||
'Deploy URL': get_deploy_url(), | ||
} | ||
try: | ||
upstream_deploy_url = get_upstream_deploy_url() | ||
data['Upstream deploy URL'] = upstream_deploy_url | ||
except RuntimeError: | ||
data['Upstream deploy URL'] = 'Not found' | ||
return data | ||
|
||
def get_build_logs(self, log_file_path): | ||
log_lines = [] | ||
log_level_specific_lines = { | ||
'INFO': [], | ||
'DEBUG': [], | ||
'WARNING': [], | ||
'ERROR': [], | ||
'CRITICAL': [] | ||
} | ||
with open(log_file_path) as log_file: | ||
previous_found_level = None | ||
for line in log_file: | ||
log_lines.append(line) | ||
levels = re.findall(r'\[[A-Z]+]', line) | ||
if levels: | ||
level = levels[0] | ||
level = previous_found_level = level[1:-1] | ||
log_level_specific_lines[level].append(line) | ||
elif previous_found_level: | ||
log_level_specific_lines[previous_found_level].append( | ||
line) | ||
return log_lines, log_level_specific_lines | ||
|
||
def create_and_copy_build_logs_json(self, logs, level_specific_logs): | ||
ci_build_jsons = { | ||
'site_path': './_site/ci-build-detailed-logs.json', | ||
'public_path': './public/static/ci-build-detailed-logs.json', | ||
'static_path': './static/ci-build-detailed-logs.json' | ||
} | ||
with open(ci_build_jsons['site_path'], 'w+') as build_logs_file: | ||
data = { | ||
'logs': logs, | ||
'logs_level_Specific': level_specific_logs | ||
} | ||
json.dump(data, build_logs_file, indent=4) | ||
return self.copy_build_logs_json(ci_build_jsons) | ||
|
||
def copy_build_logs_json(self, ci_build_jsons): | ||
if os.path.isfile(ci_build_jsons['public_path']): | ||
if sys.platform == 'linux': | ||
os.popen('cp {} {}'.format( | ||
ci_build_jsons['site_path'], | ||
ci_build_jsons['public_path'])) | ||
os.popen('cp {} {}'.format( | ||
ci_build_jsons['site_path'], | ||
ci_build_jsons['static_path'])) | ||
else: | ||
os.popen('copy {} {}'.format( | ||
ci_build_jsons['site_path'], | ||
ci_build_jsons['public_path'])) | ||
os.popen('copy {} {}'.format( | ||
ci_build_jsons['site_path'], | ||
ci_build_jsons['static_path'])) | ||
return True | ||
return False | ||
|
||
def check_build_logs_stored(self): | ||
log_file_path = './_site/community.log' | ||
log_file_exists = os.path.isfile(log_file_path) | ||
if log_file_exists: | ||
logs, level_specific_logs = self.get_build_logs(log_file_path) | ||
return self.create_and_copy_build_logs_json(logs, | ||
level_specific_logs) | ||
return False | ||
|
||
def get_context_data(self, **kwargs): | ||
context = super().get_context_data(**kwargs) | ||
context = get_header_and_footer(context) | ||
context['build_info'] = self.get_build_info() | ||
context['logs_stored'] = self.check_build_logs_stored() | ||
return context |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,86 @@ | ||
.build-info-section section, | ||
.build-logs-section section { | ||
min-width: 300px; | ||
width: 80%; | ||
} | ||
|
||
.build-information, | ||
.build-logs { | ||
background-color: black; | ||
padding-left: 10px; | ||
font-weight: bold; | ||
color: white; | ||
} | ||
|
||
.build-information p { | ||
font-size: 1.5em; | ||
margin: 0; | ||
} | ||
|
||
.build-logs { | ||
max-height: 900px; | ||
overflow: scroll; | ||
overflow-x: hidden; | ||
overflow-y: auto; | ||
} | ||
|
||
.build-logs p { | ||
margin: 0; | ||
} | ||
|
||
.build-logs-section .log-chooser { | ||
width: 25%; | ||
min-width: 150px; | ||
border-radius: 100px; | ||
box-shadow: 0px 0px 25px 2px black; | ||
color: #454343; | ||
background-color: #c7da99; | ||
padding-left: 10px; | ||
margin: auto; | ||
margin-right: 0; | ||
} | ||
|
||
.build-logs-section .log-chooser input, | ||
.build-logs-section .log-chooser input:focus:not(.browser-default) { | ||
border-bottom: none; | ||
margin-bottom: 0; | ||
} | ||
|
||
.build-logs-section .small-screen, | ||
.build-logs-section .fa-close { | ||
display: none; | ||
} | ||
|
||
.form-fields { | ||
margin: auto; | ||
margin-right: 0; | ||
width: 60%; | ||
padding-top: 10px; | ||
} | ||
|
||
.search-field { | ||
width: 60%; | ||
min-width: 180px; | ||
} | ||
|
||
.section-header { | ||
display: flex; | ||
align-items: center; | ||
} | ||
|
||
.section-header form { | ||
display: flex; | ||
} | ||
|
||
@media only screen and (max-width: 660px) { | ||
.build-logs-section .search-field { | ||
display: none; | ||
} | ||
.build-logs-section .small-screen { | ||
display: flex; | ||
align-items: center; | ||
margin: auto; | ||
margin-right: 3px; | ||
font-size: 2em; | ||
} | ||
} |
Oops, something went wrong.