gitlab 获取到期后,提醒通知
python3 sendGitlabExpUserNotice.py soon_to_expire.txt脚本步骤1.获取到期用户信息soon_to_expire.txtpython3 getGitlabExpireActiveUserMsg.py2.执行提醒通知 (到期前15天可配置时间限制time.sleep(1)sendGitlabExpUserNotice.py#!/usr/bin/python3 #coding:utf-8 import sys import os import json import time import datetime import subprocess # 日志配置 logday time.strftime(%Y-%m-%d, time.localtime()) logfile qywx_api_ logday .log def umi_log_file(filename, msg): log_time str(datetime.datetime.now()) with open(filename, a) as f: f.write(log_time msg \n) # 企业微信消息发送 def umi_send_msg_by_qywx(user_info): msg_content f【GitLab权限到期提醒】 项目名称{user_info[project_name]} 项目地址{user_info[project_url]} 用户姓名{user_info[name]} 到期时间{user_info[expire_time]} 请及时处理权限续期事宜 umi_log_file(logfile, f准备发送消息给 {user_info[name]}) cmd_url https://qyapi.weixin.qq.com/cgi-bin/webhook/send?keyX cmd_head Content-Type:application/json params { msgtype: text, text: { content: msg_content, mentioned_mobile_list: [all] } } params_json json.dumps(params, ensure_asciiFalse) cmd fcurl -s -X POST {cmd_url} -H \{cmd_head}\ -d {params_json} result subprocess.run(cmd, shellTrue, capture_outputTrue, textTrue) if result.returncode 0: json_data json.loads(result.stdout) print(f消息发送给 {user_info[name]} 结果: {json_data[errmsg]}) umi_log_file(logfile, f发送结果: {json_data[errmsg]}) else: print(f命令执行失败{result.stderr}) umi_log_file(logfile, f命令执行失败{result.stderr}) # 解析文件内容 def parse_user_data(file_path): users [] current_user {} try: with open(file_path, r, encodingutf-8) as f: for line in f: line line.strip() if not line: if current_user: users.append(current_user) current_user {} continue if : in line: key, value line.split(:, 1) key key.strip() value value.strip() if key 项目名称: current_user[project_name] value elif key 项目地址: current_user[project_url] value elif key 用户名: current_user[username] value elif key 姓名: current_user[name] value elif key 到期时间: current_user[expire_time] value # 添加最后一个用户 if current_user: users.append(current_user) except FileNotFoundError: print(f错误文件 {file_path} 不存在) umi_log_file(logfile, f文件 {file_path} 不存在) sys.exit(1) except Exception as e: print(f解析文件时出错: {str(e)}) umi_log_file(logfile, f解析文件时出错: {str(e)}) sys.exit(1) return users # 主逻辑 if __name__ __main__: if len(sys.argv) ! 2: print(用法: python script.py 数据文件路径) sys.exit(1) data_file sys.argv[1] users parse_user_data(data_file) today datetime.datetime.now().date() for user in users: try: expire_date datetime.datetime.strptime(user[expire_time], %Y-%m-%d).date() days_left (expire_date - today).days if 0 days_left 15: print(f发送到期提醒给 {user[name]}剩余{days_left}天) umi_send_msg_by_qywx(user) else: print(f{user[name]} 的权限还有{days_left}天到期暂不提醒) except ValueError as e: print(f日期格式错误: {user[expire_time]} - {str(e)}) umi_log_file(logfile, f日期格式错误: {user[expire_time]} - {str(e)}) except KeyError as e: print(f用户数据缺少必要字段: {str(e)}) umi_log_file(logfile, f用户数据缺少必要字段: {str(e)})

相关新闻

每年撒8亿美元免费算力抢开发者:OpenAI和Anthropic的烧钱战争,到底烧出了什么?

每年撒8亿美元免费算力抢开发者:OpenAI和Anthropic的烧钱战争,到底烧出了什么?

先说一个真实的竞价过程。 今年 5 月,Sam Altman 在 Y Combinator 的活动上抛出一个方案:OpenAI 给每一家 YC 创业公司 200 万美元的 token 额度,换股权。 Token 换股权。拿 API 额度做风险投资。硅谷管这个叫"tokenmaxxing 投资"。…

2026/7/24 21:12:43阅读更多 →
【RabbitMQ】-- 核心概念

【RabbitMQ】-- 核心概念

文章目录1. RabbitMQ核心概念1.1 生产者Producer和消费者Consumer1.2 Connection和Channel1.3 Vrtual host1.4 Queue1.5 Exchange1.5.1 Rabbit MQ交换机的四种类型1.5.2 Routing Key 和 Biding Key1.6 AMQP协议更多RabbitMQ相关知识: RabbitMQ专栏1. RabbitMQ核心概…

2026/7/24 21:12:43阅读更多 →
基于SpringBoot的学生绩点学分管理系统的设计和实现(源码+LW+调试文档)

基于SpringBoot的学生绩点学分管理系统的设计和实现(源码+LW+调试文档)

目录: 完整视频演示: 系统架构: 程序运行截图: 核心代码参考: 数据库sql: 项目技术介绍: java介绍: Mysql数据库介绍: 为什么选择我: 获取源码&am…

2026/7/24 21:12:43阅读更多 →
【Linux】用户管理和配置免密登陆

【Linux】用户管理和配置免密登陆

【Linux】用户管理和配置免密登陆【一】用户管理【1】新增用户(1)检查用户是否存在(2)如果用户不存在,创建用户(3)设置密码(修改密码)【3】删除用户【4】权限管理&#x…

2026/7/24 22:30:56阅读更多 →
剑网三终极智能助手:5分钟快速配置的完整游戏伴侣方案

剑网三终极智能助手:5分钟快速配置的完整游戏伴侣方案

剑网三终极智能助手:5分钟快速配置的完整游戏伴侣方案 【免费下载链接】mini_jx3_bot 女生自用剑网三机器人 项目地址: https://gitcode.com/gh_mirrors/mi/mini_jx3_bot 在剑网三的武侠世界中,每日繁琐的任务查询、装备属性分析和金价波动监控是…

2026/7/24 22:30:56阅读更多 →
实战教程:SpringBoot3+Vue3实现JWT认证与动态路由管理

实战教程:SpringBoot3+Vue3实现JWT认证与动态路由管理

项目介绍 基于SpringBoot3、SpringSecurity、MybatisPlus、Vue3、TypeScript、Vite、ElementPlus、MySQL等技术栈实现的单体前后端分离后台管理系统;后端基于Java语言采用SpringBoot3、SpringSecurity、MybatisPlus、MySQL等主流技术栈,前端基于Vue3、T…

2026/7/24 22:30:56阅读更多 →
杰理之2dp解码 叠加IIS IN 输入音频【篇】

杰理之2dp解码 叠加IIS IN 输入音频【篇】

同时以 IIS out 输出

2026/7/24 22:30:56阅读更多 →
NoSleep防休眠工具:告别Windows自动休眠的智能解决方案

NoSleep防休眠工具:告别Windows自动休眠的智能解决方案

NoSleep防休眠工具:告别Windows自动休眠的智能解决方案 【免费下载链接】NoSleep Lightweight Windows utility to prevent screen locking 项目地址: https://gitcode.com/gh_mirrors/nos/NoSleep 你是否经历过这些令人沮丧的时刻?😫…

2026/7/24 22:30:56阅读更多 →
让你的桌面活起来:呆啵宠物DyberPet打造个性化AI陪伴体验

让你的桌面活起来:呆啵宠物DyberPet打造个性化AI陪伴体验

让你的桌面活起来:呆啵宠物DyberPet打造个性化AI陪伴体验 【免费下载链接】DyberPet Desktop Cyber Pet Framework based on PySide6 项目地址: https://gitcode.com/GitHub_Trending/dy/DyberPet 你是否曾梦想过让你喜爱的动漫角色、游戏伙伴或原创角色真正…

2026/7/24 22:28:56阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/24 19:00:40阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/24 19:00:40阅读更多 →