241 lines
8.4 KiB
Rust
241 lines
8.4 KiB
Rust
use sea_orm_migration::prelude::*;
|
|
use sea_orm_migration::sea_query::table::ColumnDef;
|
|
|
|
#[derive(DeriveMigrationName)]
|
|
pub struct Migration;
|
|
|
|
#[async_trait::async_trait]
|
|
impl MigrationTrait for Migration {
|
|
async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
|
// create a table for rpc request accounting
|
|
manager
|
|
.create_table(
|
|
Table::create()
|
|
.table(RpcAccounting::Table)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::Id)
|
|
.big_unsigned()
|
|
.not_null()
|
|
.auto_increment()
|
|
.primary_key(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::UserKeyId)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::ChainId)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(ColumnDef::new(RpcAccounting::Method).string().not_null())
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::ErrorResponse)
|
|
.boolean()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::PeriodDatetime)
|
|
.timestamp()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::FrontendRequests)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::BackendRequests)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::BackendRetries)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::NoServers)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::CacheMisses)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::CacheHits)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::SumRequestBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MinRequestBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MeanRequestBytes)
|
|
.double()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P50RequestBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P90RequestBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P99RequestBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MaxRequestBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::SumResponseMillis)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MinResponseMillis)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MeanResponseMillis)
|
|
.double()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P50ResponseMillis)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P90ResponseMillis)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P99ResponseMillis)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MaxResponseMillis)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::SumResponseBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MinResponseBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MeanResponseBytes)
|
|
.double()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P50ResponseBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P90ResponseBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::P99ResponseBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.col(
|
|
ColumnDef::new(RpcAccounting::MaxResponseBytes)
|
|
.big_unsigned()
|
|
.not_null(),
|
|
)
|
|
.foreign_key(
|
|
sea_query::ForeignKey::create()
|
|
.from(RpcAccounting::Table, RpcAccounting::UserKeyId)
|
|
.to(UserKeys::Table, UserKeys::Id),
|
|
)
|
|
.index(sea_query::Index::create().col(RpcAccounting::PeriodDatetime))
|
|
.index(sea_query::Index::create().col(RpcAccounting::Method))
|
|
.to_owned(),
|
|
)
|
|
.await
|
|
}
|
|
|
|
async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> {
|
|
manager
|
|
.drop_table(Table::drop().table(RpcAccounting::Table).to_owned())
|
|
.await
|
|
}
|
|
}
|
|
|
|
/// Partial table definition
|
|
#[derive(Iden)]
|
|
pub enum UserKeys {
|
|
Table,
|
|
Id,
|
|
}
|
|
|
|
#[derive(Iden)]
|
|
enum RpcAccounting {
|
|
Table,
|
|
Id,
|
|
UserKeyId,
|
|
ChainId,
|
|
Method,
|
|
ErrorResponse,
|
|
PeriodDatetime,
|
|
FrontendRequests,
|
|
BackendRequests,
|
|
BackendRetries,
|
|
NoServers,
|
|
CacheMisses,
|
|
CacheHits,
|
|
SumRequestBytes,
|
|
MinRequestBytes,
|
|
MeanRequestBytes,
|
|
P50RequestBytes,
|
|
P90RequestBytes,
|
|
P99RequestBytes,
|
|
MaxRequestBytes,
|
|
SumResponseMillis,
|
|
MinResponseMillis,
|
|
MeanResponseMillis,
|
|
P50ResponseMillis,
|
|
P90ResponseMillis,
|
|
P99ResponseMillis,
|
|
MaxResponseMillis,
|
|
SumResponseBytes,
|
|
MinResponseBytes,
|
|
MeanResponseBytes,
|
|
P50ResponseBytes,
|
|
P90ResponseBytes,
|
|
P99ResponseBytes,
|
|
MaxResponseBytes,
|
|
}
|