资产管理系统部署及库存告警

1.需求:对电脑,办公设备,耗材等做资产盘点和整理,并对库存预警。
2.选型:snipeit

3.部署

#!/bin/bash
docker run -d -p 80:80 --name="snipeit" --env-file=snipeit.env --mount source=snipe-vol,dst=/var/lib/snipeit --privileged snipe/snipe-itsnipeit.env:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=f3dee7edd3f7
TERM=xterm
MYSQL_PORT=tcp://mysql.sit.xxx.com:3306
MYSQL_PORT_3306_TCP=tcp://mysql.sit.xxx.com:3306
MYSQL_PORT_3306_TCP_ADDR=mysql.sit.xxx.com
MYSQL_PORT_3306_TCP_PORT=3306
MYSQL_PORT_3306_TCP_PROTO=tcp
#MYSQL_NAME=/snipeit/mysql
MYSQL_ENV_MYSQL_ROOT_PASSWORD=xxx
MYSQL_ENV_MYSQL_DATABASE=snipeit
MYSQL_ENV_MYSQL_USER=snipeit
MYSQL_ENV_MYSQL_PASSWORD=xxxMYSQL_ENV_APP_URL=http://192.168.3.231:80
MYSQL_ENV_APP_TIMEZONE=Asia/Shanghai
MYSQL_ENV_APP_LOCALE=zh-CN
MYSQL_ENV_GOSU_VERSION=1.12
MYSQL_ENV_MYSQL_MAJOR=5.6
MYSQL_ENV_MYSQL_VERSION=5.6.51-1debian9
MYSQL_ROOT_PASSWORD=xxx
MYSQL_DATABASE=snipeit
MYSQL_USER=snipeit
MYSQL_PASSWORD=yuj1Iqu4Eef
MAIL_PORT_587_TCP_ADDR=c2.xxx.net
MAIL_PORT_587_TCP_PORT=465
MAIL_ENV_FROM_ADDR=it_xxx@xxx.com
MAIL_ENV_FROM_NAME=snipeit
MAIL_ENV_ENCRYPTION=tcp
MAIL_ENV_USERNAME=it_xxx@xx.com
MAIL_ENV_PASSWORD=xxx
SNIPEIT_SMTP_ENCRYPTION=sslMAIL_DRIVER=smtp
MAIL_HOST=c2.xxx.net
MAIL_PORT=465
MAIL_FROM_ADDR=it_xxx@xxx.com
MAIL_FROM_NAME=snipeit
MAIL_ENCRYPTION=tcp
MAIL_USERNAME=it_xxx@xxx.com
MAIL_PASSWORD=xxx
MAIL_ENCRYPTION=sslAPP_ENV=production
APP_DEBUG=false
APP_KEY=base64:uNRDxRe96zAcZkkchW3byQf0ukPZtaMhUI3lrC2KS/g=
APP_URL=http://192.168.3.231
APP_TIMEZONE=Asia/Shanghai
APP_LOCALE=zh-CN
HOME=/rootSN_LDAP_ENABLED=true
SN_LDAP_SERVER=ldap://ldap.xxx.com:389
SN_LDAP_BIND_DN="cn=auth,dc=xxx,dc=com"
SN_LDAP_BIND_PASSWORD=xxx
SN_LDAP_USER_BASE_DN="dc=xxx,dc=com"
SN_LDAP_USER_FILTER="(&(|(memberOf=cn=it,dc=xxx,dc=com))(&(objectClass=person)(cn=%(user)s)))"

在这里插入图片描述

4.告警(python编码)

import pymysql
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart# MySQL database configuration
db_host = 'mysql.sit.xxx.com'
db_port = 3306
db_user = 'snipeit'
db_password = 'xxx'
db_name = 'snipeit'# Email configuration
# Email configuration
smtp_server = 'c2.xxx.net'
smtp_port = 465
smtp_username = 'it_support@xxx.com'
smtp_password = 'xxx'
recipient_emails1 = ['baofeng@xxx.com']
recipient_emails2 = ['chenjiajun@xxx.com']cc_emails = ['xingxing@xxx.com','yandongmei@xxx.com']
subject1 = "固定资产库存不足告警--->>>>(上海)所有可分配数量过低请及时采购,以免影响入职!"
subject2 = "固定资产库存不足告警--->>>>(广州)所有可分配数量过低请及时采购,以免影响入职!"# SQL query to execute
#query = "SELECT COUNT(*) AS '所有可分配资产数量' FROM assets WHERE status_id=5 AND deleted_at is NULL AND assigned_to is NULL;"
query1="SELECT COUNT(*) AS '上海所有可分配资产数量' FROM assets WHERE status_id=5 AND deleted_at is NULL AND assigned_to is NULL AND company_id=1;"
query2="SELECT COUNT(*) AS '广州所有可分配资产数量' FROM assets WHERE status_id=5 AND deleted_at is NULL AND assigned_to is NULL AND company_id=2;"
# Connect to the MySQL database and execute the query
conn = pymysql.connect(host=db_host, port=db_port, user=db_user, password=db_password, db=db_name)
cursor = conn.cursor()
cursor.execute(query1)
result1 = cursor.fetchone()[0]
print(result1)
cursor.execute(query2)
result2 = cursor.fetchone()[0]
print(result2)if result1 < 10:# Send an email alertmsg = MIMEText('上海所有可分配资产数量为: {} 个,请及时补充以免影响入职员工使用。\n \n库存详情请访问:http://it.yintaerp.com/hardware?status=RTD  只读账号:read read@123456'.format(result1))msg['From'] = smtp_usernamemsg['To'] = ', '.join(recipient_emails1)msg['Cc'] = ', '.join(cc_emails)msg['Subject'] = subject1server = smtplib.SMTP_SSL(smtp_server, smtp_port)server.login(smtp_username, smtp_password)server.sendmail(smtp_username, recipient_emails1 + cc_emails, msg.as_string())server.quit()
else:print("上海库存足够,目前还剩余 {}  个固定资产".format(result))if result2 < 10:# Send an email alertmsg = MIMEText('广州所有可分配资产数量为: {} 个,请及时补充以免影响入职员工使用。\n \n库存详情请访问:http://it.yintaerp.com/hardware?status=RTD  只读账号:read read@123456'.format(result2))msg['From'] = smtp_usernamemsg['To'] = ', '.join(recipient_emails2)msg['Cc'] = ', '.join(cc_emails)msg['Subject'] = subject2server = smtplib.SMTP_SSL(smtp_server, smtp_port)server.login(smtp_username, smtp_password)server.sendmail(smtp_username, recipient_emails2 + cc_emails, msg.as_string())server.quit()
else:print("广州库存足够,目前还剩余 {}  个固定资产".format(result2))# Close the database connection
cursor.close()
conn.close()

2023-05-11 10:30:09 it_support@xxxxx.com 邮件展示:

上海所有可分配资产数量为: 1 个,请及时补充以免影响入职员工使用。

库存详情请访问:http://it.xxxxx.com/hardware?status=RTD 只读账号:read read

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/221231.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法系列篇】递归、搜索和回溯(三)

文章目录 前言什么是二叉树剪枝1. 二叉树剪枝1.1 题目要求1.2 做题思路1.3 代码实现 2. 验证二叉搜索树2.1 题目要求2.2 做题思路2.3 代码实现 3. 二叉搜索树中第k小的元素3.1 题目要求3.2 做题思路3.3 代码实现 4. 二叉树的所有路径4.1 题目要求4.2 做题思路4.3 代码实现 前言…

(八)数组和函数实践:扫雷游戏

目录 1. 扫雷游戏分析和设计 1.1 扫雷游戏的功能说明 1.2 游戏的分析和设计 1.2.1 数据结构的分析 1.2.2 文件结构设计 2. 扫雷游戏的代码实现 3. 如何生成用户版本 4. 完整的排雷程序 1. 扫雷游戏分析和设计 1.1 扫雷游戏的功能说明 1&#xff09;使用控制台实现经典…

数据结构和算法-栈

数据结构和算法-栈 文章目录 数据结构和算法-栈1. 栈的介绍2. 栈的应用场景3. 栈的快速入门3.1 用数组模拟栈3.2 课堂作业-用链表模拟栈 4. 栈实现综合计算器4.1 课堂作业-加入小括号5. 栈的三种表达式-**前缀、中缀、后缀表达式(逆波兰表达式)**5.1 前缀表达式(波兰表达式)5.1…

中低压MOS 适用于电子烟等产品—— 较小的开关损耗 过流能力好

工作原理&#xff1a; 当用户在吸嘴处抽吸时&#xff0c;气流经过进气孔&#xff0c;穿 过电路板上方的咪头&#xff0c;咪头即产生电信号&#xff0c;驱 动芯片板&#xff0c;让电池供电给雾化芯&#xff0c;雾化芯中的 发热丝将电能转化成热能&#xff0c;当温度达到雾化液…

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】

LeetCode-2487. 从链表中移除节点【栈 递归 链表 单调栈】 题目描述&#xff1a;解题思路一&#xff1a;可以将链表转为数组&#xff0c;然后从后往前遍历&#xff0c;遇到大于等于当前元素的就入栈&#xff0c;最终栈里面的元素即是最终的答案。解题思路二&#xff1a;递归&am…

【一步到位】汽车过户全攻略:轻松搞定,告别繁琐流程

校长车行是一家昆明二手车代办公司&#xff0c;今天我们要聊一聊一个让很多人头疼的问题——汽车过户。相信很多朋友在购买二手车或者需要将车辆转让给他人时&#xff0c;都会遇到这个繁琐的流程。那么&#xff0c;如何才能轻松搞定汽车过户呢&#xff1f;接下来&#xff0c;就…

(0-1)分布

假设离散型随机变量X只可能取到0、1两个值&#xff0c;它的分布律为&#xff1a; &#xff0c;其中&#xff0c; 那么称X服从参数为p的0-1分布&#xff0c;也叫两点分布。 其实上面公式就是将下面两个式子写在一起&#xff1a;

【Hive_02】查询语法

1、基础语法2、基本查询&#xff08;Select…From&#xff09;2.1 全表和特定列查询2.2 列别名2.3 Limit语句2.4 Where语句2.5 关系运算函数2.6 逻辑运算函数2.7 聚合函数 3、分组3.1 Group By语句3.2 Having语句3.3 Join语句&#xff08;1&#xff09;等值与不等值Join&#x…

SUPER-ADAM: Faster and Universal Framework of Adaptive Gradients

这周看了啥&#xff1a; 本周主要来看看别人是如何证明收敛的&#xff0c;围绕算法SUPER-ADAM 的更新过程和论文后面的证明&#xff0c;&#xff08;这篇证明比上周的亲切多了&#xff0c;我哭死&#xff09;仔细看了证明每一步的推导&#xff08;至于作者如何想出的&#xff…

verilog基础语法之比较器

逻辑运算符以及逻辑电路概述 逻辑运算符常用于条件判断语句&#xff0c;输出为布尔值True/False。逻辑运算符是基于比较器构造的。比较器电路是产生逻辑比较的本质&#xff1b;比较器电路的复杂度与位宽和比较类型相关&#xff1b;一般情况下可以先构造基本比较器&#xff0c;…

原生Html 引入element UI + vue3 表单校验设置

效果&#xff1a; 提交时&#xff0c;检验结果展示 html源码 <!DOCTYPE html> <html> <!--带搜索输入框下拉弹窗 --> <head><meta charset"UTF-8"><!-- import Vue before Element --><script src"../js/vue3.3.8/vu…

jmeter,通过Ant插件生成html报告,展示接口详细信息

一、下载Ant 下载地址&#xff1a;Apache Ant - 二进制发行版 二、安装 1、Ant环境变量 解压Ant目录&#xff1b;配置系统环境变量&#xff0c;添加ANT_PATH&#xff0c;值为D:\Software\Ant_plugIn\apache-ant-1.10.14配置系统环境变量Path&#xff0c;添加Ant路径 %ANT_H…

Unity之OpenXR+XR Interaction Toolkit接入Meta Quest3

前言 随着备受期待的Meta Quest 3与今年10月10日发布,这款来自Meta的下一代VR游戏头戴设备承诺将彻底改变您的游戏方式。 Meta Quest 3,玩家只需轻松一触即可在虚拟现实和真实世界之间无缝切换,无需摘下头戴设备进行快速现实检查。 Meta Quest 3最引人注目的特点之一是其能…

webpack学习-5.代码分离

webpack学习-5.代码分离 1.入口起点2.防止重复2.1 入口依赖2.2 SplitChunksPlugin 3.动态导入3.1 使用符合 ECMAScript 提案 的 import() 语法3.2 使用 webpack 特定的 require.ensure 4.预获取/预加载模块5.分析bundle6.总结 1.入口起点 代码分离是 webpack 中最引人注目的特…

AIGC - 环境搭建

一. 硬件环境 1. 超微7048主板&#xff0c;最多可搭载4块GPU 2. 2个Intel的 Xen至强 14核 CPU 3. 目前安装了一块Nvidia 的P40 GPU&#xff0c;后续根据需要还最多可以扩展3块GPU 4. 4T机械 2T Nvme固态&#xff0c; 5. 4条64G DDR4内存条&#xff0c;共 196G内存…

QT多项目管理

.pro文件配置解释&#xff1a;​​​​​​ Qt 中的多项目管理_qt子目录项目-CSDN博客Qt 模块化开发之 pro 子项目开发_qt 子项目-CSDN博客关于Qt编译库&#xff08;1&#xff09;&#xff1a;在子项目中编译动态库并且使用_qt编译动态库后配置qt-CSDN博客QT release下的编译…

涵盖多种功能,龙讯旷腾Module第六期:输运性质

Module是什么 在PWmat的基础功能上&#xff0c;我们针对用户的使用需求开发了一些顶层模块&#xff08;Module&#xff09;。这些Module中的一部分是与已有的优秀工具的接口&#xff0c;一部分是以PWmat的计算结果为基础得到实际需要的物理量&#xff0c;一部分则是为特定的计…

排序算法(二)-冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序

排序算法(二) 前面介绍了排序算法的时间复杂度和空间复杂数据结构与算法—排序算法&#xff08;一&#xff09;时间复杂度和空间复杂度介绍-CSDN博客&#xff0c;这次介绍各种排序算法——冒泡排序、选择排序、插入排序、希尔排序、快速排序、归并排序、基数排序。 文章目录 排…

排序-归并排序与计数排序

文章目录 一、归并排序1、概念2、过程3、代码实现4、复杂度5、稳定性 二、 计数排序1、思路2、代码实现3、复杂度&#xff1a;4、稳定性 一、归并排序 1、概念 是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已…

关键点检测☞png格式换bmp,且labelme标注的json中imagePath同步修改格式

import os import cv2 import jsondef bmp2jpg(in_img_path, out_dir_name): # .png -> .bmp# img = cv2.imread(in_img_path) # 彩色图片,位深24img =</