#wip: sinchronizing Agents with SQL.

This commit is contained in:
KyMAN 2026-04-07 07:11:45 +02:00
parent eaff1f33d9
commit 017c77860d
28 changed files with 947 additions and 304 deletions

2
.gitignore vendored
View File

@ -7,3 +7,5 @@ __pycache__
/SQLServer/data /SQLServer/data
/SQLServer/temporary /SQLServer/temporary
/SQLServer/scripts /SQLServer/scripts
/Python/pyodbc.*
/Python/.venv

View File

@ -6,7 +6,7 @@ candle_seconds=10
candle_sleep_seconds=1 candle_sleep_seconds=1
execute_sleep_seconds=0 execute_sleep_seconds=0
show_json=true show_json=true
send_json=true send_json=false
url_server="http://192.168.1.131:13000/agents/debian" url_server="http://192.168.1.131:13000/agents/debian"
# Settings. # Settings.
@ -179,16 +179,18 @@ function execute(){
net_data="$net_data,$(get_net_data)]" net_data="$net_data,$(get_net_data)]"
candle_end=$(date +%s) candle_end=$(date +%s)
json="$json$hostnames,$domain,$ips,$disks,$iterations" # json="$json$hostnames,$domain,$ips,$disks,$iterations"
json="$json,[$candle_start,$candle_end]" # json="$json,[$candle_start,$candle_end]"
json="$json,[${cpu_in//,/.},${cpu_out//,/.},${cpu_minimum//,/.},${cpu_maximum//,/.},${cpu_average//,/.}]" json="$json,[${cpu_in//,/.},${cpu_out//,/.},${cpu_minimum//,/.},${cpu_maximum//,/.},${cpu_average//,/.}]"
json="$json,[$memory_total,$memory_in,$memory_out,$memory_minimum,$memory_maximum,${memory_average//,/.}]" # json="$json,[$memory_total,$memory_in,$memory_out,$memory_minimum,$memory_maximum,${memory_average//,/.}]"
json="$json,$net_data" # json="$json,$net_data"
json="$json]" json="$json]"
if [ "$show_json" = true ]; then echo "$json";fi if [ "$show_json" = true ]; then echo "$json";fi
if [ "$send_json" = true ]; then if [ "$send_json" = true ]; then
local response=$(echo "$json"|curl -s -X POST -H "Content-Type: application/json" -d @- "$url_server/$key") # local response=$(echo "$json"|curl -s -X POST -H "Content-Type: application/json" -d @- "$url_server/$key")
echo "$json"|curl -s -X POST -H "Content-Type: application/json" -d @- "$url_server/$key"
echo Sent
fi fi
} }

View File

@ -11,6 +11,12 @@
[" ok ", "ok", "success", "succeed", "yes"], [" ok ", "ok", "success", "succeed", "yes"],
["test", "debug"] ["test", "debug"]
], ],
"default_settings_files" : [
"/JSON/NucelarMonitor.settings.json"
],
"default_secrets_files" : [
"/JSON/NucelarMonitor.secrets.json"
],
"web_servers" : { "web_servers" : {
"main" : { "main" : {
"type" : "web_server", "type" : "web_server",
@ -32,17 +38,6 @@
"index_files" : ["index.html", "index.htm"] "index_files" : ["index.html", "index.htm"]
} }
}, },
"databases" : {
"sql_server" : {
"type" : "sql_server",
"driver" : "{ODBC Driver 17 for SQL Server}",
"host" : "127.0.0.1",
"port" : 1433,
"user" : "sa",
"password" : "password",
"database" : "NucelarMonitor"
}
},
"default_controllers" : { "default_controllers" : {
"agents" : "agents" "agents" : "agents"
}, },
@ -53,6 +48,6 @@
"get:/ /Public" "get:/ /Public"
], ],
"dispatchers" : { "dispatchers" : {
"agents" : "agents_dispatcher" "sql_server_agents" : "sql_server_agents"
} }
} }

View File

@ -2,23 +2,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
from typing import Self, Any, Optional, Sequence from typing import Self, Any, Optional, Sequence
from abc import ABC, abstractmethod
from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface
from Models.QueryResponseModel import QueryResponseModel from Interfaces.Owners.DatabasesInterface import DatabasesInterface
class DatabaseAbstract(ABC): class DatabaseAbstract(DatabasesInterface):
def __init__(self:Self, def __init__(self:Self,
nucelar_monitor:NucelarMonitorInterface, nucelar_monitor:NucelarMonitorInterface,
inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None inputs:Optional[dict[str, Any|None]|Sequence[Any|None]] = None
) -> None: ) -> None:
self.nucelar_monitor:NucelarMonitorInterface = nucelar_monitor self.nucelar_monitor:NucelarMonitorInterface = nucelar_monitor
@abstractmethod
def close(self:Self) -> bool:pass
@abstractmethod
def query(self:Self,
query:str,
parameters:Optional[dict[str, Any|None]|Sequence[Any|None]] = None
) -> QueryResponseModel:pass

View File

@ -3,8 +3,9 @@
from typing import Self from typing import Self
from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface
from Interfaces.Owners.DispatchersInterface import DispatchersInterface
class DispatcherAbstract: class DispatcherAbstract(DispatchersInterface):
def __init__(self:Self, nucelar_monitor:NucelarMonitorInterface) -> None: def __init__(self:Self, nucelar_monitor:NucelarMonitorInterface) -> None:
self.nucelar_monitor:NucelarMonitorInterface = nucelar_monitor self.nucelar_monitor:NucelarMonitorInterface = nucelar_monitor

View File

@ -14,6 +14,7 @@ from Managers.ModelsManager import ModelsManager
from Managers.TerminalManager import TerminalManager from Managers.TerminalManager import TerminalManager
from Managers.RoutesManager import RoutesManager from Managers.RoutesManager import RoutesManager
from Managers.ControllersManager import ControllersManager from Managers.ControllersManager import ControllersManager
from Managers.DispatchersManager import DispatchersManager
from Managers.DatabasesManager import DatabasesManager from Managers.DatabasesManager import DatabasesManager
from Managers.WebServersManager import WebServersManager from Managers.WebServersManager import WebServersManager
@ -46,6 +47,7 @@ class NucelarMonitor:
self.models:ModelsManager = ModelsManager(self) self.models:ModelsManager = ModelsManager(self)
self.terminal:TerminalManager = TerminalManager(self) self.terminal:TerminalManager = TerminalManager(self)
self.controllers:ControllersManager = ControllersManager(self) self.controllers:ControllersManager = ControllersManager(self)
self.dispatchers:DispatchersManager = DispatchersManager(self)
self.routes:RoutesManager = RoutesManager(self) self.routes:RoutesManager = RoutesManager(self)
self.databases:DatabasesManager = DatabasesManager(self) self.databases:DatabasesManager = DatabasesManager(self)
self.web_servers:WebServersManager = WebServersManager(self) self.web_servers:WebServersManager = WebServersManager(self)

View File

@ -10,6 +10,7 @@ from Models.IterationModel import (
CandleTimeModel, IterationModel CandleTimeModel, IterationModel
) )
from Dispatchers.AgentsDispatcher import AgentsDispatcher from Dispatchers.AgentsDispatcher import AgentsDispatcher
from Abstracts.DatabaseAbstract import DatabaseAbstract
from Utils.Utils import Utils from Utils.Utils import Utils
class AgentsController(ControllerAbstract): class AgentsController(ControllerAbstract):
@ -26,8 +27,10 @@ class AgentsController(ControllerAbstract):
cpu:list[float, float, float, float, float] cpu:list[float, float, float, float, float]
memory:list[int, int, int, int, int, float] memory:list[int, int, int, int, int, float]
net_use:list[list[list[str, int, int, int, int, int, int]]] net_use:list[list[list[str, int, int, int, int, int, int]]]
received:list[NetUseModel] = [] received:dict[str, NetUseModel] = {}
transmitted:list[NetUseModel] = [] transmitted:dict[str, NetUseModel] = {}
i:int
net:list[str, int, int, int, int, int, int]
( (
hostnames, domain, interfaces_data, disks, hostnames, domain, interfaces_data, disks,
@ -36,10 +39,23 @@ class AgentsController(ControllerAbstract):
print(Utils.json_decode(request.body)) print(Utils.json_decode(request.body))
received = {net[0] : NetUseModel(*net[1:]) for i, net in enumerate(net_use[0])} # 'enp3s0', 12489583046, 9909705, 0, 774527051, 4221200, 0
transmitted = {net[0] : NetUseModel(*net[1:]) for i, net in enumerate(net_use[1])} # 'enp3s0', 12486039059, 9906802, 0, 774272948, 4220106, 0
# 3543987 2903, 0
self.nucelar_monitor.dispatchers.get(AgentsDispatcher, "sql_server").save(IterationModel( for i, net in enumerate(net_use[0]):
print([net[0], net_use[1][i][0]])
received[net[0]] = NetUseModel(net_use[1][i][1] - net[1], net_use[1][i][2] - net[2], net_use[1][i][3] - net[3])
transmitted[net[0]] = NetUseModel(net_use[1][i][4] - net[4], net_use[1][i][5] - net[5], net_use[1][i][6] - net[6])
for key, net in received.items():
if net.bytes < 0 or net.packets < 0 or net.errors < 0:
print(["received", key, net.bytes, net.packets, net.errors])
for key, net in transmitted.items():
if net.bytes < 0 or net.packets < 0 or net.errors < 0:
print(["transmitted", key, net.bytes, net.packets, net.errors])
self.nucelar_monitor.dispatchers.get(AgentsDispatcher, "sql_server_agents").save(IterationModel(
key, hostnames, domain, key, hostnames, domain,
[InterfaceModel( [InterfaceModel(
i, name, is_ipv6, ip, mask, received[name], transmitted[name] i, name, is_ipv6, ip, mask, received[name], transmitted[name]
@ -51,6 +67,11 @@ class AgentsController(ControllerAbstract):
MemoryModel(*memory) MemoryModel(*memory)
)) ))
response.set_data({
"message": "Data saved successfully",
"key" : key
}, "application/json")
def windows(self:Self, request:RequestModel, response:ResponseModel) -> None: def windows(self:Self, request:RequestModel, response:ResponseModel) -> None:
key:str = request.get("key") key:str = request.get("key")
@ -71,7 +92,11 @@ class AgentsController(ControllerAbstract):
print([hostnames, domain, interfaces, disks, iterations, candle_times, cpu, memory, net_use]) print([hostnames, domain, interfaces, disks, iterations, candle_times, cpu, memory, net_use])
def test(self:Self, request:RequestModel, response:ResponseModel) -> None: def test(self:Self, request:RequestModel, response:ResponseModel) -> None:
response.set({
database:DatabaseAbstract = self.nucelar_monitor.databases.get("sql_server")
response.set_data({
"message": "Test successful", "message": "Test successful",
"key" : request.get("key") "key" : request.get("key"),
"data" : database.query("select top 10 * from information_schema.tables", {}).tables
}, "application/json") }, "application/json")

View File

@ -38,20 +38,32 @@ class AgentsDispatcher(DispatcherAbstract):
}) })
for interface in iteration.interfaces: for interface in iteration.interfaces:
database.query((
id:int = int(database.query((
"execute dbo.set_machine_interface_data " + "execute dbo.set_machine_interface_data " +
"{key}, {candle_start}, {candle_end}, {candle_interations}, " + "{key}, {name}, {is_ipv6}, {ip}, {mask}, {mounted}, @id output"
"{name}, {bytes}, {packages}, {errors}, {is_ipv6}, {ip}, {mask}"
), { ), {
"key" : iteration.key, "key" : iteration.key,
"name" : interface.name,
"is_ipv6" : interface.is_ipv6,
"ip" : interface.ip,
"mask" : interface.mask,
"mounted" : True
}).variables["id"])
_type:str
for _type in ("received", "transmitted"):
database.query((
"execute dbo.set_machine_interface_traffic " +
"{id}, {type}, {candle_start}, {candle_end}, " +
"{candle_interations}, {bytes}, {packets}, {errors}"
), {
"id" : id,
"type" : _type,
"candle_start" : iteration.candle_time.start, "candle_start" : iteration.candle_time.start,
"candle_end" : iteration.candle_time.end, "candle_end" : iteration.candle_time.end,
"candle_interations" : iteration.iterations, "candle_interations" : iteration.iterations,
"name" : interface.name, "bytes" : getattr(interface, _type).bytes,
"bytes" : interface.received.bytes + interface.transmitted.bytes, "packets" : getattr(interface, _type).packets,
"packages" : interface.received.packets + interface.transmitted.packets, "errors" : getattr(interface, _type).errors
"errors" : interface.received.errors + interface.transmitted.errors,
"is_ipv6" : interface.is_ipv6,
"ip" : interface.ip,
"mask" : interface.mask
}) })

View File

@ -3,7 +3,8 @@
from typing import Self, Any, Optional, Sequence from typing import Self, Any, Optional, Sequence
from re import Match as REMatch from re import Match as REMatch
from Assets.pyodbc import Connection as Connection, connect as connect, Cursor as Cursor import datetime
from pyodbc import Connection as Connection, connect as connect, Cursor as Cursor
from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface
from Abstracts.DatabaseAbstract import DatabaseAbstract from Abstracts.DatabaseAbstract import DatabaseAbstract
from Models.QueryResponseModel import QueryResponseModel from Models.QueryResponseModel import QueryResponseModel
@ -19,14 +20,14 @@ class SQLServerDriver(DatabaseAbstract):
super().__init__(nucelar_monitor, inputs) super().__init__(nucelar_monitor, inputs)
self.__connection:Connection|None = None self.__connection:Connection|None = None
self.__string_connection:str = Utils.string_variables(self.nucelar_monitor.settings.get(( self.__string_connection:str = Utils.string_variables(self.nucelar_monitor.settings.get((
"odbc_string_connection", "sql_string_connection", "string_connection" "odbc_string_connection", "sql_server_string_connection", "string_connection"
), inputs, "DRIVER={driver};SERVER={host},{port};UID={user};PWD={password};DATABASE={database}"), { ), inputs, "DRIVER={driver};SERVER={host},{port};UID={user};PWD={password};DATABASE={database}"), {
"driver" : self.nucelar_monitor.settings.get("sql_driver", inputs, "{ODBC Driver 17 for SQL Server}"), "driver" : self.nucelar_monitor.settings.get(("sql_driver", "driver"), inputs, "{ODBC Driver 17 for SQL Server}"),
"host" : self.nucelar_monitor.settings.get(("sql_host", "odbc_host"), inputs, "localhost"), "host" : self.nucelar_monitor.settings.get(("sql_host", "odbc_host", "host"), inputs, "localhost"),
"port" : self.nucelar_monitor.settings.get(("sql_port", "odbc_port"), inputs, 1433), "port" : self.nucelar_monitor.settings.get(("sql_port", "odbc_port", "port"), inputs, 1433),
"user" : self.nucelar_monitor.settings.get(("sql_user", "odbc_user"), inputs, "sa"), "user" : self.nucelar_monitor.settings.get(("sql_user", "odbc_user", "user"), inputs, "sa"),
"password" : self.nucelar_monitor.settings.get(("sql_password", "odbc_password"), inputs, "password"), "password" : self.nucelar_monitor.settings.get(("sql_password", "odbc_password", "password"), inputs, "password"),
"database" : self.nucelar_monitor.settings.get(("sql_database", "odbc_database"), inputs, "NucelarMonitor") "database" : self.nucelar_monitor.settings.get(("sql_database", "odbc_database", "database"), inputs, "NucelarMonitor")
}) })
def close(self:Self) -> bool: def close(self:Self) -> bool:
@ -58,16 +59,22 @@ class SQLServerDriver(DatabaseAbstract):
if key: if key:
return ( return (
"'" + str(parameters[key]).replace("'","''") + "'" if isinstance(parameters[key], str) else "'" + str(parameters[key]).replace("'","''") + "'" if isinstance(parameters[key], str) else
"'" + parameters[key].strftime("%Y-%m-%d %H:%M:%S") + "'" if isinstance(parameters[key], datetime.datetime) else
("1" if parameters[key] else "0") if isinstance(parameters[key], bool) else
str(parameters[key]) if key in parameters else matches.group(0)) str(parameters[key]) if key in parameters else matches.group(0))
key = matches.group(2) key = matches.group(2)
variables.append(key) print(key)
key in variables or variables.append(key)
return matches.group(0) return matches.group(0)
query = RE.ODBC_STRING_VARIABLE.sub(callback, query) query = RE.ODBC_STRING_VARIABLE.sub(callback, query)
print(variables)
return ( return (
"".join("declare @" + variable + " varchar(max)\n" for variable in variables) + "".join("declare @" + variable + " varchar(max)\n" for variable in variables) +
query + query +
@ -90,6 +97,7 @@ class SQLServerDriver(DatabaseAbstract):
self.__string_connection, self.__string_connection,
autocommit = True autocommit = True
) )
cursor = self.__connection.cursor() cursor = self.__connection.cursor()
query, variables = self.format_query(query, parameters) query, variables = self.format_query(query, parameters)
@ -108,6 +116,7 @@ class SQLServerDriver(DatabaseAbstract):
self.nucelar_monitor.exception(exception, "connection_exception", { self.nucelar_monitor.exception(exception, "connection_exception", {
"string_connection" : self.__string_connection "string_connection" : self.__string_connection
}) })
print(self.format_query(query, parameters))
finally: finally:
if cursor is not None: if cursor is not None:
cursor.close() cursor.close()

View File

@ -3,12 +3,12 @@
from typing import Self, Any from typing import Self, Any
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from Abstracts.DatabaseAbstract import DatabaseAbstract from Interfaces.Owners.DatabasesInterface import DatabasesInterface
class DatabasesManagerInterface(ABC): class DatabasesManagerInterface(ABC):
@abstractmethod @abstractmethod
def get(self:Self, key:str) -> type[DatabaseAbstract]|None:pass def get(self:Self, key:str) -> type[DatabasesInterface]|None:pass
@abstractmethod @abstractmethod
def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None:pass def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None:pass

View File

@ -3,9 +3,9 @@
from typing import Any, Self, TypeVar from typing import Any, Self, TypeVar
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from Abstracts.DispatcherAbstract import DispatcherAbstract from Interfaces.Owners.DispatchersInterface import DispatchersInterface
T = TypeVar("T", bound = DispatcherAbstract) T = TypeVar("T", bound = DispatchersInterface)
class DispatchersManagerInterface(ABC): class DispatchersManagerInterface(ABC):

View File

@ -0,0 +1,17 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from abc import ABC, abstractmethod
from typing import Self, Any, Optional, Sequence
from Models.QueryResponseModel import QueryResponseModel
class DatabasesInterface(ABC):
@abstractmethod
def close(self:Self) -> bool:pass
@abstractmethod
def query(self:Self,
query:str,
parameters:Optional[dict[str, Any|None]|Sequence[Any|None]] = None
) -> QueryResponseModel:pass

View File

@ -0,0 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from abc import ABC, abstractmethod
class DispatchersInterface(ABC):
pass

View File

@ -3,7 +3,7 @@
from typing import Self, Any from typing import Self, Any
from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface
from Abstracts.DatabaseAbstract import DatabaseAbstract from Interfaces.Owners.DatabasesInterface import DatabasesInterface
class DatabasesManager: class DatabasesManager:
@ -12,7 +12,7 @@ class DatabasesManager:
key:str key:str
self.__databases:dict[str, DatabaseAbstract] = {} self.__databases:dict[str, DatabasesInterface] = {}
for key in ( for key in (
"default_databases_files", "databases_files", "default_databases_files", "databases_files",
@ -20,34 +20,34 @@ class DatabasesManager:
): ):
self.add(self.nucelar_monitor.settings.get(key, None, []), True) self.add(self.nucelar_monitor.settings.get(key, None, []), True)
def get(self:Self, key:str) -> type[DatabaseAbstract]|None: def get(self:Self, key:str) -> type[DatabasesInterface]|None:
return self.__databases.get(key, None) return self.__databases.get(key, None)
def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None: def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None:
subinputs:dict[str, type[DatabaseAbstract]|dict[str, Any|None]] subinputs:dict[str, type[DatabasesInterface]|dict[str, Any|None]]
for subinputs in self.nucelar_monitor.files.load_json(inputs): for subinputs in self.nucelar_monitor.files.load_json(inputs):
key:str key:str
database:DatabaseAbstract|dict[str, Any|None] database:DatabasesInterface|dict[str, Any|None]
for key, database in subinputs.items(): for key, database in subinputs.items():
if isinstance(database, dict): if isinstance(database, dict):
database = self.nucelar_monitor.models.get( database = self.nucelar_monitor.models.get(
DatabaseAbstract, DatabasesInterface,
self.nucelar_monitor.settings.get(("database_type", "type"), database, "sql_server") self.nucelar_monitor.settings.get(("database_type", "type"), database, "sql_server")
)(self.nucelar_monitor, database) )(self.nucelar_monitor, database)
if database is None: if database is None:
continue continue
if database is not None and isinstance(database, DatabaseAbstract) and ( if database is not None and isinstance(database, DatabasesInterface) and (
overwrite or key not in self.__databases overwrite or key not in self.__databases
): ):
self.__databases[key] = database self.__databases[key] = database
def close(self:Self) -> None: def close(self:Self) -> None:
database:type[DatabaseAbstract] database:type[DatabasesInterface]
for database in self.__databases.values(): for database in self.__databases.values():
database.close() database.close()

View File

@ -3,9 +3,9 @@
from typing import Any, Self, TypeVar from typing import Any, Self, TypeVar
from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface from Interfaces.Application.NucelarMonitorInterface import NucelarMonitorInterface
from Abstracts.DispatcherAbstract import DispatcherAbstract from Interfaces.Owners.DispatchersInterface import DispatchersInterface
T = TypeVar("T", bound = DispatcherAbstract) T = TypeVar("T", bound = DispatchersInterface)
class DispatchersManager: class DispatchersManager:
@ -14,32 +14,32 @@ class DispatchersManager:
key:str key:str
self.__dispatcher:dict[str, DispatcherAbstract] = {} self.__dispatchers:dict[str, DispatchersInterface] = {}
for key in ( for key in (
"default_dispatcher_files", "dispatcher_files", "default_dispatchers_files", "dispatchers_files",
"default_dispatcher", "dispatcher" "default_dispatchers", "dispatchers"
): ):
self.add(self.nucelar_monitor.settings.get(key, None, []), True) self.add(self.nucelar_monitor.settings.get(key, None, []), True)
def get(self:Self, Type:type[T], key:str) -> T|None: def get(self:Self, Type:type[T], key:str) -> T|None:
if key in self.__dispatcher and isinstance(self.__dispatcher[key], Type): if key in self.__dispatchers and isinstance(self.__dispatchers[key], Type):
return self.__dispatcher[key] return self.__dispatchers[key]
return None return None
def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None: def add(self:Self, inputs:Any|None, overwrite:bool = False) -> None:
subinputs:dict[str, str|DispatcherAbstract] subinputs:dict[str, str|DispatchersInterface]
for subinputs in self.nucelar_monitor.files.load_json(inputs): for subinputs in self.nucelar_monitor.files.load_json(inputs):
key:str key:str
dispatcher:DispatcherAbstract|str dispatcher:DispatchersInterface|str
for key, dispatcher in subinputs.items(): for key, dispatcher in subinputs.items():
if isinstance(dispatcher, str): if isinstance(dispatcher, str):
dispatcher = self.nucelar_monitor.models.get(DispatcherAbstract, dispatcher)(self.nucelar_monitor) dispatcher = self.nucelar_monitor.models.get(DispatchersInterface, dispatcher)(self.nucelar_monitor)
if dispatcher is not None and isinstance(dispatcher, DispatcherAbstract) and ( if dispatcher is not None and isinstance(dispatcher, DispatchersInterface) and (
overwrite or key not in self.__dispatcher overwrite or key not in self.__dispatchers
): ):
self.__dispatcher[key] = dispatcher self.__dispatchers[key] = dispatcher

View File

@ -60,8 +60,6 @@ class SettingsManager:
subinputs:dict[str, Any|None] subinputs:dict[str, Any|None]
print(inputs)
for subinputs in self.nucelar_monitor.files.load_json(inputs): for subinputs in self.nucelar_monitor.files.load_json(inputs):
key:str key:str

View File

@ -1,20 +1,21 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import datetime
from typing import Self from typing import Self
class CPUModel: class CPUModel:
def __init__(self:Self, def __init__(self:Self,
_in:float, _in:float,
_out:float, _out:float,
maximum:float,
minimum:float, minimum:float,
maximum:float,
average:float average:float
) -> None: ) -> None:
self._in:float = _in self._in:float = _in
self.out:float = _out self.out:float = _out
self.maximum:float = maximum
self.minimum:float = minimum self.minimum:float = minimum
self.maximum:float = maximum
self.average:float = average self.average:float = average
class MemoryModel: class MemoryModel:
@ -22,16 +23,16 @@ class MemoryModel:
total:int, total:int,
_in:int, _in:int,
_out:int, _out:int,
maximum:int,
minimum:int, minimum:int,
average:float maximum:int,
average:int
) -> None: ) -> None:
self.total:int = total self.total:int = total
self._in:int = _in self._in:int = _in
self.out:int = _out self.out:int = _out
self.maximum:int = maximum
self.minimum:int = minimum self.minimum:int = minimum
self.average:float = average self.maximum:int = maximum
self.average:int = int(average)
class NetUseModel: class NetUseModel:
def __init__(self:Self, _bytes:int, packets:int, errors:int) -> None: def __init__(self:Self, _bytes:int, packets:int, errors:int) -> None:
@ -67,8 +68,8 @@ class DiskModel:
class CandleTimeModel: class CandleTimeModel:
def __init__(self:Self, start:int, end:int) -> None: def __init__(self:Self, start:int, end:int) -> None:
self.start:int = start self.start:datetime.datetime = datetime.datetime.fromtimestamp(start)
self.end:int = end self.end:datetime.datetime = datetime.datetime.fromtimestamp(end)
class IterationModel: class IterationModel:
def __init__(self:Self, def __init__(self:Self,

1
Python/requirements.txt Normal file
View File

@ -0,0 +1 @@
pyodbc==5.3.0

View File

@ -13,7 +13,7 @@ inputs:dict[str, dict[str, Any|None]] = {
"agents" : AgentsController, "agents" : AgentsController,
"sql_server" : SQLServerDriver, "sql_server" : SQLServerDriver,
"web_server" : WebServerDriver, "web_server" : WebServerDriver,
"agents_dispatcher" : AgentsDispatcher, "sql_server_agents" : AgentsDispatcher,
} }
} }

View File

@ -46,3 +46,15 @@ Datos de envío Debian:
6. `int`: Errores en envío actualmente. 6. `int`: Errores en envío actualmente.
La idea es procesar el uso de red en Python. La idea es procesar el uso de red en Python.
Para instalar el Driver cliente de SQL Server para usar con el Python ODBC sobre Debian.
```bash
#!/bin/bash
curl https://packages.microsoft.com/keys/microsoft.asc | sudo tee /etc/apt/trusted.gpg.d/microsoft.asc
sudo add-apt-repository "$(curl https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/prod.list)"
sudo apt update
sudo apt -y install msodbcsql18 mssql-tools18 unixodbc-dev
```

View File

@ -4,18 +4,19 @@ use NucelarMonitor
if object_id(N'dbo.tables_drop', N'P') is not null drop procedure dbo.tables_drop if object_id(N'dbo.tables_drop', N'P') is not null drop procedure dbo.tables_drop
go go
create procedure dbo.tables_drop as begin create procedure dbo.tables_drop as begin set nocount on
set nocount on -- Plain 2.
-- Level Plains.
if object_id(N'dbo.MachineInterfacesTrafficPlain', N'U') is not null drop table dbo.MachineInterfacesTrafficPlain if object_id(N'dbo.MachineInterfacesTrafficPlain', N'U') is not null drop table dbo.MachineInterfacesTrafficPlain
-- Plains 1.
if object_id(N'dbo.MachineInterfacesPlain', N'U') is not null drop table dbo.MachineInterfacesPlain if object_id(N'dbo.MachineInterfacesPlain', N'U') is not null drop table dbo.MachineInterfacesPlain
if object_id(N'dbo.MachineDisksPlain', N'U') is not null drop table dbo.MachineDisksPlain if object_id(N'dbo.MachineDisksPlain', N'U') is not null drop table dbo.MachineDisksPlain
-- Plains 0.
if object_id(N'dbo.MachinePlain', N'U') is not null drop table dbo.MachinePlain if object_id(N'dbo.MachinePlain', N'U') is not null drop table dbo.MachinePlain
-- Level 2. -- Level 2.
if object_id(N'dbo.MachineInterfacesData', N'U') is not null drop table dbo.MachineInterfacesData
if object_id(N'dbo.MachineInterfacesTraffic', N'U') is not null drop table dbo.MachineInterfacesTraffic if object_id(N'dbo.MachineInterfacesTraffic', N'U') is not null drop table dbo.MachineInterfacesTraffic
if object_id(N'dbo.MachineDisksSpace', N'U') is not null drop table dbo.MachineDisksSpace if object_id(N'dbo.MachineDisksSpace', N'U') is not null drop table dbo.MachineDisksSpace
if object_id(N'dbo.Exceptions', N'U') is not null drop table dbo.Exceptions if object_id(N'dbo.Exceptions', N'U') is not null drop table dbo.Exceptions

View File

@ -4,9 +4,7 @@ use NucelarMonitor
if object_id(N'dbo.tables_create', N'P') is not null drop procedure dbo.tables_create if object_id(N'dbo.tables_create', N'P') is not null drop procedure dbo.tables_create
go go
create procedure dbo.tables_create as begin create procedure dbo.tables_create as begin set nocount on
set nocount on
-- Level 0. -- Level 0.
if object_id(N'dbo.Machines', N'U') is null create table dbo.Machines( if object_id(N'dbo.Machines', N'U') is null create table dbo.Machines(
@ -16,8 +14,8 @@ create procedure dbo.tables_create as begin
date_in datetime not null constraint machines_df_date_in default getdate(), date_in datetime not null constraint machines_df_date_in default getdate(),
date_out datetime, date_out datetime,
constraint machines_pk primary key clustered (id), constraint machines_pk primary key clustered (id),
constraint machines_uk_key unique ([key]), constraint machines_uk_key unique nonclustered ([key] asc) with (fillfactor = 90),
constraint machines_ck_key check ([key] like '[a-zA-Z0-9][a-zA-Z0-9_]{0,31}') constraint machines_ck_key check ([key] not like '%[^a-zA-Z0-9_]%' and [key] like '[a-zA-Z_]%')
) )
if object_id(N'dbo.Types', N'U') is null create table dbo.Types( if object_id(N'dbo.Types', N'U') is null create table dbo.Types(
@ -28,7 +26,7 @@ create procedure dbo.tables_create as begin
date_out datetime, date_out datetime,
constraint types_pk primary key clustered (id), constraint types_pk primary key clustered (id),
constraint types_uk_name unique nonclustered ([name] asc) with (fillfactor = 90), constraint types_uk_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint types_ck_name check ([name] like '[a-zA-Z_][a-zA-Z0-9_]{0,31}') constraint types_ck_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
) )
if object_id(N'dbo.Domains', N'U') is null create table dbo.Domains( if object_id(N'dbo.Domains', N'U') is null create table dbo.Domains(
@ -39,10 +37,9 @@ create procedure dbo.tables_create as begin
date_out datetime, date_out datetime,
constraint domains_pk primary key clustered (id), constraint domains_pk primary key clustered (id),
constraint domains_uk_domain unique nonclustered (domain asc) with (fillfactor = 90), constraint domains_uk_domain unique nonclustered (domain asc) with (fillfactor = 90),
constraint domains_ck_domain check ([domain] like '[a-zA-Z0-9_-.]{1,64}') constraint domains_ck_domain check (len(domain) > 0 and domain not like '%[^a-zA-Z0-9_-.]%')
) )
if object_id(N'dbo.Hostnames', N'U') is null create table dbo.Hostnames( if object_id(N'dbo.Hostnames', N'U') is null create table dbo.Hostnames(
id integer not null identity(1, 1), id integer not null identity(1, 1),
[name] varchar(32) not null, [name] varchar(32) not null,
@ -51,7 +48,7 @@ create procedure dbo.tables_create as begin
date_out datetime, date_out datetime,
constraint hostnames_pk primary key clustered (id), constraint hostnames_pk primary key clustered (id),
constraint hostnames_uk_name unique nonclustered ([name] asc) with (fillfactor = 90), constraint hostnames_uk_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint hostnames_ck_name check ([name] like '[a-zA-Z0-9_-]{1,32}') constraint hostnames_ck_name check (len([name]) > 0 and [name] not like '%[^a-zA-Z0-9_-]%')
) )
if object_id(N'dbo.Disks', N'U') is null create table dbo.Disks( if object_id(N'dbo.Disks', N'U') is null create table dbo.Disks(
@ -64,11 +61,10 @@ create procedure dbo.tables_create as begin
date_out datetime, date_out datetime,
constraint disks_pk primary key clustered (id), constraint disks_pk primary key clustered (id),
-- constraint disks_uk_name unique nonclustered ([name] asc, mountpoint asc) with (fillfactor = 90), -- constraint disks_uk_name unique nonclustered ([name] asc, mountpoint asc) with (fillfactor = 90),
constraint disks_ck_name check ( constraint disks_ck_name check ((
[name] like '[a-zA-Z0-9_-]{1,32}' or len([name]) > 0 and [name] not like '%[^a-zA-Z0-9_-]%'
mountpoint like '[A-Z]:' ) or [name] like '[A-Z]:'),
), constraint disks_ck_size check (size >= 0 and size < power(cast(2 as bigint), 53)),
constraint disks_ck_size check (size >= 0 and size < power(2, 53)),
constraint disks_ck_mountpoint check ( constraint disks_ck_mountpoint check (
mountpoint like '/%' or mountpoint like '/%' or
mountpoint like '[a-zA-Z]:\%' or mountpoint like '[a-zA-Z]:\%' or
@ -84,7 +80,7 @@ create procedure dbo.tables_create as begin
date_out datetime, date_out datetime,
constraint interfaces_pk primary key clustered (id), constraint interfaces_pk primary key clustered (id),
-- constraint interfaces_uk_machine_name unique nonclustered ([name] asc) with (fillfactor = 90), -- constraint interfaces_uk_machine_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint interfaces_ck_name check ([name] like '[a-zA-Z0-9_-]{1,32}') constraint interfaces_ck_name check (len([name]) > 0 and [name] not like '%[^a-zA-Z0-9_-]%')
) )
if object_id(N'dbo.CandlesTimes', N'U') is null create table dbo.CandlesTimes( if object_id(N'dbo.CandlesTimes', N'U') is null create table dbo.CandlesTimes(
@ -96,7 +92,8 @@ create procedure dbo.tables_create as begin
date_out datetime, date_out datetime,
constraint candles_times_pk primary key clustered (id), constraint candles_times_pk primary key clustered (id),
constraint candles_times_uk_from_to unique nonclustered ([from] asc, [to] asc) with (fillfactor = 90), constraint candles_times_uk_from_to unique nonclustered ([from] asc, [to] asc) with (fillfactor = 90),
constraint candles_times_ck_from_to check ([from] < [to]) constraint candles_times_ck_from_to check ([from] < [to]),
constraint candles_times_ck_iterations check (iterations > 0)
) )
if object_id(N'dbo.BigData', N'U') is null create table dbo.BigData( if object_id(N'dbo.BigData', N'U') is null create table dbo.BigData(
@ -115,7 +112,8 @@ create procedure dbo.tables_create as begin
date_in datetime not null constraint messages_df_date_in default getdate(), date_in datetime not null constraint messages_df_date_in default getdate(),
date_out datetime, date_out datetime,
constraint messages_pk primary key clustered (id), constraint messages_pk primary key clustered (id),
constraint messages_ck_key check ([key] like '[a-zA-Z_][a-zA-Z0-9_]{0,127}') constraint messages_uk_key unique nonclustered ([key] asc) with (fillfactor = 90),
constraint messages_ck_key check ([key] not like '%[^a-zA-Z0-9_]%' and [key] like '[a-zA-Z_]%')
) )
if object_id(N'dbo.Databases', N'U') is null create table dbo.Databases( if object_id(N'dbo.Databases', N'U') is null create table dbo.Databases(
@ -125,7 +123,7 @@ create procedure dbo.tables_create as begin
date_out datetime, date_out datetime,
constraint databases_pk primary key clustered (id), constraint databases_pk primary key clustered (id),
constraint databases_uk_name unique nonclustered ([name] asc) with (fillfactor = 90), constraint databases_uk_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint databases_ck_name check ([name] like '[a-zA-Z_][a-zA-Z0-9_]{0,63}') constraint databases_ck_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
) )
-- Level 1. -- Level 1.
@ -189,29 +187,29 @@ create procedure dbo.tables_create as begin
on update no action on update no action
on delete no action, on delete no action,
constraint machine_ram_ck_memory_total check ( constraint machine_ram_ck_memory_total check (
total between 0 and power(2, 53) - 1 total between 0 and power(cast(2 as bigint), 53) - 1
), ),
constraint machine_ram_ck_memory_in check ( constraint machine_ram_ck_memory_in check (
[in] between 0 and power(2, 53) - 1 and [in] between 0 and power(cast(2 as bigint), 53) - 1 and
[in] between minimum and maximum and [in] between minimum and maximum and
[in] <= total [in] <= total
), ),
constraint machine_ram_ck_memory_out check ( constraint machine_ram_ck_memory_out check (
[out] between 0 and power(2, 53) - 1 and [out] between 0 and power(cast(2 as bigint), 53) - 1 and
[out] between minimum and maximum and [out] between minimum and maximum and
[out] <= total [out] <= total
), ),
constraint machine_ram_ck_memory_minimum check ( constraint machine_ram_ck_memory_minimum check (
minimum between 0 and power(2, 53) - 1 and minimum between 0 and power(cast(2 as bigint), 53) - 1 and
minimum <= total and minimum <= total and
minimum <= maximum minimum <= maximum
), ),
constraint machine_ram_ck_memory_maximum check ( constraint machine_ram_ck_memory_maximum check (
maximum between 0 and power(2, 53) - 1 and maximum between 0 and power(cast(2 as bigint), 53) - 1 and
maximum between total and minimum maximum between minimum and total
), ),
constraint machine_ram_ck_memory_average check ( constraint machine_ram_ck_memory_average check (
average between 0 and power(2, 53) - 1 and average between 0 and power(cast(2 as bigint), 53) - 1 and
average between minimum and maximum and average between minimum and maximum and
average <= total average <= total
) )
@ -240,6 +238,9 @@ create procedure dbo.tables_create as begin
[interface] integer not null, [interface] integer not null,
belongs bit not null constraint machine_interfaces_df_belongs default 1, belongs bit not null constraint machine_interfaces_df_belongs default 1,
mounted bit not null constraint machine_interfaces_df_mounted default 1, mounted bit not null constraint machine_interfaces_df_mounted default 1,
is_ipv6 bit not null constraint machine_interfaces_data_df_is_ipv6 default 0,
[address] varchar(45) not null,
mask tinyint not null,
date_in datetime not null constraint machine_interfaces_df_date_in default getdate(), date_in datetime not null constraint machine_interfaces_df_date_in default getdate(),
date_out datetime, date_out datetime,
constraint machine_interfaces_pk primary key clustered (id), constraint machine_interfaces_pk primary key clustered (id),
@ -262,7 +263,7 @@ create procedure dbo.tables_create as begin
on update no action on update no action
on delete no action, on delete no action,
constraint procedures_uk_name unique nonclustered ([database] asc, [name] asc) with (fillfactor = 90), constraint procedures_uk_name unique nonclustered ([database] asc, [name] asc) with (fillfactor = 90),
constraint procedures_ck_name check ([name] like '[a-zA-Z_][a-zA-Z0-9_]{0,63}') constraint procedures_ck_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
) )
-- Level 2. -- Level 2.
@ -281,7 +282,7 @@ create procedure dbo.tables_create as begin
on update no action on update no action
on delete no action, on delete no action,
constraint machine_disks_space_ck_free check ( constraint machine_disks_space_ck_free check (
free between 0 and power(2, 53) - 1 -- and free between 0 and power(cast(2 as bigint), 53) - 1 -- and
-- free <= isnull(( -- free <= isnull((
-- select top 1 disks.[size] -- select top 1 disks.[size]
-- from dbo.Disks disks -- from dbo.Disks disks
@ -301,7 +302,7 @@ create procedure dbo.tables_create as begin
candle_time integer not null, candle_time integer not null,
[type] integer not null, [type] integer not null,
bytes bigint not null, bytes bigint not null,
packages integer not null, packets integer not null,
errors integer not null, errors integer not null,
date_in datetime not null constraint machine_interfaces_traffic_df_date_in default getdate(), date_in datetime not null constraint machine_interfaces_traffic_df_date_in default getdate(),
date_out datetime, date_out datetime,
@ -316,40 +317,40 @@ create procedure dbo.tables_create as begin
on update no action on update no action
on delete no action, on delete no action,
constraint machine_interfaces_traffic_ck_bytes check ( constraint machine_interfaces_traffic_ck_bytes check (
bytes between 0 and power(2, 53) - 1 bytes between 0 and power(cast(2 as bigint), 53) - 1
), ),
constraint machine_interfaces_traffic_ck_packages check ( constraint machine_interfaces_traffic_ck_packets check (
packages between 0 and power(2, 31) - 1 packets between 0 and power(2, 30) - 1
), ),
constraint machine_interfaces_traffic_ck_errors check ( constraint machine_interfaces_traffic_ck_errors check (
errors between 0 and power(2, 31) - 1 errors between 0 and power(2, 30) - 1
) )
) )
if object_id(N'dbo.MachineInterfacesData', N'U') is null create table dbo.MachineInterfacesData( -- if object_id(N'dbo.MachineInterfacesData', N'U') is null create table dbo.MachineInterfacesData(
id integer not null identity(1, 1), -- id integer not null identity(1, 1),
machine_interface integer not null, -- machine_interface integer not null,
is_ipv6 bit not null constraint machine_interfaces_data_df_is_ipv6 default 0, -- is_ipv6 bit not null constraint machine_interfaces_data_df_is_ipv6 default 0,
[address] varchar(45) not null, -- [address] varchar(45) not null,
mask tinyint not null, -- mask tinyint not null,
date_in datetime not null constraint machine_interfaces_data_df_date_in default getdate(), -- date_in datetime not null constraint machine_interfaces_data_df_date_in default getdate(),
date_out datetime, -- date_out datetime,
constraint machine_interfaces_data_pk primary key clustered (id), -- constraint machine_interfaces_data_pk primary key clustered (id),
constraint machine_interfaces_data_fk_machine_interface foreign key (machine_interface) references dbo.MachineInterfaces(id) -- constraint machine_interfaces_data_fk_machine_interface foreign key (machine_interface) references dbo.MachineInterfaces(id)
on update no action -- on update no action
on delete no action, -- on delete no action,
constraint machine_interfaces_data_ck_is_ipv6 check ( -- constraint machine_interfaces_data_ck_is_ipv6 check (
(is_ipv6 = 0 and [address] like '[0-9]%.%.%.%') or -- (is_ipv6 = 0 and [address] like '[0-9]%.%.%.%') or
(is_ipv6 = 1 and [address] like '%:%') -- (is_ipv6 = 1 and [address] like '%:%')
), -- ),
constraint machine_interfaces_data_ck_address check ( -- constraint machine_interfaces_data_ck_address check (
([address] like '[0-9]%.%.%.%' and mask between 0 and 32) or -- ([address] like '[0-9]%.%.%.%' and mask between 0 and 32) or
([address] like '%:%' and mask between 0 and 128) -- ([address] like '%:%' and mask between 0 and 128)
), -- ),
constraint machine_interfaces_data_ck_mask check ( -- constraint machine_interfaces_data_ck_mask check (
(mask between 0 and (case when is_ipv6 = 1 then 128 else 32 end)) -- (mask between 0 and (case when is_ipv6 = 1 then 128 else 32 end))
) -- )
) -- )
if object_id(N'dbo.Exceptions', N'U') is null create table dbo.Exceptions( if object_id(N'dbo.Exceptions', N'U') is null create table dbo.Exceptions(
id integer not null identity(1, 1), id integer not null identity(1, 1),
@ -376,7 +377,7 @@ create procedure dbo.tables_create as begin
on delete no action on delete no action
) )
-- Level Plains 1. -- Level Plains 0.
if object_id(N'dbo.MachinePlain', N'U') is null create table dbo.MachinePlain( if object_id(N'dbo.MachinePlain', N'U') is null create table dbo.MachinePlain(
id integer not null identity(1, 1), id integer not null identity(1, 1),
[key] varchar(32) not null, [key] varchar(32) not null,
@ -410,32 +411,32 @@ create procedure dbo.tables_create as begin
constraint machine_plain_fk_machine_cpu foreign key (machine_cpu) references dbo.MachineCPU(id) constraint machine_plain_fk_machine_cpu foreign key (machine_cpu) references dbo.MachineCPU(id)
on update no action on update no action
on delete no action, on delete no action,
constraint machine_plain_uk_key unique ([key]), constraint machine_plain_uk_key unique nonclustered ([key] asc) with (fillfactor = 90),
constraint machine_plain_ck_key check ([key] like '[a-zA-Z0-9][a-zA-Z0-9_]{0,31}'), constraint machine_plain_ck_key check ([key] not like '%[^a-zA-Z0-9_]%' and [key] like '[a-zA-Z_]%'),
constraint machine_plain_ck_memory_total check ( constraint machine_plain_ck_memory_total check (
ram_total between 0 and power(2, 53) - 1 ram_total between 0 and power(cast(2 as bigint), 53) - 1
), ),
constraint machine_plain_ck_memory_in check ( constraint machine_plain_ck_memory_in check (
ram_in between 0 and power(2, 53) - 1 and ram_in between 0 and power(cast(2 as bigint), 53) - 1 and
ram_in between ram_minimum and ram_maximum and ram_in between ram_minimum and ram_maximum and
ram_in <= ram_total ram_in <= ram_total
), ),
constraint machine_plain_ck_memory_out check ( constraint machine_plain_ck_memory_out check (
ram_out between 0 and power(2, 53) - 1 and ram_out between 0 and power(cast(2 as bigint), 53) - 1 and
ram_out between ram_minimum and ram_maximum and ram_out between ram_minimum and ram_maximum and
ram_out <= ram_total ram_out <= ram_total
), ),
constraint machine_plain_ck_memory_minimum check ( constraint machine_plain_ck_memory_minimum check (
ram_minimum between 0 and power(2, 53) - 1 and ram_minimum between 0 and power(cast(2 as bigint), 53) - 1 and
ram_minimum <= ram_total and ram_minimum <= ram_total and
ram_minimum <= ram_maximum ram_minimum <= ram_maximum
), ),
constraint machine_plain_ck_memory_maximum check ( constraint machine_plain_ck_memory_maximum check (
ram_maximum between 0 and power(2, 53) - 1 and ram_maximum between 0 and power(cast(2 as bigint), 53) - 1 and
ram_maximum between ram_total and ram_minimum ram_maximum between ram_minimum and ram_total
), ),
constraint machine_plain_ck_memory_average check ( constraint machine_plain_ck_memory_average check (
ram_average between 0 and power(2, 53) - 1 and ram_average between 0 and power(cast(2 as bigint), 53) - 1 and
ram_average between ram_minimum and ram_maximum and ram_average between ram_minimum and ram_maximum and
ram_average <= ram_total ram_average <= ram_total
), ),
@ -464,10 +465,11 @@ create procedure dbo.tables_create as begin
-- Level Plains 1. -- Level Plains 1.
if object_id(N'dbo.MachineInterfacesPlain', N'U') is null create table dbo.MachineInterfacesPlain( if object_id(N'dbo.MachineInterfacesPlain', N'U') is null create table dbo.MachineInterfacesPlain(
id integer not null identity(1, 1), id integer not null identity(1, 1),
plain integer not null,
machine integer not null, machine integer not null,
interface integer not null, interface integer not null,
machine_interface integer not null, machine_interface integer not null,
[name] varchar(32) not null, mounted bit not null constraint machine_interfaces_plain_df_mounted default 1,
is_ipv6 bit not null constraint machine_interfaces_plain_df_is_ipv6 default 0, is_ipv6 bit not null constraint machine_interfaces_plain_df_is_ipv6 default 0,
[address] varchar(45) not null, [address] varchar(45) not null,
mask tinyint not null, mask tinyint not null,
@ -475,41 +477,20 @@ create procedure dbo.tables_create as begin
date_in datetime not null constraint machine_interfaces_plain_df_date_in default getdate(), date_in datetime not null constraint machine_interfaces_plain_df_date_in default getdate(),
date_out datetime, date_out datetime,
constraint machine_interfaces_plain_pk primary key clustered (id), constraint machine_interfaces_plain_pk primary key clustered (id),
constraint machine_interfaces_plain_fk_plain foreign key (plain) references dbo.MachinePlain(id)
on update no action
on delete no action,
constraint machine_interfaces_plain_fk_machine foreign key (machine) references dbo.Machines(id) constraint machine_interfaces_plain_fk_machine foreign key (machine) references dbo.Machines(id)
on update no action on update no action
on delete no action, on delete no action,
constraint machine_interfaces_plain_fk_interface foreign key (interface) references dbo.Interfaces(id) constraint machine_interfaces_plain_fk_interface foreign key (interface) references dbo.Interfaces(id)
on update no action on update no action
on delete no action, on delete no action,
constraint machine_interfaces_plain_fk_machine_interface foreign key (machine_interface) references dbo.MachineInterfaces(id)
on update no action
on delete no action,
constraint machine_interfaces_plain_uk_machine_interface unique nonclustered (machine asc, [interface] asc) with (fillfactor = 90), constraint machine_interfaces_plain_uk_machine_interface unique nonclustered (machine asc, [interface] asc) with (fillfactor = 90),
-- constraint machine_interfaces_plain_uk_machine_name unique nonclustered ([name] asc) with (fillfactor = 90), -- constraint machine_interfaces_plain_uk_machine_name unique nonclustered ([name] asc) with (fillfactor = 90)
constraint machine_interfaces_plain_ck_name check ([name] like '[a-zA-Z0-9_-]{1,32}'),
constraint machine_interfaces_plain_ck_interface check ([interface] like '[a-zA-Z0-9_-]{1,32}')
)
if object_id(N'dbo.MachineInterfacesTrafficPlain', N'U') is null create table dbo.MachineInterfacesTrafficPlain(
id integer not null identity(1, 1),
machine_interface integer not null,
candle_time integer not null,
[type] integer not null,
bytes bigint not null,
packages integer not null,
errors integer not null,
date_in datetime not null constraint machine_interfaces_traffic_plain_df_date_in default getdate(),
date_out datetime,
constraint machine_interfaces_traffic_plain_pk primary key clustered (id),
constraint machine_interfaces_traffic_plain_fk_machine_interface foreign key (machine_interface) references dbo.MachineInterfacesPlain(id)
on update no action
on delete no action,
constraint machine_interfaces_traffic_plain_fk_candle_time foreign key (candle_time) references dbo.CandlesTimes(id)
on update no action
on delete no action,
constraint machine_interfaces_traffic_plain_fk_type foreign key ([type]) references dbo.Types(id)
on update no action
on delete no action,
constraint machine_interfaces_traffic_plain_ck_bytes check (bytes between 0 and power(2, 53) - 1),
constraint machine_interfaces_traffic_plain_ck_packages check (packages between 0 and power(2, 31) - 1),
constraint machine_interfaces_traffic_plain_ck_errors check (errors between 0 and power(2, 31) - 1)
) )
if object_id(N'dbo.MachineDisksPlain', N'U') is null create table dbo.MachineDisksPlain( if object_id(N'dbo.MachineDisksPlain', N'U') is null create table dbo.MachineDisksPlain(
@ -538,22 +519,47 @@ create procedure dbo.tables_create as begin
on delete no action, on delete no action,
constraint machine_disks_plain_uk_machine_disk unique nonclustered (machine asc, [disk] asc) with (fillfactor = 90), constraint machine_disks_plain_uk_machine_disk unique nonclustered (machine asc, [disk] asc) with (fillfactor = 90),
-- constraint machine_disks_plain_uk_name unique nonclustered ([name] asc, mountpoint asc) with (fillfactor = 90), -- constraint machine_disks_plain_uk_name unique nonclustered ([name] asc, mountpoint asc) with (fillfactor = 90),
constraint machine_disks_plain_ck_name check ( constraint machine_disks_plain_ck_name check ((
[name] like '[a-zA-Z0-9_-]{1,32}' or len([name]) > 0 and [name] not like '%[^a-zA-Z0-9_-]%'
mountpoint like '[A-Z]:' ) or [name] like '[A-Z]:'),
), constraint machine_disks_plain_ck_size check (size >= 0 and size < power(cast(2 as bigint), 53)),
constraint machine_disks_plain_ck_size check (size >= 0 and size < power(2, 53)),
constraint machine_disks_plain_ck_mountpoint check ( constraint machine_disks_plain_ck_mountpoint check (
mountpoint like '/%' or mountpoint like '/%' or
mountpoint like '[a-zA-Z]:\%' or mountpoint like '[a-zA-Z]:\%' or
mountpoint like '\\%' mountpoint like '\\%'
), ),
constraint machine_disks_plain_ck_free check ( constraint machine_disks_plain_ck_free check (
free between 0 and power(2, 53) - 1 and free between 0 and power(cast(2 as bigint), 53) - 1 and
free <= [size] free <= [size]
) )
) )
-- Plain 2.
if object_id(N'dbo.MachineInterfacesTrafficPlain', N'U') is null create table dbo.MachineInterfacesTrafficPlain(
id integer not null identity(1, 1),
plain integer not null,
candle_time integer not null,
[type] integer not null,
bytes bigint not null,
packets integer not null,
errors integer not null,
date_in datetime not null constraint machine_interfaces_traffic_plain_df_date_in default getdate(),
date_out datetime,
constraint machine_interfaces_traffic_plain_pk primary key clustered (id),
constraint machine_interfaces_traffic_plain_fk_plain foreign key (plain) references dbo.MachineInterfacesPlain(id)
on update no action
on delete no action,
constraint machine_interfaces_traffic_plain_fk_candle_time foreign key (candle_time) references dbo.CandlesTimes(id)
on update no action
on delete no action,
constraint machine_interfaces_traffic_plain_fk_type foreign key ([type]) references dbo.Types(id)
on update no action
on delete no action,
constraint machine_interfaces_traffic_plain_ck_bytes check (bytes between 0 and power(cast(2 as bigint), 53) - 1),
constraint machine_interfaces_traffic_plain_ck_packets check (packets between 0 and power(2, 30) - 1),
constraint machine_interfaces_traffic_plain_ck_errors check (errors between 0 and power(2, 30) - 1)
)
end end
go go

View File

@ -4,9 +4,581 @@ use NucelarMonitor
if object_id(N'dbo.tables_update', N'P') is not null drop procedure dbo.tables_update if object_id(N'dbo.tables_update', N'P') is not null drop procedure dbo.tables_update
go go
create procedure dbo.tables_update as begin create procedure dbo.tables_update as begin set nocount on
set nocount on declare @database varchar(64) = 'NucelarMonitor'
-- Level 0.
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Machines' and column_name = 'key') is null
alter table dbo.Machines add
[key] varchar(32) not null,
constraint machines_uk_key unique nonclustered ([key] asc) with (fillfactor = 90),
constraint machines_ck_key check ([key] not like '%[^a-zA-Z0-9_]%' and [key] like '[a-zA-Z_]%')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Machines' and column_name = 'description') is null
alter table dbo.Machines add [description] varchar(512)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Types' and column_name = 'name') is null
alter table dbo.Types add
[name] varchar(32) not null,
constraint types_uk_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint types_ck_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Types' and column_name = 'description') is null
alter table dbo.Types add [description] varchar(512)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Domains' and column_name = 'domain') is null
alter table dbo.Domains add
domain varchar(64) not null,
constraint domains_uk_domain unique nonclustered (domain asc) with (fillfactor = 90),
constraint domains_ck_domain check (len(domain) > 0 and domain not like '%[^a-zA-Z0-9_-.]%')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Domains' and column_name = 'description') is null
alter table dbo.Domains add [description] varchar(512)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Hostnames' and column_name = 'name') is null
alter table dbo.Hostnames add
[name] varchar(32) not null,
constraint hostnames_uk_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint hostnames_ck_name check (len([name]) > 0 and [name] not like '%[^a-zA-Z0-9_-]%')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Hostnames' and column_name = 'description') is null
alter table dbo.Hostnames add [description] varchar(512)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Disks' and column_name = 'name') is null
alter table dbo.Disks add
[name] varchar(32) not null,
constraint disks_ck_name check ((
len([name]) > 0 and [name] not like '%[^a-zA-Z0-9_-]%'
) or [name] like '[A-Z]:')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Disks' and column_name = 'size') is null
alter table dbo.Disks add
[size] bigint not null,
constraint disks_ck_size check (size >= 0 and size < power(cast(2 as bigint), 53))
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Disks' and column_name = 'mountpoint') is null
alter table dbo.Disks add
mountpoint varchar(128) not null,
constraint disks_ck_mountpoint check (
mountpoint like '/%' or
mountpoint like '[a-zA-Z]:\%' or
mountpoint like '\\%'
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Disks' and column_name = 'description') is null
alter table dbo.Disks add [description] varchar(512)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Interfaces' and column_name = 'name') is null
alter table dbo.Interfaces add
[name] varchar(32) not null,
constraint interfaces_ck_name check (len([name]) > 0 and [name] not like '%[^a-zA-Z0-9_-]%')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Interfaces' and column_name = 'description') is null
alter table dbo.Interfaces add [description] varchar(512)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'CandlesTimes' and column_name = 'from') is null
alter table dbo.CandlesTimes add
[from] datetime not null,
constraint candles_times_ck_from check ([from] < [to])
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'CandlesTimes' and column_name = 'to') is null
alter table dbo.CandlesTimes add
[to] datetime not null,
constraint candles_times_ck_to check ([from] < [to])
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'CandlesTimes' and column_name = 'iterations') is null
alter table dbo.CandlesTimes add
iterations integer not null,
constraint candles_times_ck_iterations check (iterations > 0)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'BigData' and column_name = 'hash') is null
alter table dbo.BigData add
[hash] binary(64) not null,
constraint big_data_uk_hash unique nonclustered ([hash] asc) with (fillfactor = 90)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'BigData' and column_name = 'value') is null
alter table dbo.BigData add [value] varchar(max) not null
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Messages' and column_name = 'key') is null
alter table dbo.Messages add
[key] varchar(128) not null,
constraint messages_uk_key unique nonclustered ([key] asc) with (fillfactor = 90),
constraint messages_ck_key check ([key] not like '%[^a-zA-Z0-9_]%' and [key] like '[a-zA-Z_]%')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Databases' and column_name = 'name') is null
alter table dbo.Databases add
[name] varchar(64) not null,
constraint databases_uk_name unique nonclustered ([name] asc) with (fillfactor = 90),
constraint databases_ck_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
-- Level 1.
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineCPU' and column_name = 'machine') is null
alter table dbo.MachineCPU add
machine integer not null,
constraint machine_cpu_fk_machine foreign key (machine) references dbo.Machines(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineCPU' and column_name = 'candle_time') is null
alter table dbo.MachineCPU add
candle_time integer not null,
constraint machine_cpu_fk_candle_time foreign key (candle_time) references dbo.CandlesTimes(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineCPU' and column_name = 'in') is null
alter table dbo.MachineCPU add
[in] float not null,
constraint machine_cpu_ck_cpu_in check (
[in] between 0 and 100 and
[in] between minimum and maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineCPU' and column_name = 'out') is null
alter table dbo.MachineCPU add
[out] float not null,
constraint machine_cpu_ck_cpu_out check (
[out] between 0 and 100 and
[out] between minimum and maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineCPU' and column_name = 'minimum') is null
alter table dbo.MachineCPU add
minimum float not null,
constraint machine_cpu_ck_cpu_minimum check (
minimum between 0 and 100 and
minimum <= maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineCPU' and column_name = 'maximum') is null
alter table dbo.MachineCPU add
maximum float not null,
constraint machine_cpu_ck_cpu_maximum check (
maximum between 0 and 100 and
maximum >= minimum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineCPU' and column_name = 'average') is null
alter table dbo.MachineCPU add
average float not null,
constraint machine_cpu_ck_cpu_average check (
average between 0 and 100 and
average between minimum and maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineRAM' and column_name = 'machine') is null
alter table dbo.MachineRAM add
machine integer not null,
constraint machine_ram_fk_machine foreign key (machine) references dbo.Machines(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineRAM' and column_name = 'candle_time') is null
alter table dbo.MachineRAM add
candle_time integer not null,
constraint machine_ram_fk_candle_time foreign key (candle_time) references dbo.CandlesTimes(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineRAM' and column_name = 'total') is null
alter table dbo.MachineRAM add
total float not null,
constraint machine_ram_ck_ram_total check (
total between 0 and power(cast(2 as bigint), 53) - 1
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineRAM' and column_name = 'in') is null
alter table dbo.MachineRAM add
[in] float not null,
constraint machine_ram_ck_ram_in check (
[in] between 0 and power(cast(2 as bigint), 53) - 1 and
[in] between minimum and maximum and
[in] <= total
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineRAM' and column_name = 'out') is null
alter table dbo.MachineRAM add
[out] float not null,
constraint machine_ram_ck_ram_out check (
[out] between 0 and power(cast(2 as bigint), 53) - 1 and
[out] between minimum and maximum and
[out] <= total
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineRAM' and column_name = 'minimum') is null
alter table dbo.MachineRAM add
minimum float not null,
constraint machine_ram_ck_ram_minimum check (
minimum between 0 and power(cast(2 as bigint), 53) - 1 and
minimum <= total and
minimum <= maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineRAM' and column_name = 'maximum') is null
alter table dbo.MachineRAM add
maximum float not null,
constraint machine_ram_ck_ram_maximum check (
maximum between 0 and power(cast(2 as bigint), 53) - 1 and
maximum between minimum and total
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineRAM' and column_name = 'average') is null
alter table dbo.MachineRAM add
average float not null,
constraint machine_ram_ck_ram_average check (
average between 0 and power(cast(2 as bigint), 53) - 1 and
average between minimum and maximum and
average <= total
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisks' and column_name = 'machine') is null
alter table dbo.MachineDisks add
machine integer not null,
constraint machine_disks_fk_machine foreign key (machine) references dbo.Machines(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisks' and column_name = 'disk') is null
alter table dbo.MachineDisks add
[disk] integer not null,
constraint machine_disks_fk_disk foreign key ([disk]) references dbo.Disks(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisks' and column_name = 'belongs') is null
alter table dbo.MachineDisks add belongs bit not null constraint machine_disks_df_belongs default 1
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisks' and column_name = 'mounted') is null
alter table dbo.MachineDisks add mounted bit not null constraint machine_disks_df_mounted default 1
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfaces' and column_name = 'machine') is null
alter table dbo.MachineInterfaces add
machine integer not null,
constraint machine_interfaces_fk_machine foreign key (machine) references dbo.Machines(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfaces' and column_name = 'interface') is null
alter table dbo.MachineInterfaces add
[interface] integer not null,
constraint machine_interfaces_fk_interface foreign key ([interface]) references dbo.Interfaces(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfaces' and column_name = 'belongs') is null
alter table dbo.MachineInterfaces add belongs bit not null constraint machine_interfaces_df_belongs default 1
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfaces' and column_name = 'mounted') is null
alter table dbo.MachineInterfaces add mounted bit not null constraint machine_interfaces_df_mounted default 1
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfaces' and column_name = 'is_ipv6') is null
alter table dbo.MachineInterfaces add is_ipv6 bit not null constraint machine_interfaces_df_is_ipv6 default 0
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfaces' and column_name = 'address') is null
alter table dbo.MachineInterfaces add [address] varchar(45) not null
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfaces' and column_name = 'mask') is null
alter table dbo.MachineInterfaces add mask tinyint not null
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Procedures' and column_name = 'database') is null
alter table dbo.Procedures add
[database] integer not null,
constraint procedures_fk_database foreign key ([database]) references dbo.Databases(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Procedures' and column_name = 'name') is null
alter table dbo.Procedures add
[name] varchar(64) not null,
constraint procedures_uk_name unique nonclustered ([database] asc, [name] asc) with (fillfactor = 90),
constraint procedures_ck_name check ([name] not like '%[^a-zA-Z0-9_]%' and [name] like '[a-zA-Z_]%')
-- Level 2.
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksSpace' and column_name = 'machine_disk') is null
alter table dbo.MachineDisksSpace add
machine_disk integer not null,
constraint machine_disks_space_fk_machine_disk foreign key (machine_disk) references dbo.MachineDisks(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksSpace' and column_name = 'candle_time') is null
alter table dbo.MachineDisksSpace add
candle_time integer not null,
constraint machine_disks_space_fk_candle_time foreign key (candle_time) references dbo.CandleTimes(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksSpace' and column_name = 'candle_time') is null
alter table dbo.MachineDisksSpace add
free bigint not null,
constraint machine_disks_space_ck_free check (free between 0 and power(cast(2 as bigint), 53) - 1)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTraffic' and column_name = 'machine_interface') is null
alter table dbo.MachineInterfacesTraffic add
machine_interface integer not null,
constraint machine_interfaces_traffic_fk_machine_interface foreign key (machine_interface) references dbo.MachineInterfaces(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTraffic' and column_name = 'candle_time') is null
alter table dbo.MachineInterfacesTraffic add
candle_time integer not null,
constraint machine_interfaces_traffic_fk_candle_time foreign key (candle_time) references dbo.CandleTimes(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTraffic' and column_name = 'type') is null
alter table dbo.MachineInterfacesTraffic add
[type] integer not null,
constraint machine_interfaces_traffic_fk_type foreign key ([type]) references dbo.Types(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTraffic' and column_name = 'bytes') is null
alter table dbo.MachineInterfacesTraffic add
bytes bigint not null,
constraint machine_interfaces_traffic_ck_bytes check (
bytes between 0 and power(cast(2 as bigint), 53) - 1
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTraffic' and column_name = 'packets') is null
alter table dbo.MachineInterfacesTraffic add
packets integer not null,
constraint machine_interfaces_traffic_ck_packets check (
packets between 0 and power(2, 30) - 1
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTraffic' and column_name = 'errors') is null
alter table dbo.MachineInterfacesTraffic add
errors integer not null,
constraint machine_interfaces_traffic_ck_errors check (
errors between 0 and power(2, 30) - 1
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Exceptions' and column_name = 'procedure') is null
alter table dbo.Exceptions add
[procedure] integer not null,
constraint exceptions_fk_procedure foreign key ([procedure]) references dbo.Procedures(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Exceptions' and column_name = 'message') is null
alter table dbo.Exceptions add
[message] integer not null,
constraint exceptions_fk_message foreign key ([message]) references dbo.Messages(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Exceptions' and column_name = 'parameters') is null
alter table dbo.Exceptions add
parameters integer not null,
constraint exceptions_fk_parameters foreign key (parameters) references dbo.BigData(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Exceptions' and column_name = 'exception') is null
alter table dbo.Exceptions add
exception integer not null,
constraint exceptions_fk_exception foreign key (exception) references dbo.BigData(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Exceptions' and column_name = 'status') is null
alter table dbo.Exceptions add [status] varchar(16)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'Exceptions' and column_name = 'code') is null
alter table dbo.Exceptions add [code] integer
-- Plain 0.
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'key') is null
alter table dbo.MachinePlain add
[key] varchar(32) not null,
constraint machine_plain_uk_key unique nonclustered ([key] asc) with (fillfactor = 90),
constraint machine_plain_ck_key check ([key] not like '%[^a-zA-Z0-9_]%' and [key] like '[a-zA-Z_]%')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'machine') is null
alter table dbo.MachinePlain add
machine integer not null,
constraint machine_plain_fk_machine foreign key (machine) references dbo.Machines(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'candle_time') is null
alter table dbo.MachinePlain add
candle_time integer not null,
constraint machine_plain_fk_candle_time foreign key (candle_time) references dbo.CandlesTimes(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'machine_ram') is null
alter table dbo.MachinePlain add
machine_ram integer not null,
constraint machine_plain_fk_machine_ram foreign key (machine_ram) references dbo.MachinesRAM(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'machine_cpu') is null
alter table dbo.MachinePlain add
machine_cpu integer not null,
constraint machine_plain_fk_machine_cpu foreign key (machine_cpu) references dbo.MachinesCPU(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'ram_total') is null
alter table dbo.MachinePlain add
ram_total float not null,
constraint machine_plain_ck_ram_total check (
ram_total between 0 and power(cast(2 as bigint), 53) - 1
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'ram_in') is null
alter table dbo.MachinePlain add
ram_in float not null,
constraint machine_plain_ck_ram_in check (
ram_in between 0 and power(cast(2 as bigint), 53) - 1 and
ram_in between ram_minimum and ram_maximum and
ram_in <= ram_total
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'ram_out') is null
alter table dbo.MachinePlain add
ram_out float not null,
constraint machine_plain_ck_ram_out check (
ram_out between 0 and power(cast(2 as bigint), 53) - 1 and
ram_out between ram_minimum and ram_maximum and
ram_out <= ram_total
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'ram_minimum') is null
alter table dbo.MachinePlain add
ram_minimum float not null,
constraint machine_plain_ck_ram_minimum check (
ram_minimum between 0 and power(cast(2 as bigint), 53) - 1 and
ram_minimum <= ram_total and
ram_minimum <= ram_maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'ram_maximum') is null
alter table dbo.MachinePlain add
ram_maximum float not null,
constraint machine_plain_ck_ram_maximum check (
ram_maximum between 0 and power(cast(2 as bigint), 53) - 1 and
ram_maximum between ram_minimum and ram_total
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'ram_average') is null
alter table dbo.MachinePlain add
ram_average float not null,
constraint machine_plain_ck_ram_average check (
ram_average between 0 and power(cast(2 as bigint), 53) - 1 and
ram_average between ram_minimum and ram_maximum and
ram_average <= ram_total
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'cpu_in') is null
alter table dbo.MachinePlain add
cpu_in float not null,
constraint machine_plain_ck_cpu_in check (
cpu_in between 0 and 100 and
cpu_in between cpu_minimum and cpu_maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'cpu_out') is null
alter table dbo.MachinePlain add
cpu_out float not null,
constraint machine_plain_ck_cpu_out check (
cpu_out between 0 and 100 and
cpu_out between cpu_minimum and cpu_maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'cpu_minimum') is null
alter table dbo.MachinePlain add
cpu_minimum float not null,
constraint machine_plain_ck_cpu_minimum check (
cpu_minimum between 0 and 100 and
cpu_minimum <= cpu_maximum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'cpu_maximum') is null
alter table dbo.MachinePlain add
cpu_maximum float not null,
constraint machine_plain_ck_cpu_maximum check (
cpu_maximum between 0 and 100 and
cpu_maximum >= cpu_minimum
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachinePlain' and column_name = 'cpu_average') is null
alter table dbo.MachinePlain add
cpu_average float not null,
constraint machine_plain_ck_cpu_average check (
cpu_average between 0 and 100 and
cpu_average between cpu_minimum and cpu_maximum
)
-- Plain 1.
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'plain') is null
alter table dbo.MachineInterfacesPlain add
plain integer not null,
constraint machine_interfaces_plain_fk_plain foreign key (plain) references dbo.MachinePlain(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'machine') is null
alter table dbo.MachineInterfacesPlain add
machine integer not null,
constraint machine_interfaces_plain_fk_machine foreign key (machine) references dbo.Machines(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'interface') is null
alter table dbo.MachineInterfacesPlain add
interface integer not null,
constraint machine_interfaces_plain_fk_interface foreign key (interface) references dbo.Interfaces(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'machine_interface') is null
alter table dbo.MachineInterfacesPlain add
machine_interface integer not null,
constraint machine_interfaces_plain_fk_machine_interface foreign key (machine_interface) references dbo.MachineInterfaces(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'mounted') is null
alter table dbo.MachineInterfacesPlain add mounted bit not null constraint machine_interfaces_plain_df_mounted default 1
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'is_ipv6') is null
alter table dbo.MachineInterfacesPlain add is_ipv6 bit not null constraint machine_interfaces_plain_df_is_ipv6 default 0
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'address') is null
alter table dbo.MachineInterfacesPlain add [address] varchar(45) not null
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'mask') is null
alter table dbo.MachineInterfacesPlain add mask tinyint not null
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesPlain' and column_name = 'belongs') is null
alter table dbo.MachineInterfacesPlain add belongs bit not null constraint machine_interfaces_plain_df_belongs default 1
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksPlain' and column_name = 'plain') is null
alter table dbo.MachineDisksPlain add
plain integer not null,
constraint machine_disks_plain_fk_plain foreign key (plain) references dbo.MachinePlain(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksPlain' and column_name = 'machine') is null
alter table dbo.MachineDisksPlain add
machine integer not null,
constraint machine_disks_plain_fk_machine foreign key (machine) references dbo.Machines(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksPlain' and column_name = 'disk') is null
alter table dbo.MachineDisksPlain add
disk integer not null,
constraint machine_disks_plain_fk_disk foreign key (disk) references dbo.Disks(id)
on update no action
on delete no action,
constraint machine_disks_plain_uk_machine_disk unique nonclustered (machine asc, [disk] asc) with (fillfactor = 90)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksPlain' and column_name = 'candle_time') is null
alter table dbo.MachineDisksPlain add
candle_time integer not null,
constraint machine_disks_plain_fk_candle_time foreign key (candle_time) references dbo.CandlesTimes(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksPlain' and column_name = 'name') is null
alter table dbo.MachineDisksPlain add
[name] varchar(32) not null,
constraint machine_disks_plain_ck_name check ((
len([name]) > 0 and [name] not like '%[^a-zA-Z0-9_-]%'
) or [name] like '[A-Z]:')
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksPlain' and column_name = 'size') is null
alter table dbo.MachineDisksPlain add
[size] bigint not null,
constraint machine_disks_plain_ck_size check (size >= 0 and size < power(cast(2 as bigint), 53))
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksPlain' and column_name = 'mountpoint') is null
alter table dbo.MachineDisksPlain add
mountpoint varchar(128) not null,
constraint machine_disks_plain_ck_mountpoint check (
mountpoint like '/%' or
mountpoint like '[a-zA-Z]:\%' or
mountpoint like '\\%'
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineDisksPlain' and column_name = 'free') is null
alter table dbo.MachineDisksPlain add
free bigint not null,
constraint machine_disks_plain_ck_free check (
free between 0 and power(cast(2 as bigint), 53) - 1 and
free <= [size]
)
-- Plain 2.
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTrafficPlain' and column_name = 'plain') is null
alter table dbo.MachineInterfacesTrafficPlain add
plain integer not null,
constraint machine_interfaces_traffic_plain_fk_plain foreign key (plain) references dbo.MachineInterfacesPlain(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTrafficPlain' and column_name = 'candle_time') is null
alter table dbo.MachineInterfacesTrafficPlain add
candle_time integer not null,
constraint machine_interfaces_traffic_plain_fk_candle_time foreign key (candle_time) references dbo.CandlesTimes(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTrafficPlain' and column_name = 'type') is null
alter table dbo.MachineInterfacesTrafficPlain add
[type] integer not null,
constraint machine_interfaces_traffic_plain_fk_type foreign key ([type]) references dbo.CandlesTimes(id)
on update no action
on delete no action
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTrafficPlain' and column_name = 'bytes') is null
alter table dbo.MachineInterfacesTrafficPlain add
bytes bigint not null,
constraint machine_interfaces_traffic_plain_ck_bytes check (
bytes between 0 and power(cast(2 as bigint), 53) - 1
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTrafficPlain' and column_name = 'packets') is null
alter table dbo.MachineInterfacesTrafficPlain add
packets bigint not null,
constraint machine_interfaces_traffic_plain_ck_packets check (
packets between 0 and power(2, 30) - 1
)
if (select top 1 0 from information_schema.columns where table_catalog = @database and table_name = 'MachineInterfacesTrafficPlain' and column_name = 'errors') is null
alter table dbo.MachineInterfacesTrafficPlain add
errors bigint not null,
constraint machine_interfaces_traffic_plain_ck_errors check (
errors between 0 and power(2, 30) - 1
)
end end
go go

View File

@ -4,9 +4,7 @@ use NucelarMonitor
if object_id(N'dbo.tables_fill', N'P') is not null drop procedure dbo.tables_fill if object_id(N'dbo.tables_fill', N'P') is not null drop procedure dbo.tables_fill
go go
create procedure dbo.tables_fill as begin create procedure dbo.tables_fill as begin set nocount on
set nocount on
end end
go go

View File

@ -4,7 +4,9 @@ use NucelarMonitor
if object_id(N'dbo.hash_big_data', N'FN') is not null drop function dbo.hash_big_data if object_id(N'dbo.hash_big_data', N'FN') is not null drop function dbo.hash_big_data
go go
create function dbo.hash_big_data (@value varchar(max)) returns binary(64) begin create function dbo.hash_big_data (
@value varchar(max)
) returns binary(64) begin
return (select top 1 convert(binary(64), hashbytes('SHA2_256', convert(nvarchar(max), @value)))) return (select top 1 convert(binary(64), hashbytes('SHA2_256', convert(nvarchar(max), @value))))
end end
go go

View File

@ -8,7 +8,7 @@ create procedure dbo.get_procedure
@database varchar(64), @database varchar(64),
@procedure varchar(64), @procedure varchar(64),
@id integer output @id integer output
as begin as begin set nocount on
declare @database_id integer = ( declare @database_id integer = (
select top 1 id from dbo.Databases where select top 1 id from dbo.Databases where
@ -16,8 +16,6 @@ as begin
[name] = @database [name] = @database
) )
set nocount on
if @database_id is null begin if @database_id is null begin
insert into dbo.Databases([name]) values (@database) insert into dbo.Databases([name]) values (@database)
set @database_id = scope_identity() set @database_id = scope_identity()
@ -43,12 +41,10 @@ go
create procedure dbo.get_big_data create procedure dbo.get_big_data
@value varchar(max), @value varchar(max),
@id integer output @id integer output
as begin as begin set nocount on
declare @hash binary(64) = dbo.hash_big_data(@value) declare @hash binary(64) = dbo.hash_big_data(@value)
set nocount on
set @id = ( set @id = (
select top 1 id from dbo.BigData where select top 1 id from dbo.BigData where
date_out is null and date_out is null and
@ -68,9 +64,7 @@ go
create procedure dbo.get_message create procedure dbo.get_message
@message varchar(128), @message varchar(128),
@id integer output @id integer output
as begin as begin set nocount on
set nocount on
set @id = ( set @id = (
select top 1 id from dbo.Messages where select top 1 id from dbo.Messages where
@ -126,6 +120,7 @@ as begin set nocount on
end end
end end
go
if object_id(N'dbo.get_basic_data_ids', N'P') is not null drop procedure dbo.get_basic_data_ids if object_id(N'dbo.get_basic_data_ids', N'P') is not null drop procedure dbo.get_basic_data_ids
go go
@ -202,3 +197,25 @@ as begin set nocount on
end end
go go
if object_id(N'dbo.get_candle_time', N'P') is not null drop procedure dbo.get_candle_time
go
create procedure dbo.get_candle_time
@candle_start datetime,
@candle_end datetime,
@candle_interations integer,
@id integer output
as begin set nocount on
set @id = (
select top 1 id from dbo.CandlesTimes where
date_out is null and
[from] = @candle_start and
[to] = @candle_end and
iterations = @candle_interations
)
if @id is null begin
insert into dbo.CandlesTimes([from], [to], iterations) values (@candle_start, @candle_end, @candle_interations)
set @id = scope_identity()
end
end
go

View File

@ -9,7 +9,7 @@ create procedure dbo.set_exception
@procedure varchar(64), @procedure varchar(64),
@message varchar(128), @message varchar(128),
@parameters varchar(max) = null @parameters varchar(max) = null
as begin as begin set nocount on
declare @procedure_id integer declare @procedure_id integer
declare @message_id integer declare @message_id integer
@ -17,8 +17,6 @@ as begin
declare @exception_message_id integer declare @exception_message_id integer
declare @parameters_id integer declare @parameters_id integer
set nocount on
execute dbo.get_procedure @database, @procedure, @procedure_id output execute dbo.get_procedure @database, @procedure, @procedure_id output
execute dbo.get_big_data @exception_message, @exception_message_id output execute dbo.get_big_data @exception_message, @exception_message_id output
execute dbo.get_big_data @parameters, @parameters_id output execute dbo.get_big_data @parameters, @parameters_id output
@ -73,13 +71,13 @@ as begin set nocount on
if (select top 1 id from dbo.MachinePlain where if (select top 1 id from dbo.MachinePlain where
date_out is null and date_out is null and
machine = @machine_id and machine = @machine_id
candle_time = @candle_time_id
) is null ) is null
insert into dbo.MachinePlain([key], machine, candle_time, machine_ram, machine_cpu, ram_total, ram_in, ram_out, ram_minimum, ram_maximum, ram_average, cpu_in, cpu_out, cpu_minimum, cpu_maximum, cpu_average) values insert into dbo.MachinePlain([key], machine, candle_time, machine_ram, machine_cpu, ram_total, ram_in, ram_out, ram_minimum, ram_maximum, ram_average, cpu_in, cpu_out, cpu_minimum, cpu_maximum, cpu_average) values
(@key, @machine_id, @candle_time_id, @machine_ram_id, @machine_cpu_id, @ram_total, @ram_in, @ram_out, @ram_minimum, @ram_maximum, @ram_average, @cpu_in, @cpu_out, @cpu_minimum, @cpu_maximum, @cpu_average) (@key, @machine_id, @candle_time_id, @machine_ram_id, @machine_cpu_id, @ram_total, @ram_in, @ram_out, @ram_minimum, @ram_maximum, @ram_average, @cpu_in, @cpu_out, @cpu_minimum, @cpu_maximum, @cpu_average)
else else
update dbo.MachinePlain set update dbo.MachinePlain set
candle_time = @candle_time_id,
machine_ram = @machine_ram_id, machine_ram = @machine_ram_id,
machine_cpu = @machine_cpu_id, machine_cpu = @machine_cpu_id,
ram_total = @ram_total, ram_total = @ram_total,
@ -95,8 +93,7 @@ as begin set nocount on
cpu_average = @cpu_average cpu_average = @cpu_average
where where
date_out is null and date_out is null and
[key] = @key and [key] = @key
candle_time = @candle_time_id
end end
go go
@ -106,67 +103,55 @@ go
create procedure dbo.set_machine_interface_data create procedure dbo.set_machine_interface_data
@key varchar(32), @key varchar(32),
@name varchar(32), @name varchar(32),
@bytes bigint,
@packages integer,
@errors integer,
@is_ipv6 bit, @is_ipv6 bit,
@address varchar(45), @address varchar(45),
@mask tinyint @mask tinyint,
@mounted bit,
@id integer output
as begin set nocount on as begin set nocount on
declare @machine_id integer declare @machine_id integer
declare @interface_id integer declare @interface_id integer
declare @machine_interface_id integer declare @plain_id integer
declare @machine_interface_data_id integer
execute dbo.get_interface @name, @interface_id output execute dbo.get_interface @name, @interface_id output
execute dbo.get_machine @key, @machine_id output execute dbo.get_machine @key, @machine_id output
set @plain_id = (select top 1 id from dbo.MachinePlain where date_out is null and machine = @machine_id)
set @machine_interface_id = ( set @id = (
select top 1 id from dbo.MachineInterfaces where select top 1 id from dbo.MachineInterfaces where
date_out is null and date_out is null and
machine = @machine_id and machine = @machine_id and
[interface] = @interface_id [interface] = @interface_id
) )
if @machine_interface_id is null begin if @id is null begin
insert into dbo.MachineInterfaces(machine, [interface]) values (@machine_id, @interface_id) insert into dbo.MachineInterfaces(machine, [interface], mounted, is_ipv6, [address], mask) values
set @machine_interface_id = scope_identity() (@machine_id, @interface_id, @mounted, @is_ipv6, @address, @mask)
end set @id = scope_identity()
insert into dbo.MachineInterfacesPlain(plain, machine, [interface], machine_interface, mounted, is_ipv6, [address], mask) values
set @machine_interface_data_id = ( (@plain_id, @machine_id, @interface_id, @id, @mounted, @is_ipv6, @address, @mask)
select top 1 id from dbo.MachineInterfacesData where end else if (
date_out is null and select top 1 0 from dbo.MachineInterfaces where
machine_interface = @machine_interface_id and id = @id and
mounted = @mounted and
is_ipv6 = @is_ipv6 and is_ipv6 = @is_ipv6 and
[address] = @address and [address] = @address and
mask = @mask mask = @mask
) ) is null begin
insert into dbo.MachineInterfaces(machine, [interface], mounted, is_ipv6, [address], mask) values
if @machine_interface_data_id is null begin (@machine_id, @interface_id, @mounted, @is_ipv6, @address, @mask)
set @id = scope_identity()
insert into dbo.MachineInterfacesData(machine_interface, is_ipv6, [address], mask) values
(@machine_interface_id, @is_ipv6, @address, @mask)
set @machine_interface_data_id = scope_identity()
if (select top 1 0 from dbo.MachineInterfacesPlain where
date_out is null and
machine = @machine_id and
[interface] = @interface_id
) is null
insert into dbo.MachineInterfacesPlain(plain, machine, [interface], machine_interface, [name], is_ipv6, [address], mask) values
(null, @machine_id, @interface_id, @machine_interface_id, @name, @is_ipv6, @address, @mask)
else
update dbo.MachineInterfacesPlain set update dbo.MachineInterfacesPlain set
machine_interface = @machine_interface_id, machine_interface = @id,
mounted = @mounted,
is_ipv6 = @is_ipv6, is_ipv6 = @is_ipv6,
[address] = @address, [address] = @address,
mask = @mask mask = @mask
where where
date_out is null and date_out is null and
machine = @machine_id and plain = @plain_id and
[interface] = @interface_id [interface] = @interface_id
end end
end end
@ -175,65 +160,45 @@ go
if object_id(N'dbo.set_machine_interface_traffic', N'P') is not null drop procedure dbo.set_machine_interface_traffic if object_id(N'dbo.set_machine_interface_traffic', N'P') is not null drop procedure dbo.set_machine_interface_traffic
go go
create procedure dbo.set_machine_interface_traffic create procedure dbo.set_machine_interface_traffic
@key varchar(32), @id integer,
@name varchar(32),
@type varchar(32), @type varchar(32),
@candle_start datetime, @candle_start datetime,
@candle_end datetime, @candle_end datetime,
@candle_interations integer, @candle_interations integer,
@bytes bigint, @bytes bigint,
@packages integer, @packages integer,
@errors integer, @errors integer
as begin set nocount on as begin set nocount on
declare @machine_id integer
declare @type_id integer declare @type_id integer
declare @candle_time_id integer declare @candle_time_id integer
declare @interface_id integer
declare @machine_interface_id integer
declare @plain_id integer declare @plain_id integer
execute dbo.get_basic_data_ids
@key,
@candle_start,
@candle_end,
@candle_interations,
@machine_id output,
@candle_time_id output
execute dbo.get_type @type, @type_id output execute dbo.get_type @type, @type_id output
execute dbo.get_interface @name, @interface_id output execute dbo.get_candle_time @candle_start, @candle_end, @candle_interations, @candle_time_id output
set @plain_id = (select top 1 id from dbo.MachineInterfacesPlain where date_out is null and machine_interface = @id)
set @machine_interface_id = (
select top 1 id from dbo.MachineInterfaces where
date_out is null and
machine = @machine_id and
[interface] = @interface_id
)
insert into dbo.MachineInterfacesTraffic(machine_interface, [type], candle_time, bytes, packages, errors) values insert into dbo.MachineInterfacesTraffic(machine_interface, [type], candle_time, bytes, packages, errors) values
(@machine_interface_id, @type_id, @candle_time_id, @bytes, @packages, @errors) (@id, @type_id, @candle_time_id, @bytes, @packages, @errors)
set @plain_id = (select top 1 id from dbo.MachineInterfacesPlain where
date_out is null and
machine = @machine_id and
[interface] = @interface_id
)
if (select top 1 0 from dbo.MachineInterfacesTrafficPlain where if (select top 1 0 from dbo.MachineInterfacesTrafficPlain where
date_out is null and date_out is null and
machine_interface = @machine_interface_id and plain = @plain_id and
[type] = @type_id [type] = @type_id and
candle_time = @candle_time_id
) is null ) is null
insert into dbo.MachineInterfacesTrafficPlain(plain, machine_interface, candle_time, [type], bytes, packages, errors) values insert into dbo.MachineInterfacesTrafficPlain(plain, candle_time, [type], bytes, packages, errors) values
(@plain_id, @machine_interface_id, @candle_time_id, @type_id, @bytes, @packages, @errors) (@plain_id, @candle_time_id, @type_id, @bytes, @packages, @errors)
else else
update dbo.MachineInterfacesTrafficPlain set update dbo.MachineInterfacesTrafficPlain set
bytes = @bytes, bytes = @bytes,
candle_time = @candle_time_id packages = @packages,
errors = @errors
where where
date_out is null and date_out is null and
machine_interface = @machine_interface_id and plain = @plain_id and
[type] = @type_id [type] = @type_id and
candle_time = @candle_time_id
end end
go go

View File

@ -1,3 +1,11 @@
#!/bin/bash #!/bin/bash
cd `dirname $(readlink -f "$0")`/../Python cd `dirname $(readlink -f "$0")`/../Python
if [ ! -d .venv ];then
python3 -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
[ -f requirements.txt ] && pip install -r requirements.txt
else
source .venv/bin/activate
fi
python3 "run.py" python3 "run.py"