pull/156/head
midoks 3 years ago
parent 7ca8d687d7
commit 9a4336935b
  1. 8
      plugins/postgresql/conf/postgresql.conf
  2. 4
      plugins/postgresql/index.html
  3. 65
      plugins/postgresql/index.py
  4. 27
      plugins/postgresql/js/postgresql.js

@ -10,3 +10,11 @@ log_timezone = 'Asia/Shanghai'
datestyle = 'iso, ymd'
timezone = 'Asia/Shanghai'
default_text_search_config = 'pg_catalog.simple'
logging_collector = on
log_destination = 'stderr'
log_directory = '{$APP_PATH}/logs'
log_filename = 'postgresql-%Y-%m-%d.log'
log_statement = all
log_min_duration_statement = 5000

@ -8,8 +8,8 @@
<p onclick="pluginConfigTpl('postgresql');">配置文件</p>
<!--<p onclick="myDbPos();">存储位置</p> -->
<p onclick="pgPort();">端口</p>
<!-- <p onclick="runInfo();">当前状态</p>
<p onclick="myPerfOpt();">性能优化</p> -->
<p onclick="runInfo();">当前状态</p>
<p onclick="myPerfOpt();">性能优化</p>
<p onclick="pluginLogs('postgresql',$('.plugin_version').attr('version'),'run_log');">日志</p>
<!--<p onclick="pluginLogs('postgresql',$('.plugin_version').attr('version'),'show_log');">慢日志</p>-->
<p onclick="dbList()">管理列表</p>

@ -470,30 +470,51 @@ def runInfo():
if status(version) == 'stop':
return mw.returnJson(False, 'PG未启动', [])
db = pMysqlDb()
data = db.query('show global status')
gets = ['Max_used_connections', 'Com_commit', 'Com_rollback', 'Questions', 'Innodb_buffer_pool_reads', 'Innodb_buffer_pool_read_requests', 'Key_reads', 'Key_read_requests', 'Key_writes',
'Key_write_requests', 'Qcache_hits', 'Qcache_inserts', 'Bytes_received', 'Bytes_sent', 'Aborted_clients', 'Aborted_connects',
'Created_tmp_disk_tables', 'Created_tmp_tables', 'Innodb_buffer_pool_pages_dirty', 'Opened_files', 'Open_tables', 'Opened_tables', 'Select_full_join',
'Select_range_check', 'Sort_merge_passes', 'Table_locks_waited', 'Threads_cached', 'Threads_connected', 'Threads_created', 'Threads_running', 'Connections', 'Uptime']
db = pgDb()
# data = db.query('show global status')
data_directory = getServerDir() + "/data"
port = getPgPort()
result = {}
# print(data)
for d in data:
vname = d["Variable_name"]
for g in gets:
if vname == g:
result[g] = d["Value"]
# print(result, int(result['Uptime']))
result['Run'] = int(time.time()) - int(result['Uptime'])
tmp = db.query('show master status')
try:
result['File'] = tmp[0]["File"]
result['Position'] = tmp[0]["Position"]
except:
result['File'] = 'OFF'
result['Position'] = 'OFF'
result['uptime'] = mw.execShell(
'''cat {}/postmaster.pid |sed -n 3p '''.format(data_directory))[0]
timestamp = result['uptime']
time_local = time.localtime(int(timestamp))
dt = time.strftime("%Y-%m-%d %H:%M:%S", time_local)
result['uptime'] = dt
result['progress_num'] = mw.execShell(
"ps -ef |grep postgres |wc -l")[0].strip()
result['pid'] = mw.execShell(
'''cat {}/postmaster.pid |sed -n 1p '''.format(data_directory))[0].strip()
res = db.query(
'SELECT count(*) FROM pg_stat_activity WHERE NOT pid=pg_backend_pid()')
result['connections'] = res[0][0]
res = db.query("select pg_size_pretty(pg_database_size('postgres'))")
result['pg_size'] = res[0][0]
result['pg_mem'] = mw.execShell(
'''cat /proc/%s/status|grep VmRSS|awk -F: '{print $2}' ''' % (result['pid']))[0]
result['pg_vm_lock'] = mw.execShell(
'''cat /proc/%s/status|grep VmLck|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
result['pg_vm_high'] = mw.execShell(
'''cat /proc/%s/status|grep VmHWM|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
result['pg_vm_data_size'] = mw.execShell(
'''cat /proc/%s/status|grep VmData|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
result['pg_vm_sk_size'] = mw.execShell(
'''cat /proc/%s/status|grep VmStk|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
result['pg_vm_code_size'] = mw.execShell(
'''cat /proc/%s/status|grep VmExe|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
result['pg_vm_lib_size'] = mw.execShell(
'''cat /proc/%s/status|grep VmLib|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
result['pg_vm_swap_size'] = mw.execShell(
'''cat /proc/%s/status|grep VmSwap|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
result['pg_vm_page_size'] = mw.execShell(
'''cat /proc/%s/status|grep VmPTE|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
result['pg_sigq'] = mw.execShell(
'''cat /proc/%s/status|grep SigQ|awk -F: '{print $2}' ''' % (result['pid'].strip()))[0]
return mw.getJson(result)

@ -81,26 +81,23 @@ function runInfo(){
if (cache_size == 'NaN%') cache_size = 'OFF';
var Con = '<div class="divtable"><table class="table table-hover table-bordered" style="margin-bottom:10px;background-color:#fafafa">\
<tbody>\
<tr><th>启动时间</th><td>' + getLocalTime(rdata.Run) + '</td><th></th><td>' + parseInt(rdata.Questions / rdata.Uptime) + '</td></tr>\
<tr><th>总连接次数</th><td>' + rdata.Connections + '</td><th></th><td>' + parseInt((parseInt(rdata.Com_commit) + parseInt(rdata.Com_rollback)) / rdata.Uptime) + '</td></tr>\
<tr><th>发送</th><td>' + toSize(rdata.Bytes_sent) + '</td><th>File</th><td>' + rdata.File + '</td></tr>\
<tr><th>接收</th><td>' + toSize(rdata.Bytes_received) + '</td><th>Position</th><td>' + rdata.Position + '</td></tr>\
<tr><th>启动时间</th><td>' + rdata.uptime + '</td><th></th><td>' +rdata.progress_num+ '</td></tr>\
<tr><th>总连接次数</th><td>' + rdata.connections + '</td><th>PID</th><td>' +rdata.pid+ '</td></tr>\
<tr><th>占用空间</th><td>' + rdata.pg_size + '</td><th></th><td>' +rdata.pg_mem+ '</td></tr>\
</tbody>\
</table>\
<table class="table table-hover table-bordered">\
<thead style="display:none;"><th></th><th></th><th></th><th></th></thead>\
<tbody>\
<tr><th>活动/峰值连接数</th><td>' + rdata.Threads_running + '/' + rdata.Max_used_connections + '</td><td colspan="2">,max_connections</td></tr>\
<tr><th>线程缓存命中率</th><td>' + ((1 - rdata.Threads_created / rdata.Connections) * 100).toFixed(2) + '%</td><td colspan="2">,thread_cache_size</td></tr>\
<tr><th>索引命中率</th><td>' + ((1 - rdata.Key_reads / rdata.Key_read_requests) * 100).toFixed(2) + '%</td><td colspan="2">,key_buffer_size</td></tr>\
<tr><th>Innodb索引命中率</th><td>' + ((1 - rdata.Innodb_buffer_pool_reads / rdata.Innodb_buffer_pool_read_requests) * 100).toFixed(2) + '%</td><td colspan="2">,innodb_buffer_pool_size</td></tr>\
<tr><th>查询缓存命中率</th><td>' + cache_size + '</td><td colspan="2">' + lan.soft.mysql_status_ps5 + '</td></tr>\
<tr><th>创建临时表到磁盘</th><td>' + ((rdata.Created_tmp_disk_tables / rdata.Created_tmp_tables) * 100).toFixed(2) + '%</td><td colspan="2">,tmp_table_size</td></tr>\
<tr><th>已打开的表</th><td>' + rdata.Open_tables + '</td><td colspan="2">,table_cache_size</td></tr>\
<tr><th>没有使用索引的量</th><td>' + rdata.Select_full_join + '</td><td colspan="2">0,</td></tr>\
<tr><th>没有索引的JOIN量</th><td>' + rdata.Select_range_check + '</td><td colspan="2">0,</td></tr>\
<tr><th>排序后的合并次数</th><td>' + rdata.Sort_merge_passes + '</td><td colspan="2">,sort_buffer_size</td></tr>\
<tr><th>锁表次数</th><td>' + rdata.Table_locks_waited + '</td><td colspan="2">,</td></tr>\
<tr><th>表进程已经锁住的物理内存的大小</th><td>' + rdata.pg_vm_lock + '</td></tr>\
<tr><th>数据库分配到物理内存的峰值</th><td>' + rdata.pg_vm_high + '</td></tr>\
<tr><th>进程数据段的大小</th><td>' + rdata.pg_vm_data_size + '</td></tr>\
<tr><th>进程堆栈段的大小</th><td>' + rdata.pg_vm_sk_size + '</td></tr>\
<tr><th>进程代码的大小</th><td>' + rdata.pg_vm_code_size + '</td></tr>\
<tr><th>进程所使用LIB库的大小</th><td>' + rdata.pg_vm_lib_size + '</td></tr>\
<tr><th>进程占用Swap的大小</th><td>' + rdata.pg_vm_swap_size + '</td></tr>\
<tr><th>占用的页表的大小</th><td>' + rdata.pg_vm_page_size + '</td></tr>\
<tr><th>当前待处理信号的个数</th><td>' + rdata.pg_sigq + '</td></tr>\
<tbody>\
</table></div>';
$(".soft-man-con").html(Con);

Loading…
Cancel
Save