-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathappmgmt.py
More file actions
executable file
·131 lines (108 loc) · 3.31 KB
/
appmgmt.py
File metadata and controls
executable file
·131 lines (108 loc) · 3.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/usr/bin/env python
# Copyright 2012 Chenjun Shen
#
#####################################################
# APP mgmt cli script
#
# inspired by
# a) https://github.com/mikeyk/ec2-cli-tools
# b) https://gist.github.com/2307647
#
#####################################################
import os
import sys
import getopt
from sys import stderr
from fabric.api import run,get,env
# SET SSH PRIVATE KEY LOCATION
env.key_filename="/home/appmgmt/.ssh/id_rsa"
# APP<->USER MAPPING
APP_USER_MAPPING = {'PAS':'pas', 'PECENG':'pec'}
def get_user(app):
return APP_USER_MAPPING[app.split("-")[0]]
def get_jdk_bin(app):
return "/opt/as/java-%s/bin" % (app)
def get_pid(app):
print "GETTING PID OF APP=%s" % (app)
return run('%s/jps -v | awk \'/%s/{print $1}\'' % (jdk_bin, app))
def jinfo(pid, optn=""):
run('%s/jinfo %s %s' % (jdk_bin, optn, pid))
def jmap(pid, dump=False, optn=""):
#with hide('running'):
if not dump:
run('%s/jmap %s %s' % (jdk_bin, optn, pid))
else:
dumpfname="/var/tmp/%s.%s.hprof" % (pid, env.host)
run('%s/jmap -dump:format=b,file=%s %s' % (jdk_bin, dumpfname, pid))
run('gzip -f %s' % (dumpfname))
get('%s.gz' % (dumpfname), local_path='%s.gz' % (dumpfname))
run('rm -f %s.gz' % (dumpfname))
def jstack(pid, optn=""):
run('%s/jstack %s %s' % (jdk_bin, optn, pid))
def lsof(pid):
run('/usr/sbin/lsof -p %s' % (pid))
def netstat(pid):
run('/bin/netstat -anp | grep %s' % (pid))
def view(app, optn=""):
file_path="/opt/as/APP/%s/%s" % (app, optn)
run('test -f %s && /bin/cat %s' % (file_path, file_path))
def usage():
print >>stderr, """Usage: appmgmt.py [-H HOST] [-A APP] [-T TASK] [-O OPTION]
-h, --help display this help and exit
-H, --host HOST hostname -> fraapppas01.int.fra.net-m.internal
-A, --app APP appname -> PAS-APP01
-T, --task TASK task -> jinfo/jmap/jmap_with_dump/jstack/lsof/netstat/view
-O, --optn OPTION optn -> option sent to the native cmd"""
def main(argv):
try:
opts, args = getopt.getopt(argv, "hH:A:T:O:", ["help", "host=", "app=", "task=", "optn="])
except getopt.GetoptError, err:
print >>sys.stderr, err
usage()
sys.exit(2)
# init
optn=""
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in("-H", "--host"):
host = arg
elif opt in("-A", "--app"):
app = arg
elif opt in("-T", "--task"):
task = arg
elif opt in ("-O", "--optn"):
optn = arg
if not host or not app or not task:
usage()
sys.exit(1)
env.host_string=host
env.host=host
env.user=get_user(app)
global jdk_bin
jdk_bin=get_jdk_bin(app)
# getting pid
pid = get_pid(app)
if pid=="":
print "NO RUNNING INSTANCE"
sys.exit(2)
if task=="jinfo":
jinfo(pid, optn)
elif task=="jmap":
jmap(pid, False, optn)
elif task=="jmap_with_dump":
jmap(pid, True, optn)
elif task=="jstack":
jstack(pid, optn)
elif task=="lsof":
lsof(pid)
elif task=="netstat":
netstat(pid)
elif task=="view":
view(app, optn)
else:
usage()
sys.exit(1)
if __name__ == "__main__":
main(sys.argv[1:])