Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
CIRCLE3
/
monitor-client
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
1
Merge Requests
0
Pipelines
Wiki
Snippets
Members
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
A prog2-höz tartozó friss repo anyagok itt elérhetőek:
https://git.iit.bme.hu/
Commit
b7d0105b
authored
Nov 28, 2025
by
Szeberényi Imre
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fured fix
parent
a34d8d6b
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
74 additions
and
24 deletions
+74
-24
manage.py
+0
-5
src/client.py
+32
-19
src/memsparse.py
+42
-0
No files found.
manage.py
View file @
b7d0105b
...
...
@@ -4,11 +4,6 @@ from src.client import Client
def
main
():
# define a Handler which writes INFO messages or higher to the sys.stderr
logging
.
basicConfig
(
level
=
logging
.
INFO
,
format
=
'[
%(asctime)
s:
%(levelname)
s/
%(name)
s]
%(message)
s'
)
if
len
(
sys
.
argv
)
<
2
:
print
(
"usage: manage.py run"
)
if
len
(
sys
.
argv
)
!=
2
and
sys
.
argv
[
1
]
!=
"run"
:
...
...
src/client.py
View file @
b7d0105b
...
...
@@ -9,6 +9,7 @@ import pika
import
psutil
import
time
import
re
from
.memsparse
import
parse_memory_size
logging
.
basicConfig
()
logger
=
logging
.
getLogger
(
__name__
)
...
...
@@ -158,37 +159,48 @@ class Client:
try
:
for
entry
in
psutil
.
process_iter
():
if
entry
.
name
()
in
(
'kvm'
,
'qemu-system-x86_64'
):
parser
=
argparse
.
ArgumentParser
()
parser
=
argparse
.
ArgumentParser
(
add_help
=
False
)
parser
.
add_argument
(
'-name'
)
parser
.
add_argument
(
'--memory-size'
,
'-m '
,
type
=
int
)
args
,
unknown
=
parser
.
parse_known_args
(
entry
.
cmdline
()[
1
:])
# FONTOS: nincs szóköz a '-m' végén, és saját parse függvényt használunk
parser
.
add_argument
(
'--memory-size'
,
'-m '
,
dest
=
'memory_size'
,
type
=
parse_memory_size
)
args
,
unknown
=
parser
.
parse_known_args
(
entry
.
cmdline
()[
1
:])
# for Red Hat style parametering of kvm
if
isinstance
(
args
.
name
,
str
):
args
.
name
=
re
.
sub
(
r"^guest="
,
""
,
args
.
name
)
args
.
name
=
re
.
sub
(
r",debug-threads=.*$"
,
""
,
args
.
name
)
process
=
self
.
processes
.
get
(
entry
.
pid
,
None
)
if
not
process
or
process
.
cmdline
()
!=
entry
.
cmdline
():
process
=
psutil
.
Process
(
entry
.
pid
)
logger
.
info
(
'New process:
%
s'
,
process
)
self
.
processes
[
entry
.
pid
]
=
process
mem_perc
=
(
float
(
process
.
get_memory_info
()
.
rss
)
/
(
args
.
memory_size
*
1024
**
2
)
*
90
)
metrics
.
append
(
'vm.
%(name)
s.memory.usage
%(value)
f '
'
%(time)
d'
%
{
'name'
:
args
.
name
,
'value'
:
mem_perc
,
'time'
:
now
})
cpu_perc
=
process
.
get_cpu_percent
()
metrics
.
append
(
'vm.
%(name)
s.cpu.percent
%(value)
f '
'
%(time)
d'
%
{
'name'
:
args
.
name
,
'value'
:
cpu_perc
,
'time'
:
now
})
if
args
.
memory_size
:
# args.memory_size MiB-ben van
rss_bytes
=
float
(
process
.
memory_info
()
.
rss
)
mem_bytes_total
=
args
.
memory_size
*
1024
**
2
mem_perc
=
(
rss_bytes
/
mem_bytes_total
)
*
90.0
metrics
.
append
(
'vm.
%(name)
s.memory.usage
%(value)
f
%(time)
d'
%
{
'name'
:
args
.
name
,
'value'
:
mem_perc
,
'time'
:
now
,
})
else
:
logger
.
warning
(
'Pid
%
d: no memory size found for VM
%
s'
,
entry
.
pid
,
args
.
name
)
cpu_perc
=
process
.
cpu_percent
()
metrics
.
append
(
'vm.
%(name)
s.cpu.percent
%(value)
f
%(time)
d'
%
{
'name'
:
args
.
name
,
'value'
:
cpu_perc
,
'time'
:
now
,
})
running_vms
.
append
(
args
.
name
)
else
:
logger
.
warning
(
'Pid:
%
d args.name is empty?:
%
s
%
s'
,
entry
.
pid
,
entry
.
name
(),
entry
.
cmdline
())
logger
.
warning
(
'Pid:
%
d args.name is empty?:
%
s
%
s'
,
entry
.
pid
,
entry
.
name
(),
entry
.
cmdline
())
except
(
psutil
.
NoSuchProcess
,
TypeError
):
logger
.
warning
(
'Process
%
d lost. Entry:
%
s'
,
entry
.
pid
,
entry
.
cmdline
()[
0
:])
...
...
@@ -239,6 +251,7 @@ class Client:
if
metrics
:
for
chunk
in
self
.
_chunker
(
metrics
,
100
):
self
.
send
(
chunk
)
logger
.
debug
(
"metrics:
%
r"
,
metrics
)
logger
.
info
(
"
%
d metrics sent"
,
len
(
metrics
))
time
.
sleep
(
10
)
except
KeyboardInterrupt
:
...
...
src/memsparse.py
0 → 100644
View file @
b7d0105b
# memsparse.py
import
argparse
import
re
def
parse_memory_size
(
value
):
"""
Visszatér: memória méret MiB-ben (float).
Elfogadott formák:
- "4096"
- "4G", "4g"
- "4096M", "4096m"
- "size=4194304k"
- "4194304k"
"""
# Red Hat stílus: size=4194304k
if
value
.
startswith
(
'size='
):
value
=
value
.
split
(
'='
,
1
)[
1
]
m
=
re
.
match
(
r'^(\d+)([kKmMgG]?)$'
,
value
)
if
not
m
:
raise
argparse
.
ArgumentTypeError
(
"Invalid memory size format:
%
r"
%
value
)
num
=
int
(
m
.
group
(
1
))
suffix
=
m
.
group
(
2
)
.
lower
()
# QEMU unitok: k = KiB, m = MiB, g = GiB
if
suffix
==
'k'
:
mib
=
num
/
1024.0
elif
suffix
==
'm'
or
suffix
==
''
:
mib
=
float
(
num
)
elif
suffix
==
'g'
:
mib
=
num
*
1024.0
else
:
# ide elvileg nem jutunk a regex miatt
raise
argparse
.
ArgumentTypeError
(
"Unsupported unit in memory size:
%
r"
%
suffix
)
return
mib
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