From 88794e37465b6915ce171a3cb29d962122ce01ac Mon Sep 17 00:00:00 2001 From: dsk-minchulahn Date: Thu, 19 Oct 2023 17:10:56 +0900 Subject: [PATCH] =?UTF-8?q?Recent=20deliveries=20tab=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dashboard/main.py | 20 +++++++++---- dashboard/settings.py | 31 +++++++++++++------ dashboard/sidebar.py | 69 ++++++++++++++++++++++++++++--------------- 3 files changed, 81 insertions(+), 39 deletions(-) diff --git a/dashboard/main.py b/dashboard/main.py index 3f104bf..f05c5da 100644 --- a/dashboard/main.py +++ b/dashboard/main.py @@ -1,6 +1,5 @@ import pandas as pd import streamlit as st -from datetime import datetime from streamlit_js_eval import streamlit_js_eval from settings import * from sidebar import show_sidebar @@ -15,7 +14,7 @@ if __name__=='__main__': layout='wide' ) - tab1, tab2 = st.tabs(["DataSaker", "Releases"]) + tab1, tab2, tab3 = st.tabs(["DataSaker", "Releases", "Recent Deliveries"]) with tab1: st.header('DataSaker') @@ -48,13 +47,22 @@ if __name__=='__main__': st.write(st.session_state['data_editor']['edited_rows']) with tab2: - releases = get_github_releases() - for release in releases: + releases = get_releases() + for release in releases: st.write(f"### {release['name']}") st.write(release['html_url']) - st.write(datetime.strptime(release['published_at'], "%Y-%m-%dT%H:%M:%SZ")) - # st.write(datetime.strptime(release['published_at'], "%Y-%m-%dT%H:%M:%SZ").strftime('%Y-%m-%d %H:%M:%S')) + st.write(convert_utc_to_korea_time(release['published_at'])) st.write(release['body'].replace('#', '')) st.divider() + with tab3: + deliveries = get_delivery() + + for delivery in deliveries: + st.write(f"#### {delivery['guid']}") + st.write(f"{convert_utc_to_korea_time(delivery['delivered_at'])}") + st.write(f"Delivery ID: {delivery['id']}") + + st.divider() + show_sidebar(df, edited_df) \ No newline at end of file diff --git a/dashboard/settings.py b/dashboard/settings.py index d5c1148..9e0fd6c 100644 --- a/dashboard/settings.py +++ b/dashboard/settings.py @@ -1,10 +1,13 @@ import os, json, requests, subprocess +from datetime import datetime, timedelta from git import Repo repo = Repo('.') file_path = './version.json' -api_url = 'https://api.github.com/repos/cloudmoa/dsk-version-management/releases' +release_url = 'https://api.github.com/repos/cloudmoa/dsk-version-management/releases' +delivery_url = 'https://api.github.com/repos/CloudMOA/dsk-version-management/hooks/412710389/deliveries' github_token = os.environ.get('GITHUB_TOKEN') +headers = {'Authorization': f"Bearer {github_token}", 'Accept': 'application/vnd.github.v3+json'} def get_datasaker(): return json.load(open(file_path, 'r'))['datasaker'] @@ -19,11 +22,13 @@ def get_tags(): latest_tags = sorted(repo.tags, key=lambda t: t.commit.committed_date, reverse=True) return latest_tags -def get_github_releases(): - headers = {'Authorization': f'Bearer {github_token}', 'Accept': 'application/vnd.github.v3+json'} - releases = requests.get(api_url, headers=headers).json() +def get_releases(): + releases = requests.get(release_url, headers=headers).json() return releases +def get_delivery(): + return requests.get(delivery_url, headers=headers).json() + def get_user_name_list(): users = ['', 'dsk-minchulahn', 'Ose-Exem', 'deukjin', 'pparkssi3'] return users @@ -34,7 +39,7 @@ def get_user_email(username): elif username == 'deukjin': return 'djkim@ex-em.com' elif username == 'pparkssi3': return 'pparkssi@ex-em.com' else: return '' - + def set_git_config(username, email): subprocess.run(["git", "config", "--global", "user.name", username], check=True) subprocess.run(["git", "config", "--global", "user.email", email], check=True) @@ -61,16 +66,24 @@ def git_push(commit_message, extended_description): repo.git.add('version.json') if len(repo.index.diff(repo.head.commit)) > 0: - repo.index.commit(f'{commit_message}\n\n{extended_description}') + repo.index.commit(f"{commit_message}\n\n{extended_description}") repo.git.push(force=False) def publish_release(selected_tag, release_title, release_describe): - headers = {'Authorization': f'Bearer {github_token}', 'Accept': 'application/vnd.github.v3+json'} - release_data = { + publish_release_data = { 'tag_name': selected_tag, 'name': release_title, 'body': release_describe, 'draft': False, 'prerelease': False } - return requests.post(api_url, json=release_data, headers=headers) \ No newline at end of file + return requests.post(release_url, json=publish_release_data, headers=headers) + +def redeliver(delivery_id): + redeliver_url = f"{delivery_url}/{delivery_id}/attempts" + return requests.post(redeliver_url, headers=headers) + +def convert_utc_to_korea_time(utc_time_str): + utc_time = datetime.fromisoformat(utc_time_str[:-1]) + korea_time = utc_time + timedelta(hours=9) + return korea_time.strftime("%Y-%m-%d %H:%M:%S") \ No newline at end of file diff --git a/dashboard/sidebar.py b/dashboard/sidebar.py index a519f33..4301d92 100644 --- a/dashboard/sidebar.py +++ b/dashboard/sidebar.py @@ -49,21 +49,22 @@ def show_sidebar(df, edited_df): st.session_state.push_button_disabled = True if st.button(key='push', label='Commit changes', disabled=st.session_state.push_button_disabled): - if selected_user_name and commit_message: - if diff_remote_head(): - if df.equals(edited_df): - logger.warning(f'Git Push - No changes have been made | {selected_user_name}') - st.warning('No changes have been made', icon='⚠️') + with st.spinner('RUNNING...'): + if selected_user_name and commit_message: + if diff_remote_head(): + if df.equals(edited_df): + logger.warning(f'Git Push - No changes have been made | {selected_user_name}') + st.warning('No changes have been made', icon='⚠️') + else: + set_version_json(edited_df) + git_push(commit_message, extended_description) + logger.info(f'Git Push - Success | {selected_user_name}') + st.success('Success', icon='✅') + time.sleep(1) + streamlit_js_eval(js_expressions='parent.window.location.reload()') else: - set_version_json(edited_df) - git_push(commit_message, extended_description) - logger.info(f'Git Push - Success | {selected_user_name}') - st.success('Success', icon='✅') - time.sleep(1) - streamlit_js_eval(js_expressions='parent.window.location.reload()') - else: - logger.error(f'Git Push - Updates were rejected because the tip of your current branch is behind | {selected_user_name}') - st.error('Updates were rejected because the tip of your current branch is behind', icon='🚨') + logger.error(f'Git Push - Updates were rejected because the tip of your current branch is behind | {selected_user_name}') + st.error('Updates were rejected because the tip of your current branch is behind', icon='🚨') st.divider() @@ -90,16 +91,36 @@ def show_sidebar(df, edited_df): if st.button(key='release', label='Publish release', disabled=st.session_state.release_button_disabled): if selected_tag and release_title and release_describe: - response = publish_release(selected_tag, release_title, release_describe) + with st.spinner('RUNNING...'): + publish_release_response = publish_release(selected_tag, release_title, release_describe) + + if publish_release_response.status_code == 201: + logger.info(f'Publish Release - Release created successfully') + st.success('Release created successfully', icon='✅') + git_pull() + streamlit_js_eval(js_expressions='parent.window.location.reload()') + else: + logger.error(f'Publish Release - Failed to create release. Status code: {publish_release_response.status_code}') + logger.error(f'Response: {publish_release_response.text}') + st.error(f'Failed to create release. Status code: {publish_release_response.status_code}\n\n Response: {publish_release_response.text}', icon='🚨') + + st.divider() + + st.subheader('Redeliver') + with st.expander('Redeliver'): + delivery_id = st.text_input('Delivery ID', value='') + + if st.button(key='redeliver', label='Redeliver'): + with st.spinner('RUNNING...'): + redeliver_response = redeliver(delivery_id) + time.sleep(2) - if response.status_code == 201: - logger.info(f'Publish Release - Release created successfully') - st.success('Release created successfully', icon='✅') - git_pull() + if redeliver_response.status_code == 202: + logger.info(f'Re Deliver - Success') + st.success('successfully', icon='✅') streamlit_js_eval(js_expressions='parent.window.location.reload()') else: - logger.error(f'Publish Release - Failed to create release. Status code: {response.status_code}') - logger.error(f'Response: {response.text}') - st.error(f'Failed to create release. Status code: {response.status_code}\n\n Response: {response.text}', icon='🚨') - - st.divider() \ No newline at end of file + logger.error(f'ReDeliver - Failed to redeliver. Status code: {redeliver_response.status_code}') + logger.error(f'Response: {redeliver_response.text}') + st.error(f'Failed to redeliver. Status code: {redeliver_response.status_code}\n\n Response: {redeliver_response.text}', icon='🚨') + \ No newline at end of file