diff --git a/.github/scripts/new_weekly.sh b/.github/scripts/new_weekly.sh new file mode 100644 index 0000000..ea9b0dc --- /dev/null +++ b/.github/scripts/new_weekly.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +WEEKLY_LOG="weekly.log" + +MondayDate=`date "+%Y.%m.%d"` +FridayDate=`date "+%Y.%m.%d" --date "-4 days ago"` + +MondayDateSplitArray=(${MondayDate//./ }) +FridayDateSplitArray=(${FridayDate//./ }) + +directoryName="$MondayDate-$FridayDate" + +directoryRootName=`date "+%Y.%m"` + +if [[ -e "$directoryRootName/$directoryName/template.md" ]]; then + echo "The file already exists, exit" + exit 1 +fi + +mkdir -p "$directoryRootName/$directoryName" + +cp Template/template.md "$directoryRootName/$directoryName" + +fileName="$_/template.md" + +week=`sed -n '3p' "${WEEKLY_LOG}"` + +sed -i "2c title: '第${week}周工作汇报'" "$fileName" + +let week=week+1 +sed -i "3c ${week}" "${WEEKLY_LOG}" + +markdownDate="${MondayDateSplitArray[0]}年\ +${MondayDateSplitArray[1]}月\ +${MondayDateSplitArray[2]}日-\ +${FridayDateSplitArray[0]}年\ +${FridayDateSplitArray[1]}月\ +${FridayDateSplitArray[2]}日" + +sed -i "3c date: '${markdownDate}'" "$fileName" diff --git a/.github/scripts/submit_weekly.sh b/.github/scripts/submit_weekly.sh new file mode 100644 index 0000000..030ace7 --- /dev/null +++ b/.github/scripts/submit_weekly.sh @@ -0,0 +1,60 @@ +#!/bin/bash + +MondayDate=`date "+%Y.%m.%d" --date "6 days ago"` +FridayDate=`date "+%Y.%m.%d" --date "2 days ago"` + +directoryName="$MondayDate-$FridayDate" +directoryRootName=`date "+%Y.%m" --date "6 days ago"` +fileName="$directoryRootName/$directoryName/template.md" +fileCopyName="$directoryRootName/$directoryName/template_copy.md" + +cp "$fileName" "$fileCopyName" + +markdownAttachmentResult=`sed -n '/^\[.\+/p' $fileName` +readarray -t markdownAttachment <<< "$markdownAttachmentResult" + +markdownAttachmentLineNumberResult=`sed -n '/^\[.\+/=' $fileName` +readarray -t markdownAttachmentLineNumber <<< "$markdownAttachmentLineNumberResult" + +attachmentNumber="${#markdownAttachment[@]}" + +declare -a attachments +declare -a attachmentCopy +declare -a attachmentToAddToGit + +for i in `seq 1 "$attachmentNumber"`; do + let j=i-1 + subStringLeft=${markdownAttachment[j]#*(} + attachments[$j]=${subStringLeft%)*} +done + +if [[ ! -z "$markdownAttachmentResult" ]] ;then + for i in `seq 1 "$attachmentNumber"`; do + let j=i-1 + if [[ ! -e "$directoryRootName/$directoryName/${attachments[j]}" ]]; then + echo "The attachment file doesn't exist" + exit 1 + fi + subStringLeft=${markdownAttachment[j]#*[} + attachmentCopy[$j]="[$i.${subStringLeft%]*}]($i.${attachments[j]})" + sed -i "${markdownAttachmentLineNumber[j]}c ${attachmentCopy[j]}" "$fileCopyName" + attachmentToAddToGit[$j]=$i.${attachments[j]} + cp -r "$directoryRootName/$directoryName/${attachments[j]}" "$directoryRootName/$directoryName/$i.${attachments[j]}" + done +fi + +outputFileName="$directoryRootName/$directoryName/0.$directoryName.docx" +/bin/pandoc --reference-doc=./Template/custom-reference.docx "$fileCopyName" -o "$outputFileName" + +cd "$directoryRootName/$directoryName" + +/bin/zip "$directoryName"AIOps周报.zip "${attachmentToAddToGit[@]}" "0.$directoryName.docx" + +echo "WEEKLY_PATH="$directoryRootName/$directoryName"" >> $GITHUB_ENV +echo "WEEKLY_NAME="$directoryName"AIOps周报.zip" >> $GITHUB_ENV + +git config user.name 'github-actions[bot]' +git config user.email 'github-actions[bot]@users.noreply.github.com' +git add "$directoryName"AIOps周报.zip +git commit -m '[automated commit] Submit weekly' +git push diff --git a/.github/scripts/weixin_upload.py b/.github/scripts/weixin_upload.py new file mode 100644 index 0000000..b01fe49 --- /dev/null +++ b/.github/scripts/weixin_upload.py @@ -0,0 +1,51 @@ +#!/usr/bin/python3 + +import os +import requests + +""" +This function uses the interface provided by weixin, +See https://developer.work.weixin.qq.com/document/path/91770#文件上传接口 +See https://developer.work.weixin.qq.com/document/path/91770#文件类型 + +parameter: + key: the weixin bot key + attachment_path: the attachment path + +return: + An exit status + +""" +def send_file(key: str, attachment_path: str) -> int: + try: + file_data = {'file': open(attachment_path, 'rb')} + except FileNotFoundError: + print(f'Error: this is no such file {attachment_path}, crash') + return -1 + get_file_descriptor_url = (f'https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?' + f'key={key}&type=file') + response = requests.post(url=get_file_descriptor_url, files=file_data) + json_decode = response.json() + try: + media_id = json_decode['media_id'] + except KeyError: + print(f'Error: upload file to get media_id fail, crash') + return -1 + send_data = { "msgtype": "file", + "file": {"media_id": media_id} + } + send_file_url = (f'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?' + f'key={key}') + requests.post(url=send_file_url,json=send_data) + return 0 + +def main() -> None: + key = os.environ.get("WEIXIN_ROBOT") + attachment_path = os.environ.get("ATTACHMENT_NAME") + if key is None or attachment_path is None: + print('Error: cannot get environment variable, crash') + return + send_file(key, attachment_path) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/.github/workflows/new-weekly.yaml b/.github/workflows/new-weekly.yaml new file mode 100644 index 0000000..0e85843 --- /dev/null +++ b/.github/workflows/new-weekly.yaml @@ -0,0 +1,20 @@ +name: New Weekly +on: + workflow_dispatch: + schedule: + - cron: '0 8 * * 1' +jobs: + new_weekly: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Run new weekly script + run: ./.github/scripts/new_weekly.sh + shell: bash + - name: Git commit + run: | + git config user.name 'github-actions[bot]' + git config user.email 'github-actions[bot]@users.noreply.github.com' + git add -A + git commit -m '[automated commit] Add new weekly' + git push diff --git a/.github/workflows/submit-weekly.yaml b/.github/workflows/submit-weekly.yaml new file mode 100644 index 0000000..0cf2238 --- /dev/null +++ b/.github/workflows/submit-weekly.yaml @@ -0,0 +1,42 @@ +name: Submit Weekly +on: [workflow_dispatch] +jobs: + submit_weekly: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Install the dependencies + run: | + sudo apt-get update + sudo apt-get install zip wget python3 python3-pip + sudo pip3 install requests + - name: Install the pandoc + run: | + wget https://github.com/jgm/pandoc/releases/download/2.17.1.1/pandoc-2.17.1.1-1-amd64.deb + sudo dpkg -i pandoc-2.17.1.1-1-amd64.deb + - name: Run submit weekly script + run: ./.github/scripts/submit_weekly.sh + shell: bash + - name: Send the email to big boss and little boss + # see https://github.com/dawidd6/action-send-mail + uses: dawidd6/action-send-mail@v3 + with: + server_address: smtp.yandex.com + server_port: 465 + username: ${{secrets.MAIL_USERNAME}} + password: ${{secrets.MAIL_PASSWORD}} + subject: "${{env.WEEKLY_NAME}}" + to: ${{secrets.BIG_BOSS_EMAIL_ADDRESS}} + from: ${{secrets.MAIL_USERNAME}} + secure: true + html_body: file://./Template/email.md + cc: ${{secrets.LITTLE_BOSS_EMAIL_ADDRESS}}, ${{secrets.SELF_MAIL_ADDRESS}} + ignore_cert: true + convert_markdown: true + attachments: ./${{env.WEEKLY_PATH}}/${{env.WEEKLY_NAME}} + priority: normal + - name: Send the weekly zip to WeiXinWork + run: python3 ./.github/scripts/weixin_upload.py + env: + WEIXIN_ROBOT: ${{secrets.WEIXIN_ROBOT}} + ATTACHMENT_NAME: ./${{env.WEEKLY_PATH}}/${{env.WEEKLY_NAME}} \ No newline at end of file diff --git a/2023.02/2023.02.06-2023.02.10/template.md b/2023.02/2023.02.06-2023.02.10/template.md new file mode 100644 index 0000000..fecb641 --- /dev/null +++ b/2023.02/2023.02.06-2023.02.10/template.md @@ -0,0 +1,49 @@ +--- +title: '第1周工作汇报' +date: '2023年02月06日-2023年02月10日' +--- + + + +# 1 研究工作 + +本周各方向的具体研究工作完成情况如下: + +## 1.1 学习Spring Cloud框架——刘雨晴 + +本周刘雨晴同学在之前学习的基础之上,进一步学习了Spring Cloud微服务框架,详细了解关于Config、Zuul、Bus等组件,熟悉了微服务架构在实际中所遇到各方面问题及其解决方案。 + + +[刘雨晴+学习Spring Cloud框架笔记](刘雨晴+学习Spring Cloud框架笔记.docx) + +# 2 工程进展 + +## 2.1 青岛旅游网站项目——刘雨晴、尚超 + +本周刘雨晴同学参加青岛旅游网站项目的开发,初步熟悉项目的需求,学习项目开发的前置知识Django框架,同时建立起项目开发的必要环境。 + +本周尚超同学主要工作是熟悉了青岛旅游项目,搭建项目环境。并且开会讨论了青岛旅游项目的组织时间安排与任务分工。熟悉了Web框架Django的基本结构。 + +# 3 项目进展 + +## 3.1 知识图谱技术报告文档——刘雨晴、尚超、佘嘉洛 + +本周刘雨晴、尚超和佘嘉洛同学编写知识图谱项目中关于知识图谱创建和知识融合的技术现状说明并提出相应的可行技术方案,完成初步版本。 + +# 4 其它工作 + +## 4.1 不确定性与质量保障论文搜集——张河、曹壮 + +本周张河同学与曹壮同学搜集了不确定性与质量保障的相关论文,分类为不确定性对感知分析质量的影响、感知分析不确定性处理、感知分析方法质量提升、普通感知分析方法四大类,在搜集过程中还找到一些其他类的论文,包括不确定性与测试用例、不确定性与需求满足、不确定性与自适应模型等等作为论文储备,可以作为后续的研究。 + +# 5 下周工作计划 + +## 5.1 学术方面 + ++ 佘嘉洛同学继续研究弹性伸缩 ++ 刘雨晴同学继续研究微服务监控 + +## 5.2 工程方面 + ++ 佘嘉洛同学继续推进631项目 ++ 刘雨晴同学继续推进631项目 diff --git a/README.md b/README.md new file mode 100644 index 0000000..c8cdc6e --- /dev/null +++ b/README.md @@ -0,0 +1,141 @@ +# AIOps_Weekly + +本仓库用于AIOps组的周报管理。 + +## GitHub Action的使用 + +目前,本仓库存在两个GitHub Action用于使得周报的流程更加自动化。 + +### New Weekly Action + +`New Weekly`在每周一下午4点自动创建周报的模板,也可以通过手动进行触发,但是一般不触发。其核心的逻辑十分简单,首先通过`date`获取星期一的日期,并获取星期五的日期,并构建`directoryName`变量. 实现的逻辑比较简单,就是通过`sed`进行修改。 + +目前唯一的问题在于周数的确认无法通过比较好的方式, 目前采用的方式是通过读取`weekly.log`文件的值. 在放假的时候,按照现在的逻辑仍然会创建新的文件,增加`weekly.log`的值,这种逻辑是不对的,这能后期通过人工进行修改,但是只需要在新学期对其进行一次修改,然后均可以实现自动化.目前只能采取这种妥协的方式. + +### Submit Weekly Action + +`Submit Weekly`实现自动编号(附件与内容),自动通过`pandoc`将markdown转化为word,然后生成压缩包,自动地将周报发送给相关的老师的邮箱,提交后,下载上传至QQ群中即可。 + +首先通过`submit_weekly.sh`通过`sed`结合正则,选择出`[]()`的内容,通过shell script对其编号.然后创建`template_copy.md`修改其内容。同时,github action将会安装`zip`和`pandoc`.通过`pandoc`自动地将md转化为docx,然后通过`zip`直接压缩.然后commit压缩文件。 + +遗憾地是,shell脚本采用了比较丑陋的方式,即通过日期进入这一周的周报由于采取utc,而国内位于utc 8+,故截止时间为星期一8点手动执行github action。 + +同时,`Submit Weekly`会发送生成的周报至老师的邮箱,故维持了五个Secret变量: + ++ `MAIL_USERNAME`:实验室的邮箱名。 ++ `MAIL_PASSWORD`:生成的邮件应用密码。 ++ `BIG_BOSS_EMAIL_ADDRESS` ++ `LITTLE_BOSS_EMAIL_ADDRESS` ++ `SELF_MAIL_ADDRESS`:自己的邮箱,用于检查邮件是否正常发送,且备份。 + +注意,如果你要修改发送的邮件的内容,请修改`Template/email.md`文件。 + +近期,实验室采用了企业微信作为工作的群。企业微信提供了群机器人可以自动上传文件,故增加了一个`py`脚本实现上传文件的自动化,并在仓库中增加了一个Secret变量: + ++ `WEIXIN_ROBOT`:微信群机器人的key。 + +其基本的逻辑很简单,请参考腾讯的[教程](https://developer.work.weixin.qq.com/document/path/91770) + +## 周报的编写 + +### 总体模板 + +```markdown + + +--- +title: '第X周工作汇报' +date: '202X年X月X日-202X年X月X日' +--- + + + +# 1 研究工作 + +本周各方向的具体研究工作完成情况如下: + +## 1.1 学习Spring Cloud框架——刘雨晴 + +本周刘雨晴同学在之前学习的基础之上,进一步学习了Spring Cloud微服务框架,详细了解关于Config、Zuul、Bus等组件,熟悉了微服务架构在实际中所遇到各方面问题及其解决方案。 + + +[刘雨晴+学习Spring Cloud框架笔记](刘雨晴+学习Spring Cloud框架笔记.docx) + +# 2 工程进展 + +## 2.1 青岛旅游网站项目——刘雨晴、尚超 + +本周刘雨晴同学参加青岛旅游网站项目的开发,初步熟悉项目的需求,学习项目开发的前置知识Django框架,同时建立起项目开发的必要环境。 + +本周尚超同学主要工作是熟悉了青岛旅游项目,搭建项目环境。并且开会讨论了青岛旅游项目的组织时间安排与任务分工。熟悉了Web框架Django的基本结构。 + +# 3 项目进展 + +## 3.1 知识图谱技术报告文档——刘雨晴、尚超、佘嘉洛 + +本周刘雨晴、尚超和佘嘉洛同学编写知识图谱项目中关于知识图谱创建和知识融合的技术现状说明并提出相应的可行技术方案,完成初步版本。 + +# 4 其它工作 + +## 4.1 不确定性与质量保障论文搜集——张河、曹壮 + +本周张河同学与曹壮同学搜集了不确定性与质量保障的相关论文,分类为不确定性对感知分析质量的影响、感知分析不确定性处理、感知分析方法质量提升、普通感知分析方法四大类,在搜集过程中还找到一些其他类的论文,包括不确定性与测试用例、不确定性与需求满足、不确定性与自适应模型等等作为论文储备,可以作为后续的研究。 + +# 5 下周工作计划 + +## 5.1 学术方面 + ++ 佘嘉洛同学继续研究弹性伸缩 ++ 刘雨晴同学继续研究微服务监控 + +## 5.2 工程方面 + ++ 佘嘉洛同学继续推进631项目 ++ 刘雨晴同学继续推进631项目 + +``` + +### 时间要求 + ++ 周日晚上8点以前 + +### 内容要求 + ++ 个人研究及调研,学术论文撰写,论文阅读,资料学习等放在研究工作中。 ++ 代码开发,架构设计等放在工程进展中。 ++ 项目申报,结题,报告撰写,材料准备等放在项目工作中。 ++ 做PPT,设计海报等实验室任务或者私活放在其他里。 ++ 每人至少有一个研究计划。 ++ 添加附件的超链接(使用相对地址)。 + +不需要写入周报的内容: + ++ 老师完成的活。 ++ 没有工作量的体力劳动。 ++ 和小组完全没关系的杂事。 + +### 汇总要求 + ++ 检查周报内容的说法是否准确,是否合理。 ++ 是否需要合并人在对全组工作有了解的情况下酌情删减(有些人的东西根本不能放)、增加(有些人干了活没写让他补)、修改(有些人话说不清)或总结(有些事两个年级都有写)。 + +### 文档结构组织 + +文档的结构组织采用:月份 + 对应星期的文件夹。 + +月份:`202x.0x`。 +星期:`2020.03.02—2020.03.06`,星期一至星期五。 + +然而,你并不需要担心,已经通过两个GitHub Action自动化实现。 + +### 使用Markdown撰写 + +Pandoc使用的Word模板为`Template`中的`custom-reference.docx`,其中`template.md`为Markdown的模板。 + +写完了md后,使用如下命令生成word文档 + +```sh +pandoc input.md --reference-doc=custom-reference.docx -o output.docx +``` + +当然,你并不需要手动生成。目前已通过GitHub Action实现自动化。 diff --git a/Template/custom-reference.docx b/Template/custom-reference.docx new file mode 100644 index 0000000..b84105b Binary files /dev/null and b/Template/custom-reference.docx differ diff --git a/Template/email.md b/Template/email.md new file mode 100644 index 0000000..459c9a4 --- /dev/null +++ b/Template/email.md @@ -0,0 +1,13 @@ +尊敬的李老师: + + 您好!这是本周智能化运维AIOps组的工作汇报,各位同学继续推进本学期自己所负责的相关工作。 + + 关于研究方面,本周所有同学推进了其个人研究以及论文的撰写工作。 + + 关于项目方面,本周所有同学推进青年基金结题和631所项目。 + + 下周智能化运维AIOps组将按照计划推进工作。 + + 谢谢老师指导,祝老师保持身体健康,工作一切顺利! + + 智能化运维AIOps组 diff --git a/Template/template-auto-generated by pandoc.docx b/Template/template-auto-generated by pandoc.docx new file mode 100644 index 0000000..95da5bd Binary files /dev/null and b/Template/template-auto-generated by pandoc.docx differ diff --git a/Template/template.md b/Template/template.md new file mode 100644 index 0000000..3687455 --- /dev/null +++ b/Template/template.md @@ -0,0 +1,49 @@ +--- +title: '第X周工作汇报' +date: '202X年X月X日-202X年X月X日' +--- + + + +# 1 研究工作 + +本周各方向的具体研究工作完成情况如下: + +## 1.1 学习Spring Cloud框架——刘雨晴 + +本周刘雨晴同学在之前学习的基础之上,进一步学习了Spring Cloud微服务框架,详细了解关于Config、Zuul、Bus等组件,熟悉了微服务架构在实际中所遇到各方面问题及其解决方案。 + + +[刘雨晴+学习Spring Cloud框架笔记](刘雨晴+学习Spring Cloud框架笔记.docx) + +# 2 工程进展 + +## 2.1 青岛旅游网站项目——刘雨晴、尚超 + +本周刘雨晴同学参加青岛旅游网站项目的开发,初步熟悉项目的需求,学习项目开发的前置知识Django框架,同时建立起项目开发的必要环境。 + +本周尚超同学主要工作是熟悉了青岛旅游项目,搭建项目环境。并且开会讨论了青岛旅游项目的组织时间安排与任务分工。熟悉了Web框架Django的基本结构。 + +# 3 项目进展 + +## 3.1 知识图谱技术报告文档——刘雨晴、尚超、佘嘉洛 + +本周刘雨晴、尚超和佘嘉洛同学编写知识图谱项目中关于知识图谱创建和知识融合的技术现状说明并提出相应的可行技术方案,完成初步版本。 + +# 4 其它工作 + +## 4.1 不确定性与质量保障论文搜集——张河、曹壮 + +本周张河同学与曹壮同学搜集了不确定性与质量保障的相关论文,分类为不确定性对感知分析质量的影响、感知分析不确定性处理、感知分析方法质量提升、普通感知分析方法四大类,在搜集过程中还找到一些其他类的论文,包括不确定性与测试用例、不确定性与需求满足、不确定性与自适应模型等等作为论文储备,可以作为后续的研究。 + +# 5 下周工作计划 + +## 5.1 学术方面 + ++ 佘嘉洛同学继续研究弹性伸缩 ++ 刘雨晴同学继续研究微服务监控 + +## 5.2 工程方面 + ++ 佘嘉洛同学继续推进631项目 ++ 刘雨晴同学继续推进631项目 diff --git "a/Template/\351\231\204\344\273\266.docx" "b/Template/\351\231\204\344\273\266.docx" new file mode 100644 index 0000000..9a85dda Binary files /dev/null and "b/Template/\351\231\204\344\273\266.docx" differ diff --git a/weekly.log b/weekly.log new file mode 100644 index 0000000..2e20c7f --- /dev/null +++ b/weekly.log @@ -0,0 +1,3 @@ +# This file is to log the weekly number +# Remember to set it to 1 in the new term +2