Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
slapos.toolbox
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
6
Merge Requests
6
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
slapos.toolbox
Commits
18c82ba2
Commit
18c82ba2
authored
Jun 06, 2012
by
Mohamadou Mbengue
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
update script to support slapreport service
parent
fcd87709
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
116 additions
and
7 deletions
+116
-7
slapos/monitor.py
slapos/monitor.py
+116
-7
No files found.
slapos/monitor.py
View file @
18c82ba2
# -*- coding: utf-8 -*-
##############################################################################
##############################################################################
#
#
# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
# Copyright (c) 2010 Vifib SARL and Contributors. All Rights Reserved.
...
@@ -58,6 +59,7 @@ class GenerateXML(object):
...
@@ -58,6 +59,7 @@ class GenerateXML(object):
self
.
element_tree
=
element_tree
self
.
element_tree
=
element_tree
self
.
path_database
=
path_database
self
.
path_database
=
path_database
self
.
path_xml
=
path_xml
self
.
path_xml
=
path_xml
#self.log_file = log_file
def
dump_xml
(
self
):
def
dump_xml
(
self
):
"""This func read data from database and through
"""This func read data from database and through
...
@@ -83,7 +85,7 @@ class GenerateXML(object):
...
@@ -83,7 +85,7 @@ class GenerateXML(object):
conn
.
commit
()
conn
.
commit
()
cursor
.
close
()
cursor
.
close
()
conn
.
close
()
conn
.
close
()
def
_eval_consumption_summary
(
self
,
consumption_infos
):
def
_eval_consumption_summary
(
self
,
consumption_infos
):
"""This function return a resources usage summary, for pricing purpose"""
"""This function return a resources usage summary, for pricing purpose"""
memory_percentage
=
[]
memory_percentage
=
[]
...
@@ -169,7 +171,7 @@ class GenerateXML(object):
...
@@ -169,7 +171,7 @@ class GenerateXML(object):
fd
=
open
(
storage_path
,
'w'
)
fd
=
open
(
storage_path
,
'w'
)
fd
.
write
(
"<?xml version='1.0' encoding='utf-8'?>%s"
%
report
)
fd
.
write
(
"<?xml version='1.0' encoding='utf-8'?>%s"
%
report
)
fd
.
close
()
fd
.
close
()
def
_add_movement
(
self
,
consumption
,
single_resource_list
):
def
_add_movement
(
self
,
consumption
,
single_resource_list
):
child_consumption
=
ElementTree
.
SubElement
(
consumption
,
"movement"
)
child_consumption
=
ElementTree
.
SubElement
(
consumption
,
"movement"
)
...
@@ -196,7 +198,7 @@ class GenerateXML(object):
...
@@ -196,7 +198,7 @@ class GenerateXML(object):
def
parse_opt
():
def
parse_opt
():
usage
=
"""usage: slapmonitor [options] PID_FILE_PATH DATABASE_PATH
usage
=
"""usage: slapmonitor [options] PID_FILE_PATH DATABASE_PATH
Usage: slapreport [options]
XML_PATH DATABASE_PATH
"""
Usage: slapreport [options]
LOG_PATH DATABASE_PATH LOGBOX_IP LOGBOX_PORT LOGBOX_LOGIN LOGBOX_PASSWORD
"""
parser
=
OptionParser
(
usage
=
usage
)
parser
=
OptionParser
(
usage
=
usage
)
parser
.
add_option
(
'-t'
,
'--update_time'
,
type
=
int
,
dest
=
'update_time'
,
help
=
'Specify the interval'
\
parser
.
add_option
(
'-t'
,
'--update_time'
,
type
=
int
,
dest
=
'update_time'
,
help
=
'Specify the interval'
\
...
@@ -222,14 +224,14 @@ class SlapMonitor(object):
...
@@ -222,14 +224,14 @@ class SlapMonitor(object):
conn
=
sqlite3
.
connect
(
self
.
path_database
)
conn
=
sqlite3
.
connect
(
self
.
path_database
)
cursor
=
conn
.
cursor
()
cursor
=
conn
.
cursor
()
cursor
.
execute
(
"create table if not exists data (cpu real, cpu_time real, memory real, rss real,"
\
cursor
.
execute
(
"create table if not exists data (cpu real, cpu_time real, memory real, rss real,"
\
"date text, time text)"
)
"date text, time text
, report integer NULL DEFAULT 0
)"
)
try
:
try
:
res_list
=
temporary_monitoring
.
get_cpu_and_memory_usage
(
self
.
proc
)
res_list
=
temporary_monitoring
.
get_cpu_and_memory_usage
(
self
.
proc
)
date_catched
=
"-"
.
join
([
str
(
res_list
[
4
].
year
),
str
(
res_list
[
4
].
month
),
str
(
res_list
[
4
].
day
)])
date_catched
=
"-"
.
join
([
str
(
res_list
[
4
].
year
),
str
(
res_list
[
4
].
month
),
str
(
res_list
[
4
].
day
)])
time_catched
=
":"
.
join
([
str
(
res_list
[
4
].
hour
),
str
(
res_list
[
4
].
minute
),
str
(
res_list
[
4
].
second
)])
time_catched
=
":"
.
join
([
str
(
res_list
[
4
].
hour
),
str
(
res_list
[
4
].
minute
),
str
(
res_list
[
4
].
second
)])
res_list
[
4
]
=
date_catched
res_list
[
4
]
=
date_catched
res_list
.
append
(
time_catched
)
res_list
.
append
(
time_catched
)
cursor
.
execute
(
"insert into data values (?,?,?,?,?,?)"
,
res_list
)
cursor
.
execute
(
"insert into data
(cpu, cpu_time, memory, rss, date, time)
values (?,?,?,?,?,?)"
,
res_list
)
conn
.
commit
()
conn
.
commit
()
cursor
.
close
()
cursor
.
close
()
conn
.
close
()
conn
.
close
()
...
@@ -243,6 +245,78 @@ class SlapMonitor(object):
...
@@ -243,6 +245,78 @@ class SlapMonitor(object):
logging
.
info
(
"EXIT 0: Process terminated normally!"
)
logging
.
info
(
"EXIT 0: Process terminated normally!"
)
sys
.
exit
(
0
)
sys
.
exit
(
0
)
class
SlapReport
(
object
):
"""
reports usage of apache and mariadb logs to an existing log server
"""
def
__init__
(
self
,
proc
,
update_time
,
consumption_log_path
,
database_path
,
ssh_parameters
):
self
.
proc
=
proc
self
.
update_time
=
update_time
self
.
path_database
=
database_path
self
.
consumption_log_path
=
consumption_log_path
self
.
ssh_parameters
=
ssh_parameters
self
.
start_report
()
def
write_log
(
self
):
"""This func read data from database and through
write_log_file write result on a log file"""
#write none reported log in the consumption log log file
fd
=
open
(
self
.
consumption_log_path
,
'a'
)
conn
=
sqlite3
.
connect
(
self
.
path_database
)
cursor
=
conn
.
cursor
()
log_list
=
cursor
.
execute
(
"SELECT * FROM data WHERE report=0 ORDER BY rowid ASC"
)
last_report_time
=
""
for
row
in
log_list
:
cpu_consumption_info
=
"%s %s Instance %s CPU Consumption: CPU:%s CPU_TIME:%s
\
n
"
\
%
(
row
[
4
],
row
[
5
],
self
.
proc
.
name
,
row
[
0
],
row
[
1
])
memory_consumption_info
=
"%s %s Instance %s Memory Consumption: %s
\
n
"
\
%
(
row
[
4
],
row
[
5
],
self
.
proc
.
name
,
row
[
2
])
try
:
cmd
=
"tail -n 2 %s | ssh %s:%s@%s -p %s "
\
%
(
self
.
consumption_log_path
,
self
.
ssh_parameters
[
'user'
],
\
self
.
ssh_parameters
[
'passwd'
],
self
.
ssh_parameters
[
'ip'
],
\
self
.
ssh_parameters
[
'port'
])
res
=
os
.
system
(
cmd
)
if
not
res
:
if
last_report_time
!=
row
[
5
]:
fd
.
write
(
"%s%s"
%
(
cpu_consumption_info
,
memory_consumption_info
))
last_report_time
=
"%s"
%
row
[
5
]
cursor
.
execute
(
"UPDATE data set report='1' WHERE time=?"
,
(
row
[
5
],))
conn
.
commit
()
except
Exception
,
e
:
if
log_file
:
logging
.
info
(
"ERROR : Unable to connect to % at %s"
%
(
self
.
ssh_parameters
[
'ip'
],
strftime
(
"%Y-%m-%d at %H:%m"
)))
#sys.exit(1)
cursor
.
close
()
conn
.
close
()
def
start_report
(
self
):
"""
while the process is running, connect to the database
and report the non-reported line,
when line is reported put 1 to column report
"""
temporary_monitoring
=
MonitoringTool
()
#check if the process is alive == None, instead zero value == proc is over
while
self
.
proc
.
pid
in
psutil
.
get_pid_list
():
try
:
# send log to logbox
self
.
write_log
()
time
.
sleep
(
self
.
update_time
)
except
IOError
:
if
log_file
:
logging
.
info
(
"ERROR : process with pid : %s watched by slap monitor exited too quickly at %s"
%
(
self
.
proc
.
pid
,
strftime
(
"%Y-%m-%d at %H:%m"
)))
sys
.
exit
(
1
)
if
log_file
:
logging
.
info
(
"EXIT 0: Process terminated normally!"
)
sys
.
exit
(
0
)
def
run_slapmonitor
():
def
run_slapmonitor
():
#This function require the pid file and the database path
#This function require the pid file and the database path
parser
=
parse_opt
()
parser
=
parse_opt
()
...
@@ -261,8 +335,7 @@ def run_slapmonitor():
...
@@ -261,8 +335,7 @@ def run_slapmonitor():
proc
=
psutil
.
Process
(
int
(
pid_read
))
proc
=
psutil
.
Process
(
int
(
pid_read
))
SlapMonitor
(
proc
,
opts
.
update_time
,
args
[
1
])
SlapMonitor
(
proc
,
opts
.
update_time
,
args
[
1
])
def
run_slapreport_
():
def
run_slapreport
():
#This function require the xml_path and database_path
#This function require the xml_path and database_path
parser
=
parse_opt
()
parser
=
parse_opt
()
opts
,
args
=
parser
.
parse_args
()
opts
,
args
=
parser
.
parse_args
()
...
@@ -277,3 +350,39 @@ def run_slapreport():
...
@@ -277,3 +350,39 @@ def run_slapreport():
get_xml_hand
=
GenerateXML
(
ElementTree
,
args
[
1
],
args
[
0
])
get_xml_hand
=
GenerateXML
(
ElementTree
,
args
[
1
],
args
[
0
])
get_xml_hand
.
dump_xml
()
get_xml_hand
.
dump_xml
()
def
run_slapreport
():
#This function require the consumption_log_path and database_path ssh_parameters
parser
=
parse_opt
()
ssh_parameters
=
{}
opts
,
args
=
parser
.
parse_args
()
if
len
(
args
)
!=
7
:
parser
.
error
(
"Incorrect number of arguments, 7 required but "
+
str
(
len
(
args
))
+
" detected"
)
if
opts
.
path_log_file
:
logging
.
basicConfig
(
filename
=
opts
.
path_log_file
,
level
=
logging
.
DEBUG
)
global
log_file
log_file
=
True
pid_file_path
=
"%s"
%
args
[
0
]
#set ssh parameters
ssh_parameters
[
'ip'
]
=
args
[
3
]
ssh_parameters
[
'port'
]
=
args
[
4
]
ssh_parameters
[
'user'
]
=
args
[
5
]
ssh_parameters
[
'passwd'
]
=
args
[
6
]
try
:
fed
=
open
(
pid_file_path
,
'r'
)
pid_read
=
fed
.
read
()
fed
.
close
()
proc
=
psutil
.
Process
(
int
(
pid_read
))
SlapReport
(
proc
,
opts
.
update_time
,
args
[
1
],
args
[
2
],
ssh_parameters
)
except
IOError
:
if
log_file
:
logging
.
info
(
"ERROR : process with pid : %s watched by slap monitor exited too quickly at %s"
%
(
self
.
proc
.
pid
,
strftime
(
"%Y-%m-%d at %H:%m"
)))
sys
.
exit
(
1
)
if
log_file
:
logging
.
info
(
"EXIT 0: Process terminated normally!"
)
#sys.exit(0)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment