# coding: UTF-8
import platform
from _utils.patrol2 import run_cmd, data_format, report_format
import os, sys, re, json, copy
import stat
import socket
import stat
import sqlite3 #
# conn=sqlite3.connect(':memory:')
if os.path.exists('was_patrol.db'):
os.remove('was_patrol.db')
conn = sqlite3.connect('was_patrol.db')
c = conn.cursor()
c.execute('''CREATE TABLE WAS
(ID INT PRIMARY KEY NOT NULL,
CELL CHAR(50),
HOME CHAR(50),
CLUSTER CHAR(50),
NODE CHAR(50),
SERVER CHAR(50),
STATE CHAR(50),
PORTS CHAR(500),
HOST CHAR(50));''')
print "Table created successfully"
conn.commit() version = version.split('.')[0]
content = """import sys, java
def get_names(type,parent_obj=None):
if not parent_obj:
obj_list = AdminConfig.list(type)
else:
obj_list = AdminConfig.list(type, parent_obj)
if len(obj_list) == 0:
return [],None
obj_lists = obj_list.split(lineSeparator)
names=[]
for obj in obj_lists:
name = AdminConfig.showAttribute(obj, "name")
names.append(name)
return names,obj_lists lineSeparator = java.lang.System.getProperty('line.separator') cell_names,cells=get_names("Cell")
reports = []
print cell_names,cells
for cell in cells:
cell_name=AdminConfig.showAttribute(cell, "name") cluster_names,clusters=get_names("ServerCluster",parent_obj=cell)
node_names, nodes = get_names("Node", parent_obj=cell) for node in nodes:
nname = AdminConfig.showAttribute(node, "name")
server_names, servers = get_names("Server", parent_obj=node)
hostname= AdminConfig.showAttribute(node, "hostName") print 'node:',node
print 'servers:',servers
for server in servers:
type=AdminConfig.showAttribute(server, "serverType")
if type=='NODE_AGENT':
continue
sname = AdminConfig.showAttribute(server, "name")
cname = AdminConfig.showAttribute(server, "clusterName") runserv = AdminConfig.getObjectName(server)
if len(runserv) > 0:
state = AdminControl.getAttribute(runserv, "state")
else:
state='down' other_port=id=''
if int('{version}')>=6:
ports=AdminTask.listServerPorts(sname, '[-nodeName '+nname+']')
else:
ports=[]
endpoints=AdminConfig.list('EndPoint', server).split(lineSeparator)
print endpoints
#endpoints=AdminConfig.list('EndPoint', AdminConfig.getid( '/Cell:'+cell_name+'/Node:'+nname+'/Server:'+sname+'/')).split(lineSeparator)
for endpoint in endpoints[1:]:
end_result=AdminConfig.show(endpoint).split(lineSeparator)
print end_result
if end_result:
ports.append(end_result[1].split()[1].split(']')[0])
ports=','.join(ports)
print ports id=AdminConfig.getid( '/Cell:'+cell_name+'/VirtualHost:default_host/')
if not id:
id=AdminConfig.getid( '/Cell:'+cell_name+'/VirtualHost:admin_host/')
if id:
other_port=AdminConfig.list('HostAlias',id ).split(lineSeparator)[0]
other_port=AdminConfig.showAttribute(other_port,'port')
if not cname:
# no cluster and has server
reports.append({{'cell': cell_name, 'cluster': 'N/A', 'server': sname, 'node': nname,'obj':server,'state':state,'ports':ports,'host':hostname,'other_port':other_port}})
else:
# has cluster and node
reports.append({{'cell': cell_name, 'cluster': cname, 'server': sname, 'node': nname,
'obj': server,'state':state,'ports':ports,'host':hostname,'other_port':other_port}})
print 'clusters',clusters
reports1=[]
if clusters:
for cluster in clusters:
cluster_name = AdminConfig.showAttribute(cluster, "name")
memberList = AdminConfig.showAttribute(cluster, "members") if memberList!='[]' and memberList!=[] :
#has cluster and node
#pass
members = memberList[1:len(memberList)-1].split(" ")
for member in members:
mname = AdminConfig.showAttribute(member, "memberName")
nname = AdminConfig.showAttribute(member, "nodeName")
reports1.append({{'cell':cell_name,'cluster':cluster_name,'server':mname,'node':nname,'obj':server}})
else:
# has cluster and no node
reports1.append({{'cell':cell_name,'cluster':cluster_name,'server':'N/A','node':'N/A','obj':None}}) print "==data=="
print reports
print "==data=="
print "==datas=="
print reports1
print "==datas=="
""".format(version=version) if 'Windows' in platform.system():
tmp_script = 'C:\\patrol.py'
else:
tmp_script = '/tmp/patrol.py'
with open(tmp_script, 'w') as f:
f.write(content)
os.chmod(tmp_script, stat.S_IRWXU | stat.S_IRGRP | stat.S_IROTH) hostname = platform.node() was_homes = was_home
datas = {'cell': [], 'cluster': [], 'node': [], 'server': []}
all_reports = []
cell_reports = []
cluster_reports = []
server_reports = []
resource = []
count = 0
for was_home in was_homes.split(','):
run_script = os.path.join('{}'.format(was_home), 'bin/wsadmin.sh')
if mw_password:
password = '-password {}'.format(mw_password)
else:
password = '' if 'Windows' in platform.system():
run_script = os.path.join('{}'.format(was_home), 'bin', 'wsadmin.bat')
cmd = '"{}" -username {} {} -lang jython -f {}'.format(run_script, mw_user, password,
tmp_script)
else:
cmd = 'su {} -c "{} -username {} {} -lang jython -f {}"'.format(os_was_user,
run_script, mw_user,
password,
tmp_script)
print cmd
code, out = run_cmd(cmd)
print out
if 'Ensure that user and password are correct' in out:
print '请确认输入的用户名和密码是否正确'
sys.exit(1)
if code:
print out
sys.exit(1)
try:
res = re.findall(r'==data==([\s\S]*)==data==', out)
if not res:
print '无输出'
sys.exit(1)
res = eval(res[0].strip()) res1 = re.findall(r'==datas==([\s\S]*)==datas==', out)
if not res1:
print '无输出'
sys.exit(1)
res1 = eval(res1[0].strip())
print '集群信息', res1 except Exception as e:
print e
sys.exit(1)
resource.append({'res': res, 'washome': was_home}) cell_name = None
for i in res:
cell_name = i['cell']
if i['cell'] not in datas['cell']:
datas['cell'].append(i['cell'])
if i['cluster'] not in datas['cluster']:
datas['cluster'].append(i['cluster'])
if i['node'] not in datas['node']:
datas['node'].append(i['node'])
if i['server'] not in datas['server']:
datas['server'].append(i['server']) c = conn.cursor() port = ''
ports = i.get('ports', '')
if int(version) >= 6:
for j in ports.split('\n'):
if j.startswith('[[WC_adminhost ') and i['server'] == 'dmgr':
port = j.rstrip('] ]]] ]').split(' ')[-1]
if not port:
for j in ports.split('\n'):
if j.startswith('[[WC_defaulthost '):
port = j.rstrip('] ]]] ]').split(' ')[-1]
if not port:
for j in ports.split('\n'):
if j.startswith('[[WEBSERVER_ADDRESS '):
port = j.rstrip('] ]]] ]').split(' ')[-1]
else:
print '端点:', ports
import requests for j in ports.split(','):
print j
try:
res = requests.get('http://localhost:{}/snoop'.format(j))
if res.status_code == 200:
port = j
break
if not port:
res = requests.get('https://localhost:{}/snoop'.format(j), is_verify=False)
if res.status_code == 200:
port = j
break
except:
pass
if not port:
port = ports.split(',')[0] print 'port',port state= i.get('state','')
if int(version) <= 5:
cmd = "netstat -Aan|grep -w '*.{}'".format(port)
code, res = run_cmd(cmd)
if res and 'LISTEN' in res.split()[-1]:
state = 'STARTED' c.execute("INSERT INTO WAS (ID,CELL,HOME,CLUSTER,NODE,SERVER,STATE,PORTS,HOST) \
VALUES ({}, '{}', '{}', '{}', '{}','{}','{}','{}','{}' )".format(count,
i['cell'],
was_home,
i['cluster'],
i['node'],
i['server'],state,
port,
i.get('host',
'')))
count += 1 conn.commit()
print datas cursor = conn.execute("SELECT distinct CELL from WAS")
cells = []
for row in cursor:
cell = row[0]
if cell not in cells:
cells.append(cell)
cell_reports.append(data_format('单元名称', cell, alert=0, group_name="单元情况"))
cell_num = len(cells)
if cell_num == 1:
all_reports.append(report_format("{}".format(hostname), cell_reports))
else:
all_reports.append(report_format("{}".format(hostname), childs=cell_reports)) cell_clusters = []
cell_cluster_report = {}
cursor = conn.execute("SELECT id, cell, home,cluster,node, server,state,ports,host from WAS")
for row in cursor:
cell = row[1]
node = row[4]
server = row[5]
home = row[2]
cluster = row[3]
if cell_num == 1:
cell_cluster = '{}'.format(hostname)
else:
cell_cluster = '{}/{}'.format(hostname, cell)
if cell_cluster not in cell_clusters:
cell_cluster_report.update({cell_cluster: []})
cell_clusters.append(cell_cluster)
if cluster not in cell_cluster_report[cell_cluster]:
cell_cluster_report[cell_cluster].append(cluster) reports = []
for k, v in cell_cluster_report.items():
for i in v:
reports.append(data_format('集群名称', i, alert=0, group_name="集群名称"))
all_reports.append(report_format(k, childs=reports)) reports = json.dumps(all_reports)
print reports

  

sqlite处理数据的更多相关文章

  1. Android 一键直接查看Sqlite数据库数据

    转自:http://www.cnblogs.com/trinea/archive/2012/11/16/2773656.html 本文主要介绍Android开发中如何一键直接查看sqlite数据库中的 ...

  2. 解决sqlite删除数据后,文件大小不变问题(VACUUM)

    删除表格的全部数据: DELETE FROM [Name] 当在sqlite中删除了大量数据后,数据库文件的大小还是那样,没有变.原因是:从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的” ...

  3. Python读取和处理文件后缀为".sqlite"的数据文件

    最近在弄一个项目分析的时候,看到有一个后缀为”.sqlite”的数据文件,由于以前没怎么接触过,就想着怎么用python来打开并进行数据分析与处理,于是稍微研究了一下. SQLite是一款非常流行的关 ...

  4. 解决sqlite删除数据或者表后,文件大小不变的问题

    原因分析: sqlite采用的是变长纪录存储,当你从Sqlite删除数据后,未使用的磁盘空间被添加到一个内在的"空闲列表"中用于存储你下次插入的数据,用于提高效率,磁盘空间并没有丢 ...

  5. 解决sqlite删除数据后,文件大小不变问题 转载

    原文地址:http://blog.csdn.net/yangchun1213/article/details/7656146   说了这么多,没进主题,我的主题是给Sqlite在删除数据后擦屁股. 大 ...

  6. Android开发之利用SQLite进行数据存储

    Android开发之利用SQLite进行数据存储 Android开发之利用SQLite进行数据存储 SQLite数据库简单介绍 Android中怎样使用SQLite 1 创建SQLiteOpenHel ...

  7. sqlite删除数据

    sqlite删除数据 某日, 在使用sqlite的时候发现查询速度极慢, 查看了一下文件大小, sqlite数据库文件已经达到了 22G! 对于一个文件数据库来说, 已经相当致命了,先不说后面如果解决 ...

  8. C#(.net)实现用apache activemq传递SQLite的数据

    版权声明:本文为搜集借鉴各类文章的原创文章,转载请注明出处:http://www.cnblogs.com/2186009311CFF/p/6382623.html. C#(.net)实现用apache ...

  9. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

  10. 从SQLite获取数据完成一个产品信息展示

    在ios实际开发当中,我们常常用到Core Data做为数据储存首选.但在处理一些大量复杂的数据值且数据之间相互关联的时候,这就不得不使用关系型数据库来实现.例如一个导航程序,自身应该包含大量的地图自 ...

随机推荐

  1. Linux记录-配置无密码登录

    1.互信的机器都执行 ssh-keygen -t rsa cat ~/.ssh/id_rsa.pub >> /home/hdfs/.ssh/authorized_keys chmod 60 ...

  2. js替换全部,js检查输入的日期是否是一个正确的日期格式

    <script language="javascript"> var str = "我爱的人和爱我的人,我爱的人和爱我的人"; var newstr ...

  3. 【整理】Linux 下 自己使用的 debug宏 printf

    #ifdef __DEBUG_PRINTF__ /* * * Some Debug printf kit for devlopment * * Date : 2019.03.04 * * Editor ...

  4. 阿里面试题:为什么Map桶中个数超过8才转为红黑树

    (为什么一个是8一个是6:防止频繁来回转换小消耗性能) 这是笔者面试阿里时,被问及的一个问题,应该不少人看到这个问题都会一面懵逼.因为,大部分的文章都是分析链表是怎么转换成红黑树的,但是并没有说明为什 ...

  5. 2016vijos 1-3 兔子的晚会(生成函数+倍增FWT)

    求出序列的生成函数后,倍增FWT #include<cstdio> using namespace std; #define N 2048 ; int inv; ]; int Pow(in ...

  6. 数据建模工具系列 之 让Oracle Data Modeler支持Vertica

    引子 在上篇博客中重点介绍了几个建模工具的评估, 并选定了SQL Power Architect作为最终的建模工具, 在评估过程中也对Oracle Data Modeler支持Vertica做了点研究 ...

  7. Hibernate常用API以及使用说明

    1===>Hibernate常用的aip有Configuration,SessionFactory,Transaction,Session Configuration主要用于加载配置文件,使用 ...

  8. postfix 邮箱接收限制

    Postfix 限制 QQ 邮箱发送到 我的 test.com 域下邮箱. 1.编辑 main.cf  添加限制: smtpd_sender_restrictions = check_sender_a ...

  9. Java EE之Struts2异常[No mapping found for dependency [type=java.lang.String, name='actionPackages'#java.lang.RuntimeException]【摘抄】

    本博文摘自:http://www.blogjava.net/nkjava/archive/2009/03/29/262705.html 出现这个问题,可能是添加了struts2-codebehind包 ...

  10. ue4 笔记

    关卡场景内的模型在运行中,改变构建脚本后无法立即更新模型骨骼中心点碰到物理边缘 physcX会出问题 bug 纹理启用碰撞会与碰撞顶点冲突 造成效果不正确 IsInGameThread() 渲染时 会 ...