当前位置: 首页 > news >正文

云浮源峰网站建设工作室地址门户网站建设相关需求

云浮源峰网站建设工作室地址,门户网站建设相关需求,网站开发广告宣传,新闻发布会稿子适应场景: 主要用于帮助DBA自动化很多日常工作,包括: 数据库状态监控 性能问题诊断 日志分析 自动巡检 问题告警 系统截图: main.py from flask import Blueprint, render_template, request, flash, redirect, url_for f…

适应场景:

主要用于帮助DBA自动化很多日常工作,包括:

  • 数据库状态监控
  • 性能问题诊断
  • 日志分析
  • 自动巡检
  • 问题告警

系统截图:

main.py

from flask import Blueprint, render_template, request, flash, redirect, url_for
from flask_login import login_required
from app.models.datasource import DataSource
from app import dbbp = Blueprint('main', __name__)@bp.route('/')
@login_required
def index():datasources = DataSource.query.all()return render_template('index.html', datasources=datasources)@bp.route('/datasource', methods=['GET', 'POST'])
@login_required
def datasource_list():datasources = DataSource.query.all()return render_template('datasource/list.html', datasources=datasources)@bp.route('/datasource/add', methods=['GET', 'POST'])
@login_required
def datasource_add():if request.method == 'POST':try:datasource = DataSource(name=request.form['name'],host=request.form['host'],port=int(request.form['port']),database=request.form['database'],username=request.form['username'],password=request.form['password'])db.session.add(datasource)db.session.commit()flash('数据源添加成功', 'success')return redirect(url_for('main.datasource_list'))except Exception as e:flash(f'添加失败: {str(e)}', 'danger')return render_template('datasource/form.html')@bp.route('/datasource/edit/<int:id>', methods=['GET', 'POST'])
@login_required
def datasource_edit(id):datasource = DataSource.query.get_or_404(id)if request.method == 'POST':try:datasource.name = request.form['name']datasource.host = request.form['host']datasource.port = int(request.form['port'])datasource.database = request.form['database']datasource.username = request.form['username']if request.form['password']:  # 只在提供新密码时更新datasource.password = request.form['password']db.session.commit()flash('数据源更新成功', 'success')return redirect(url_for('main.datasource_list'))except Exception as e:flash(f'更新失败: {str(e)}', 'danger')return render_template('datasource/form.html', datasource=datasource)@bp.route('/datasource/delete/<int:id>')
@login_required
def datasource_delete(id):datasource = DataSource.query.get_or_404(id)try:db.session.delete(datasource)db.session.commit()flash('数据源删除成功', 'success')except Exception as e:flash(f'删除失败: {str(e)}', 'danger')return redirect(url_for('main.datasource_list'))@bp.route('/datasource/toggle/<int:id>')
@login_required
def datasource_toggle(id):datasource = DataSource.query.get_or_404(id)try:datasource.is_active = not datasource.is_activedb.session.commit()flash('状态更新成功', 'success')except Exception as e:flash(f'更新失败: {str(e)}', 'danger')return redirect(url_for('main.datasource_list')) 

monitor.py

from flask import Blueprint, render_template, jsonify
from flask_login import login_required
from app.models.datasource import DataSource
from app.services.monitor_service import MonitorServicebp = Blueprint('monitor', __name__, url_prefix='/monitor')@bp.route('/status/<int:id>')
@login_required
def status(id):datasource = DataSource.query.get_or_404(id)status = MonitorService.get_database_status(id)return render_template('monitor/status.html', datasource=datasource, status=status)@bp.route('/api/status/<int:id>')
@login_required
def api_status(id):status = MonitorService.get_database_status(id)return jsonify(status) 

monitor_service.py

# import pyodbc  # 暂时注释掉
from app.models.datasource import DataSource
import datetimeclass MonitorService:@staticmethoddef get_database_status(datasource_id):datasource = DataSource.query.get(datasource_id)if not datasource:return None# 模拟获取更丰富的数据库状态信息return {'basic_info': {'database_id': 1,'name': datasource.database,'state': 'ONLINE','recovery_model': 'FULL','compatibility_level': '150','collation': 'Chinese_PRC_CI_AS','created_time': '2023-01-01 08:00:00','last_backup_time': '2024-03-10 03:00:00'},'size_info': {'data_size': '1024 MB','log_size': '256 MB','total_size': '1280 MB','data_space_used': 75.5,  # 百分比'log_space_used': 45.2,   # 百分比'unallocated_space': '512 MB'},'performance': {'cpu_usage': 35.5,        # 百分比'memory_usage': 4096,      # MB'buffer_cache_hit': 98.5,  # 百分比'page_life_expectancy': 1200,  # 秒'batch_requests': 450,     # 每秒'user_connections': 85,'active_transactions': 12,'blocked_processes': 0,'deadlocks': 0,'lock_waits': 2},'io_stats': {'reads_per_sec': 250,'writes_per_sec': 120,'io_pending': 0,'io_stall_ms': 150,'read_latency_ms': 3,'write_latency_ms': 5},'availability': {'uptime': '15 days 6 hours','last_restart': '2024-02-25 00:00:00','failovers_last_24h': 0,'mirror_status': 'Not Configured'},'alerts': [{'type': 'warning','message': '数据文件空间使用率超过75%','time': datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}]}@staticmethoddef get_database_status_real(datasource_id):datasource = DataSource.query.get(datasource_id)if not datasource:return Noneconn_str = (f"DRIVER={{ODBC Driver 17 for SQL Server}};"f"SERVER={datasource.host},{datasource.port};"f"DATABASE={datasource.database};"f"UID={datasource.username};"f"PWD={datasource.password}")try:conn = pyodbc.connect(conn_str)cursor = conn.cursor()# 获取数据库状态cursor.execute("""SELECT database_id,name,state_desc,recovery_model_desc,total_size = str(size*8/1024)+' MB'FROM sys.databasesWHERE name = ?""", datasource.database)status = cursor.fetchone()# 获取性能指标cursor.execute("""SELECT TOP 1cpu_time,total_worker_time,total_physical_reads,total_logical_writes,total_logical_readsFROM sys.dm_exec_query_statsORDER BY total_worker_time DESC""")performance = cursor.fetchone()return {'status': {'database_id': status[0],'name': status[1],'state': status[2],'recovery_model': status[3],'size': status[4]},'performance': {'cpu_time': performance[0],'worker_time': performance[1],'physical_reads': performance[2],'logical_writes': performance[3],'logical_reads': performance[4]}}except Exception as e:return {'error': str(e)}finally:if 'conn' in locals():conn.close() 

http://www.dtcms.com/a/414764.html

相关文章:

  • 鸿蒙父组件处理子组件的点击事件
  • DDPM原理解析
  • 白盒密码:守护不可信环境中的密钥安全
  • 创建一个网站买卖WordPress外链方法
  • 使用 Go SDK 玩转 Docker:从容器到多架构构建
  • 原生微信小程序开发基础知识总结架构逻辑
  • 树莓派实现的自动垃圾(纸团)回收机器人
  • 【ROS2学习笔记】节点篇:节点概述
  • Java面试宝典:网络协议与Netty二
  • 自然语言处理(01)
  • 如何利用模板 + 继承的方式,形成动态多态的效果呢?
  • UE_ContrlRig
  • 江苏省城乡住房建设厅网站网站建设及维护流程图
  • ubuntu18.04安装五笔字型的方法
  • 上市公司网站建设要求成都丁香人才网官网专区
  • AI 原生应用:内容创作从 “手工作坊” 到 “智能工厂” 的革命
  • AIGC实战——交互式生成对抗网络(iGAN)
  • Scikit-learn Python机器学习 - 聚类分析算法 - DBSCAN(基于密度的噪声应用空间聚类)
  • PyTorch 实战:CIFAR-10 图像分类与网络优化
  • STM32H743-ARM例程10-WWDG
  • STM32H743-ARM例程9-IWDG看门狗
  • 什么是 mmdet3d
  • 建设银行嘉兴分行网站首页胶州网站建设dch100
  • Metal - 9. 深入剖析 3D 场景
  • 3DVG的当前面临的挑战和问题
  • 无代码企业网站开发网站建设管理和维护
  • 【C++】string类的常见接口的使用
  • 网站建设制作设计营销公司杭州亚马逊雨林探险作文
  • 东莞圆心科技网站开发哪里有做网站系统
  • 网站定位要点 有哪些方面大航母网站建设费用