Initial Commit
This commit is contained in:
0
api/app/models/vmware/__init__.py
Normal file
0
api/app/models/vmware/__init__.py
Normal file
0
api/app/models/vmware/core/__init__.py
Normal file
0
api/app/models/vmware/core/__init__.py
Normal file
54
api/app/models/vmware/core/cluster.py
Normal file
54
api/app/models/vmware/core/cluster.py
Normal file
@@ -0,0 +1,54 @@
|
||||
from sqlalchemy import (
|
||||
Column,
|
||||
String,
|
||||
Integer,
|
||||
ForeignKey
|
||||
)
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from models.common.base import BaseModel
|
||||
|
||||
|
||||
class cluster(BaseModel):
|
||||
"""
|
||||
description: VMware cluster model
|
||||
"""
|
||||
__tablename__ = "tvc_clusters"
|
||||
_s_collection_name = "clusters"
|
||||
exclude_rels = ["capacity", "datastores", "sharedNetwork"]
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
|
||||
name = Column(String(64), unique=True, index=True, nullable=False)
|
||||
vcenter_id = Column(Integer, ForeignKey("tvc_vcenters.id"), nullable=False)
|
||||
environment_id = Column(
|
||||
Integer,
|
||||
ForeignKey("tcc_environments.id"),
|
||||
nullable=True
|
||||
)
|
||||
|
||||
vcenter = relationship("vcenter", back_populates="cluster")
|
||||
environment = relationship("environment", back_populates="cluster")
|
||||
capacity = relationship(
|
||||
"capacity",
|
||||
backref="cluster",
|
||||
cascade="save-update, delete",
|
||||
lazy="dynamic"
|
||||
)
|
||||
maintenance = relationship(
|
||||
"maintenance",
|
||||
backref="cluster",
|
||||
cascade="save-update, delete",
|
||||
lazy="dynamic"
|
||||
)
|
||||
datastores = relationship(
|
||||
"datastore",
|
||||
backref="cluster",
|
||||
cascade="save-update, delete",
|
||||
lazy="dynamic"
|
||||
)
|
||||
sharedNetwork = relationship(
|
||||
"sharedNetwork",
|
||||
backref="cluster",
|
||||
cascade="save-update, delete",
|
||||
lazy="dynamic"
|
||||
)
|
||||
36
api/app/models/vmware/core/vcenter.py
Normal file
36
api/app/models/vmware/core/vcenter.py
Normal file
@@ -0,0 +1,36 @@
|
||||
from sqlalchemy import (
|
||||
Column,
|
||||
String,
|
||||
Integer,
|
||||
ForeignKey
|
||||
)
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from models.common.base import BaseModel
|
||||
|
||||
|
||||
class vcenter(BaseModel):
|
||||
"""
|
||||
description: VMware vcenter model
|
||||
"""
|
||||
__tablename__ = "tvc_vcenters"
|
||||
_s_collection_name = "vcenters"
|
||||
|
||||
exclude_rels = ["rvm_vcenter"]
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
|
||||
hostname = Column(String(64), unique=True, index=True, nullable=False)
|
||||
contour_id = Column(Integer, ForeignKey("tcc_contours.id"))
|
||||
|
||||
cluster = relationship(
|
||||
"cluster",
|
||||
back_populates="vcenter",
|
||||
cascade="save-update, delete"
|
||||
)
|
||||
contour = relationship("contour", back_populates="vcenter")
|
||||
|
||||
vcenter = relationship(
|
||||
"maintenance",
|
||||
backref="vcenter",
|
||||
cascade="save-update, delete"
|
||||
)
|
||||
0
api/app/models/vmware/reports/__init__.py
Normal file
0
api/app/models/vmware/reports/__init__.py
Normal file
0
api/app/models/vmware/reports/capacity/__init__.py
Normal file
0
api/app/models/vmware/reports/capacity/__init__.py
Normal file
25
api/app/models/vmware/reports/capacity/frame.py
Normal file
25
api/app/models/vmware/reports/capacity/frame.py
Normal file
@@ -0,0 +1,25 @@
|
||||
from datetime import datetime
|
||||
|
||||
from sqlalchemy import Column, Integer, DateTime
|
||||
from sqlalchemy.orm import relationship
|
||||
|
||||
from models.common.base import BaseModel
|
||||
|
||||
|
||||
class frame(BaseModel):
|
||||
__tablename__ = "tvrc_frames"
|
||||
_s_collection_name = "frames"
|
||||
http_methods = {"get", "post", "delete"}
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
|
||||
timestamp = Column(
|
||||
DateTime,
|
||||
default=datetime.utcnow,
|
||||
onupdate=datetime.utcnow
|
||||
)
|
||||
|
||||
capacity = relationship(
|
||||
"capacity",
|
||||
backref="frame",
|
||||
cascade="save-update, delete"
|
||||
)
|
||||
131
api/app/models/vmware/reports/capacity/report.py
Normal file
131
api/app/models/vmware/reports/capacity/report.py
Normal file
@@ -0,0 +1,131 @@
|
||||
from safrs import jsonapi_rpc, SAFRSFormattedResponse
|
||||
from sqlalchemy import (
|
||||
Column,
|
||||
Integer,
|
||||
Float,
|
||||
ForeignKey
|
||||
)
|
||||
|
||||
from helpers.database import db
|
||||
from helpers.math import safe_division
|
||||
from models.common.base import BaseModel
|
||||
from models.vmware.reports.capacity.frame import frame
|
||||
|
||||
|
||||
class capacity(BaseModel):
|
||||
"""
|
||||
description: Capacity report model
|
||||
"""
|
||||
__tablename__ = "tvrc_report"
|
||||
_s_collection_name = "capacity"
|
||||
|
||||
http_methods = {"get", "post"}
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
|
||||
hosts_on_duty = Column(Integer, nullable=False)
|
||||
hosts_in_maintenance = Column(Integer, nullable=False)
|
||||
hosts_reserved = Column(Integer, nullable=False)
|
||||
hosts_staged_dcm = Column(Integer, nullable=False)
|
||||
vms_total = Column(Integer, nullable=False)
|
||||
sockets_total = Column(Integer, nullable=False)
|
||||
pcpu_total = Column(Integer, nullable=False)
|
||||
pcpu_host_max = Column(Integer, nullable=False)
|
||||
vcpu_provisioned = Column(Integer, nullable=False)
|
||||
pmemory_total = Column(Float, nullable=False)
|
||||
vmemory_provisioned = Column(Float, nullable=False)
|
||||
pstorage_total = Column(Float, nullable=False)
|
||||
vstorage_used = Column(Float, nullable=False)
|
||||
vstorage_provisioned = Column(Float, nullable=False)
|
||||
rdm_total = Column(Float, nullable=False)
|
||||
pcpu_ovp_target = Column(Float, nullable=False)
|
||||
pmemory_ovp_target = Column(Float, nullable=False)
|
||||
pstorage_ovp_target = Column(Float, nullable=False)
|
||||
pcpu_retire_target = Column(Float, nullable=False)
|
||||
|
||||
frame_id = Column(
|
||||
Integer, ForeignKey("tvrc_frames.id"),
|
||||
nullable=False,
|
||||
index=True
|
||||
)
|
||||
cluster_id = Column(
|
||||
Integer,
|
||||
ForeignKey("tvc_clusters.id"),
|
||||
nullable=False,
|
||||
index=True
|
||||
)
|
||||
|
||||
@classmethod
|
||||
@jsonapi_rpc(http_methods=["GET"])
|
||||
def get_last(self, *args, **kwargs):
|
||||
"""
|
||||
description : Get capacity report by last frameid
|
||||
summary : Get last capacity report
|
||||
tags:
|
||||
- capacity
|
||||
produces:
|
||||
- application/xml
|
||||
- application/json
|
||||
"""
|
||||
|
||||
frame_obj = db.session.query(frame).order_by(frame.id.desc()).first()
|
||||
|
||||
reports = db.session.query(capacity).\
|
||||
filter(capacity.frame_id == frame_obj.id).all()
|
||||
|
||||
data = [reports]
|
||||
response = SAFRSFormattedResponse(
|
||||
data,
|
||||
self._s_meta(),
|
||||
{},
|
||||
{},
|
||||
len(reports)
|
||||
)
|
||||
return response
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
pcpu_ovp_current = kwargs.pop("pcpu_ovp_current", None) # noqa
|
||||
pmemory_ovp_current = kwargs.pop("pmemory_ovp_current", None) # noqa
|
||||
pstorage_ovp_current = kwargs.pop("pstorage_ovp_current", None) # noqa
|
||||
|
||||
cpu_cap_used = kwargs.pop("cpu_cap_used", None) # noqa
|
||||
mem_cap_used = kwargs.pop("mem_cap_used", None) # noqa
|
||||
str_cap_used = kwargs.pop("str_cap_used", None) # noqa
|
||||
|
||||
hosts_total = kwargs.pop("hosts_total", None) # noqa
|
||||
|
||||
BaseModel.__init__(self, **kwargs)
|
||||
|
||||
def to_dict(self):
|
||||
result = BaseModel.to_dict(self)
|
||||
|
||||
result['pcpu_ovp_current'] = safe_division(
|
||||
result['vcpu_provisioned'],
|
||||
result['pcpu_total']
|
||||
)
|
||||
result['pmemory_ovp_current'] = safe_division(
|
||||
result['vmemory_provisioned'],
|
||||
result['pmemory_total']
|
||||
)
|
||||
result['pstorage_ovp_current'] = safe_division(
|
||||
result['vstorage_provisioned'],
|
||||
result['pstorage_total']
|
||||
)
|
||||
|
||||
result['cpu_cap_used'] = round(safe_division(
|
||||
result['pcpu_ovp_current'],
|
||||
result['pcpu_ovp_target']
|
||||
)*100)
|
||||
result['mem_cap_used'] = round(safe_division(
|
||||
result['pmemory_ovp_current'],
|
||||
result['pmemory_ovp_target']
|
||||
)*100)
|
||||
result['str_cap_used'] = round(safe_division(
|
||||
result['pstorage_ovp_current'],
|
||||
result['pstorage_ovp_target']
|
||||
)*100)
|
||||
|
||||
result['hosts_total'] = result['hosts_on_duty'] +\
|
||||
result['hosts_reserved'] +\
|
||||
result['hosts_in_maintenance']
|
||||
|
||||
return result
|
||||
56
api/app/models/vmware/reports/datastores/report.py
Normal file
56
api/app/models/vmware/reports/datastores/report.py
Normal file
@@ -0,0 +1,56 @@
|
||||
from sqlalchemy import (
|
||||
Column,
|
||||
String,
|
||||
Integer,
|
||||
ForeignKey
|
||||
)
|
||||
|
||||
from helpers.math import safe_division
|
||||
from models.common.base import BaseModel
|
||||
|
||||
|
||||
class datastore(BaseModel):
|
||||
"""
|
||||
description: Datastores report model
|
||||
"""
|
||||
__tablename__ = "tvrd_report"
|
||||
_s_collection_name = "datastores"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
|
||||
name = Column(String(64), index=True, nullable=False)
|
||||
space_used = Column(Integer, nullable=False)
|
||||
space_total = Column(Integer, nullable=False)
|
||||
space_provisioned = Column(Integer, nullable=False)
|
||||
|
||||
cluster_id = Column(
|
||||
Integer,
|
||||
ForeignKey("tvc_clusters.id"),
|
||||
nullable=False,
|
||||
index=True
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
ovp_current = kwargs.pop("ovp_current", None) # noqa
|
||||
space_free_percent = kwargs.pop("space_free_percent", None) # noqa
|
||||
cap_used = kwargs.pop("cap_used", None) # noqa
|
||||
|
||||
BaseModel.__init__(self, **kwargs)
|
||||
|
||||
def to_dict(self):
|
||||
result = BaseModel.to_dict(self)
|
||||
|
||||
result["ovp_current"] = safe_division(
|
||||
result["space_provisioned"],
|
||||
result["space_total"]
|
||||
)
|
||||
result["space_free_percent"] = round((1 - safe_division(
|
||||
result["space_used"],
|
||||
result["space_total"]
|
||||
))*100, 0)
|
||||
|
||||
result['cap_used'] = round(safe_division(
|
||||
result['ovp_current'],
|
||||
2
|
||||
)*100)
|
||||
|
||||
return result
|
||||
0
api/app/models/vmware/reports/mmhosts/__init__.py
Normal file
0
api/app/models/vmware/reports/mmhosts/__init__.py
Normal file
38
api/app/models/vmware/reports/mmhosts/report.py
Normal file
38
api/app/models/vmware/reports/mmhosts/report.py
Normal file
@@ -0,0 +1,38 @@
|
||||
from sqlalchemy import (
|
||||
Column,
|
||||
String,
|
||||
Integer,
|
||||
DateTime,
|
||||
ForeignKey
|
||||
)
|
||||
|
||||
from models.common.base import BaseModel
|
||||
|
||||
|
||||
class maintenance(BaseModel):
|
||||
__tablename__ = "tvrm_report"
|
||||
_s_collection_name = "maintenance"
|
||||
|
||||
http_methods = {"get", "post", "delete"}
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
|
||||
folder = Column(String(255), nullable=False)
|
||||
hostname = Column(String(64), unique=True, nullable=False)
|
||||
state = Column(String(64), index=True)
|
||||
reason = Column(String(255))
|
||||
placedby = Column(String(64))
|
||||
placedbyFN = Column(String(64))
|
||||
date = Column(DateTime)
|
||||
|
||||
vcenter_id = Column(
|
||||
Integer,
|
||||
ForeignKey("tvc_vcenters.id"),
|
||||
nullable=False,
|
||||
index=True
|
||||
)
|
||||
cluster_id = Column(
|
||||
Integer,
|
||||
ForeignKey("tvc_clusters.id"),
|
||||
nullable=True,
|
||||
index=True
|
||||
)
|
||||
49
api/app/models/vmware/reports/sharedNetworks/report.py
Normal file
49
api/app/models/vmware/reports/sharedNetworks/report.py
Normal file
@@ -0,0 +1,49 @@
|
||||
from sqlalchemy import (
|
||||
Column,
|
||||
String,
|
||||
Integer,
|
||||
Float,
|
||||
ForeignKey
|
||||
)
|
||||
|
||||
from models.common.base import BaseModel
|
||||
|
||||
|
||||
class sharedNetwork(BaseModel):
|
||||
"""
|
||||
description: Shared Networks report model
|
||||
"""
|
||||
__tablename__ = "tvrsn_report"
|
||||
_s_collection_name = "sharedNetworks"
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True, index=True)
|
||||
vrf = Column(String(64), nullable=False)
|
||||
vrfId = Column(Integer, nullable=False, index=True)
|
||||
subnet = Column(String(15), nullable=False)
|
||||
subnetId = Column(Integer, nullable=False, unique=True, index=True)
|
||||
subnetMask = Column(Integer, nullable=False)
|
||||
requestsID = Column(String(32))
|
||||
bussinessLine = Column(String(32))
|
||||
subnetManager = Column(String(32), index=True)
|
||||
virtSubnetName = Column(String(32))
|
||||
virtSubnetUUID = Column(String(32))
|
||||
freeIPPercent = Column(Float, nullable=False)
|
||||
|
||||
cluster_id = Column(
|
||||
Integer,
|
||||
ForeignKey("tvc_clusters.id"),
|
||||
nullable=True,
|
||||
index=True
|
||||
)
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
platform = kwargs.pop("platform", None) # noqa
|
||||
|
||||
BaseModel.__init__(self, **kwargs)
|
||||
|
||||
def to_dict(self):
|
||||
result = BaseModel.to_dict(self)
|
||||
|
||||
result["platform"] = "vmware"
|
||||
|
||||
return result
|
||||
Reference in New Issue
Block a user