1. 程式人生 > >用python 寫的一個oracle 服務響應時間的實時監控web 小工具

用python 寫的一個oracle 服務響應時間的實時監控web 小工具

主要工具:

python,flask,SQLLITE (我沒有選擇mysql,sqllite 夠用了,本來就是一個小功能,我喜歡簡單)

主要功能:

監控oracle 10g,11g 資料庫平均響應時間,通過實施採集資料庫rt 並生成趨勢圖,方便客戶通過大屏簡單明瞭,快速檢視但前系統的執行狀態,尤其是判斷是否由於當前業務系統響應慢是否由於資料庫異常導致;

#############################資料庫採集程式碼:########################################

# -*- coding: utf-8 -*-
# @Time    : 2018/7/13 14:55
# @Author  : 
[email protected]
# @File : monitor.py # @Software: PyCharm import time import MySQLdb as mysql import cx_Oracle import datetime import sqlite3 # 連線到SQLite資料庫 # 資料庫檔案是test.db # 如果檔案不存在,會自動在當前目錄建立: conn = sqlite3.connect('test.db',check_same_thread=False) # 建立一個Cursor: cursor = conn.cursor() # 執行一條SQL語句,建立user表: try: cursor.execute(' CREATE TABLE `rt` ( `time` bigint primary key, `rt` double)') #源資料表 # CREATE TABLE `rt` ( `time` varchar(20) DEFAULT NULL, `rt` double) except Exception,e: print Exception,":",e #也可以使用mysql #db = mysql.connect(user="root", passwd="mysql", db="test", host="10.80.18.241") #db.autocommit(True) #db.ping(True) #cur = db.cursor() db2 = cx_Oracle.connect('system1', 'lixora', '100.106.102.60:1521/lixora') cur2 =db2.cursor() def getRt(): sql2 = '''select round(value ,2) from V$SYSMETRIC where METRIC_NAME in ('SQL Service Response Time')''' cur2.execute(sql2) out1=cur2.fetchall() print out1[0][0] now = datetime.datetime.now() now = int(now.strftime("%H%M%S")) print now sql ="insert into rt(time,rt) values (%d,%f)" % (now,out1[0][0]) try: cursor.execute(sql) conn.commit() except Exception,e: print Exception, ":", e # print 'ok' while True:   #採集端自動定時取數時間3秒 time.sleep(3) getRt() # cursor.execute('select * from rt') # values = cursor.fetchall() # print values[0]

#############################web server 程式碼:########################################

# -*- coding: utf-8 -*-
# @Time    : 2018/7/16 20:00
# @Author  : [email protected]
# @File    : flask_web.py
# @Software: PyCharm

import sqlite3
import json
from flask import Flask, request, render_template

app = Flask(__name__)
db = sqlite3.connect('test.db',check_same_thread=False)
c = db.cursor()

@app.route('/', methods=['GET', 'POST'])
def hello():
    c.execute('select time,rt from rt')
    ones = c.fetchall()
    print ones
    return render_template('mon.html', data=json.dumps(ones))

@app.route('/new', methods=['GET'])
def getnew():
    c.execute('select time,rt from rt order by TIME desc limit 1')
    v = c.fetchone()
    top = [v[0], v[1]]
    print top
    return json.dumps(top)


app.run(port=8888,debug=True)


########################html mon.html 模板檔案###########################################
<!DOCTYPE HTML>
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <titlte>Lixora's DB RT Trend</titlte>
  <script type="text/javascript" src="http://cdn.hcharts.cn/highstock/highstock.js"></script>
  <script type="text/javascript" src="http://cdn.hcharts.cn/jquery/jquery-1.8.3.min.js"></script>
  <script type="text/javascript" src="http://cdn.hcharts.cn/highcharts/highcharts.js"></script>
  <!--<script type="text/javascript" src="http://cdn.hcharts.cn/highcharts/funnel.js"></script>-->
  <script type="text/javascript" src="http://cdn.hcharts.cn/highcharts/modules/exporting.js"></script>
  <script type="text/javascript">
  var data={{data}};
  //建立圖表
  var chart;
  $(document).ready(function() {
   Highcharts.setOptions({
    global:{
        useUTC:false
    }
   })

   chart = new Highcharts.StockChart( {
    chart : {
     renderTo : 'container',
     events : {
      load : st// 定時器
     }
    },
    rangeSelector: {
      inputEnabled: $('#container').width() > 480,
        selected: 1
    },
    exporting:{
     enabled:true
    },
    title : {
     text : 'DB Response Time Per Second'
    },
    series : [ {
     name: 'DB RT',
     data : data,
     type: 'spline',
     }]
   });
  });

  //2秒鐘重新整理一次資料
  function st() {
   setInterval("getData()", 3000);
  }

  //動態更新圖表資料
  function getData() {
   $.ajax({
      type: "get",
      url: "/new",
      dataType: "json",
      success : function(data){
      chart.series[0].addPoint(data,true,true);
      }
    });
  }
  </script>
 </head>
 <body>
<div id="container" ></div>
 </body>
</html>

############################################demo 效果圖##################################

相關推薦

python 一個oracle 服務響應時間實時監控web 工具

主要工具: python,flask,SQLLITE (我沒有選擇mysql,sqllite 夠用了,本來就是一個小功能,我喜歡簡單) 主要功能: 監控oracle 10g,11g 資料庫平均響應時間,通過實施採集資料庫rt 並生成趨勢圖,方便客戶通過大屏簡單明瞭,

一個python的websocket服務

由於要在頁面上呼叫後臺的一個shell程式,但是這個shell執行時間很長,如果非同步獲取shell的輸出?而不必漫長的等待shell執行完畢才會一下把資料全部輸出? 我們知道原生的http協議不可能完成這個要求,除非你把輸出更新到一個文本里,然後用js倫詢去取,這不扯淡嗎

Python一個批量生成賬號的函數(戶控制數據長度、數據條數)

shuf open 小寫 長度 數據 ase 函數 用戶控制 app # 1、寫一個函數,批量生成一些註冊使用的賬號:[email protected]/* */,長度由用戶輸入,產生多少條也由用戶輸入,用戶名不能重復,用戶名必須由大寫字母、小寫字母、數字組成

Python一個遊戲

python 小腳本 剛學Python時間不長,但也知道了一點,看別人的參考寫了一個猜數字小遊戲,也算是禹學於樂吧。#!/usr/bin/env python #coding=utf-8

python一個簡單的excel表格獲取當時的linux系統信息

psutil 生成 之前 建立 set ces ext 流量 關閉 最近在學習excel表格的制作,順便結合之前學習的內容,利用python的兩個模板,分別是獲取系統信息的psutil,和生成excel表格的xlsxwriter。利用這兩個模板將生成一個簡單的excel表格

python一個九九乘法表-2月19日/2018

九九乘法 while -c pos ont 九九 pytho 九九乘法表 font first = 1 while first<=9:   sec=1   while sec<=first:     print(str(sec),"x",str(first),

python一個restful API

python restful # -*- coding: utf-8 -*- # 作者: 煮酒品茶 """ package.module ~~~~~~~~~~~~~~ python實現的圖書的一個restful api. 參考restful設計指南 URL:

python一個微信聊天機器人

python wechat 聊天機器人 # -*- coding: utf-8 -*- """ package.module ~~~~~~~~~~~~~~ 一個微信機器人程序 微信客戶端itchat: http://itchat.readthed

python一個微信跳一跳外掛,瞬間稱霸朋友圈

python 微信 跳一跳 爬蟲12月28日,微信宣布,小程序增加了新的類目:小遊戲,同時上線小遊戲 你們跳的再好,在毫無心理波動的程序面前都是渣渣。 剛剛會python的小白想玩怎麽辦? 下有詳細的教程,哈哈,包教會不收任何的費用。 感受一下被支配的恐懼吧: 使用工具1.python3.6 2.adb 3

Python 一個TCP 伺服器和TCP代理

TCP伺服器 import socket import threading bind_ip="0.0.0.0" bind_port=9999 server=socket.socket(socket.AF_INET,socket.SOCK_STREAM) server.bind((bind_i

Python一個語音播放軟體

單位經常使用廣播進行臨時事項的通知(將文字轉換為語音然後通過功放廣播),但是市面上多數語音播放軟體都是收費的,要麼發音失真,要麼不夠穩定——經常出現莫名其妙的故障,容易給工作帶來被動。學Python這麼久不如動手寫一款自己的語音廣播軟體,即使發生故障也可以自行排除。 介面設計 在開始動

python一個抽獎程式

第一次使用python寫程式,確實比C/C++之類方便許多。既然這個抽獎的資料不大,對效率要求並不高,所以採用python寫,更加簡潔、清晰、方便。 1.用到的模組 生成隨機數的模組random 用來讀取excel表格的模組xlrd 2.思路:首先開啟e

python一個程式,解決買水果的問題?

問題: 商店總共有三種水果,香蕉/蘋果/葡萄,單價分別為3.5/5.0/3.0元/500克。 寫一個小程式實現:          1、輸出一個選單:列印每種水果的價格:          2、尋問客戶欲購買水果?          3、客戶想購買的克數?    

Tkinter專案:Python一個地址收藏管理工具,迅速提高你的工作效率

如何管理雜亂的電腦桌面和一大堆的瀏覽器收藏網址?我用python寫了一個工具,迅速提高工作效率。 工作了一段時間發現,電腦桌面上已經滿屏的常用軟體、常用專案資料夾的快捷方式,一大堆的常用文件,瀏覽器上收藏的工作網址更是有100+,通常想開啟一個文件、網址要尋找半

究極大福利!Python一個抖音漂亮姐姐發掘器!原始碼送給你!

最近沉迷於抖音無法自拔,常常連續花好幾個小時在抖音漂亮小姐姐身上。手動尋找費時費力,為了高效、直接地找到漂亮小姐姐,我用 Python + ADB 做了一個 Python 抖音機器人 Douyin-Bot。自動翻頁+顏值識別,瞬間覺得關注列表不夠用了!原理開啟《抖音短視訊》APP,進入主介面獲取手機截圖,並對

python一個簡單的詞法分析器

編譯原理老師要求寫一個java的詞法分析器,想了想決定用python寫一個。 目標 能識別出變數,數字,運算子,界符和關鍵字,用excel表打印出來。 有了目標,想想要怎麼實現詞法分析器。 1.先進行預處理,把註釋,多餘的空格,空行去掉。 2.一行一行掃

python一個GitHub Trending Api

時間 sin 所有 運行 返回 gap 文件 clone con GitHub 給了開發者相當豐富的 API 接口 https://developer.github.com/v3/,包括認證,搜索,活動等接口,但就是沒有提供獲取 Trending 的接口。因此,需要自己來

python一個簡單的推薦系統

前言 在上篇文章豆瓣電影,電視劇DM實戰中提及到,我和室友們產生了劇荒,萌生出要做一個個人用的推薦系統,解決劇荒的問題,經過一輪的死纏爛打,這個個人推薦系統終於成型了。 今天來分享一下心得,對此感興趣的朋友可以自己對著寫一個。 傳統推薦系統演算法 首先介紹一下傳統

python一個簡單計算器

1、利用迴圈新增按鈕部件,及給每個按鈕設定訊號/槽2、給按鈕設定固定大小:button.setFixedSize(QtCore.QSize(60,30))3、取事件的的傳送者(此例為各個按鈕)的文字: self.sender().text()#簡易計算器 import sys

比12306快!Python一個火車票檢視器~

當你準備出去玩,想查詢一下火車票資訊的時候,還在用12306官網嗎?下面我們用 Python 寫一個命令列版的火車票檢視器, 只要在命令列敲一行命令就能獲得你想要的火車票資訊! 一、實驗簡介 1.1 知識點 Python3 基礎知識的綜合運用 docopt、requests 及 prett