Database Models

Base model

class server.app.models.Base.Base(**kwargs)[source]

Bases: DeclarativeBase

metadata: ClassVar[MetaData] = MetaData()

Refers to the _schema.MetaData collection that will be used for new _schema.Table objects.

See also

orm_declarative_metadata

registry: ClassVar[_RegistryType] = <sqlalchemy.orm.decl_api.registry object>

Refers to the _orm.registry in use where new _orm.Mapper objects will be associated.

All custom error models used

exception server.app.models.CustomError.DNSError(message='DNS error (domain name invalid)')[source]

Bases: Exception

Exception raised when a DNS error occurs. For example when converting a domain name to IP addresses fails.

exception server.app.models.CustomError.DatabaseInsertError(message='Failed to insert measurement into database')[source]

Bases: Exception

Raised when a measurement fails to insert into the database.

exception server.app.models.CustomError.InputError(message='Invalid input provided')[source]

Bases: Exception

Exception raised when an input error occurs. For example when the input parameters of a method are invalid.

exception server.app.models.CustomError.InvalidMeasurementDataError(message='Invalid measurement data provided')[source]

Bases: Exception

Raised when input data is invalid or incomplete for NtpMeasurement.

exception server.app.models.CustomError.MeasurementQueryError(message='Failed to query measurement data')[source]

Bases: Exception

Raised when querying the database for measurements fails.

exception server.app.models.CustomError.RipeMeasurementError(message='Ripe measurement failed')[source]

Bases: Exception

Exception raised when a ripe measurement failed. For example when our server sends a bad request to RIPE Atlas.

Measurement model

class server.app.models.Measurement.Measurement(**kwargs)[source]

Bases: Base

id: Mapped[int]
ntp_last_sync_time: Mapped[int]
ntp_last_sync_time_prec: Mapped[int]
ntp_server_ip: Mapped[str]
ntp_server_name: Mapped[str]
ntp_server_ref_parent: Mapped[str | None]
ntp_version: Mapped[int]
poll: Mapped[int]
precision: Mapped[float]
reachability: Mapped[str]
ref_name: Mapped[str]
root_delay: Mapped[int]
root_delay_prec: Mapped[int]
root_dispersion: Mapped[int]
root_dispersion_prec: Mapped[int]
rtt: Mapped[float]
stratum: Mapped[int]
time_id: Mapped[int]
time_offset: Mapped[float]
timestamps: Mapped[Time]
vantage_point_ip: Mapped[str]

Time model

class server.app.models.Time.Time(**kwargs)[source]

Bases: Base

client_recv: Mapped[int]
client_recv_prec: Mapped[int]
client_sent: Mapped[int]
client_sent_prec: Mapped[int]
id: Mapped[int]
server_recv: Mapped[int]
server_recv_prec: Mapped[int]
server_sent: Mapped[int]
server_sent_prec: Mapped[int]