Skip to content

Implemented virtual memory usage metric type. #65

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions taskobra/monitor/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
import psutil
import sys
import time
import platform
import platform

from taskobra.orm import CpuPercent, get_engine, get_session, Snapshot
from taskobra.orm import CpuPercent, VirtualMemoryUsage, get_engine, get_session, Snapshot
from taskobra.monitor import system_info


Expand All @@ -27,6 +27,8 @@ def create_snapshot(args):
# print(f"Disk : {psutil.disk_usage('/')}")
# print(f"VMem : {psutil.virtual_memory()}")
# print(f"SwapMem : {psutil.swap_memory()}")
vmem = psutil.virtual_memory()
snapshot.metrics.append(VirtualMemoryUsage(total=vmem.total, mean=vmem.used))
snapshot.metrics.append(CpuPercent(core_id=0, mean=psutil.cpu_percent()))
# snapshot = for each metric snapshot.add(metric)
return snapshot
Expand Down
2 changes: 1 addition & 1 deletion taskobra/orm/__init__.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from .base import get_engine, get_session, ORMBase
from .components import Component, CPU, GPU, Memory, OperatingSystem, Storage
from .metrics import Metric, CpuPercent
from .metrics import Metric, CpuPercent, VirtualMemoryUsage
from .role import Role
from .user import User
from .snapshot import Snapshot
Expand Down
1 change: 1 addition & 0 deletions taskobra/orm/metrics/__init__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
from .metric import Metric
from .cpu_percent import CpuPercent
from .virtual_memory import VirtualMemoryUsage
1 change: 1 addition & 0 deletions taskobra/orm/metrics/metric.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class Metric(ORMBase):
variance = Column(Float, default=0.0)
metric_type = Column(Enum(
"CpuPercent",
"VirtualMemoryUsage",
"TestMetricMetric",
"TestSnapshotMetric",
name="MetricType"
Expand Down
28 changes: 28 additions & 0 deletions taskobra/orm/metrics/virtual_memory.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
from collections import defaultdict
from sqlalchemy import Column, Float, ForeignKey, Integer
from typing import Collection
from taskobra.orm.metrics.metric import Metric


class VirtualMemoryUsage(Metric):
__tablename__ = "VirtualMemoryUsage"
unique_id = Column(Integer, ForeignKey("Metric.unique_id"), primary_key=True)
total = Column(Float)
__mapper_args__ = {
"polymorphic_identity": __tablename__
}

@property
def used(self):
return self.mean

@property
def percent(self):
return self.used / self.total

def __repr__(self):
s = f"<VirtualMemoryUsage({int(self.used)}/{int(self.total)}: {100*self.percent:.1f}"
if self.sample_count > 1:
s += f" sd:{self.standard_deviation:.3} {self.sample_count})"
s += ")>"
return s
15 changes: 15 additions & 0 deletions tests/orm/metrics/test_VirtualMemoryUsage.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
from ..ORMTestCase import ORMTestCase
from sqlalchemy import Column, ForeignKey, Integer
import statistics
from taskobra.orm import get_engine, get_session
from taskobra.orm.metrics import VirtualMemoryUsage


class TestCpuPercent(ORMTestCase):
def test_prune(self):
with get_session(bind=get_engine("sqlite:///:memory:")) as session:
session.add(VirtualMemoryUsage(total=10, mean=2))
session.add(VirtualMemoryUsage(total=10, mean=3))
session.add(VirtualMemoryUsage(total=10, mean=4))
session.add(VirtualMemoryUsage(total=10, mean=4))
session.add(VirtualMemoryUsage(total=10, mean=5))