mirror of
https://git.mirrors.martin98.com/https://github.com/SigNoz/signoz
synced 2025-08-14 07:45:55 +08:00

* chore(linter): add more linters and deprecate zap * chore(linter): add more linters and deprecate zap * chore(linter): add more linters and deprecate zap * chore(linter): add more linters and deprecate zap
226 lines
5.6 KiB
Go
226 lines
5.6 KiB
Go
package sqlrulestore
|
|
|
|
import (
|
|
"context"
|
|
"time"
|
|
|
|
"github.com/SigNoz/signoz/pkg/sqlstore"
|
|
"github.com/SigNoz/signoz/pkg/types"
|
|
"github.com/SigNoz/signoz/pkg/types/authtypes"
|
|
ruletypes "github.com/SigNoz/signoz/pkg/types/ruletypes"
|
|
"github.com/SigNoz/signoz/pkg/valuer"
|
|
)
|
|
|
|
type maintenance struct {
|
|
sqlstore sqlstore.SQLStore
|
|
}
|
|
|
|
func NewMaintenanceStore(store sqlstore.SQLStore) ruletypes.MaintenanceStore {
|
|
return &maintenance{sqlstore: store}
|
|
}
|
|
|
|
func (r *maintenance) GetAllPlannedMaintenance(ctx context.Context, orgID string) ([]*ruletypes.GettablePlannedMaintenance, error) {
|
|
gettableMaintenancesRules := make([]*ruletypes.GettablePlannedMaintenanceRule, 0)
|
|
err := r.sqlstore.
|
|
BunDB().
|
|
NewSelect().
|
|
Model(&gettableMaintenancesRules).
|
|
Relation("Rules").
|
|
Where("org_id = ?", orgID).
|
|
Scan(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
gettablePlannedMaintenance := make([]*ruletypes.GettablePlannedMaintenance, 0)
|
|
for _, gettableMaintenancesRule := range gettableMaintenancesRules {
|
|
gettablePlannedMaintenance = append(gettablePlannedMaintenance, gettableMaintenancesRule.ConvertGettableMaintenanceRuleToGettableMaintenance())
|
|
}
|
|
|
|
return gettablePlannedMaintenance, nil
|
|
}
|
|
|
|
func (r *maintenance) GetPlannedMaintenanceByID(ctx context.Context, id valuer.UUID) (*ruletypes.GettablePlannedMaintenance, error) {
|
|
storableMaintenanceRule := new(ruletypes.GettablePlannedMaintenanceRule)
|
|
err := r.sqlstore.
|
|
BunDB().
|
|
NewSelect().
|
|
Model(storableMaintenanceRule).
|
|
Relation("Rules").
|
|
Where("id = ?", id.StringValue()).
|
|
Scan(ctx)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return storableMaintenanceRule.ConvertGettableMaintenanceRuleToGettableMaintenance(), nil
|
|
}
|
|
|
|
func (r *maintenance) CreatePlannedMaintenance(ctx context.Context, maintenance ruletypes.GettablePlannedMaintenance) (valuer.UUID, error) {
|
|
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
if err != nil {
|
|
return valuer.UUID{}, err
|
|
}
|
|
|
|
storablePlannedMaintenance := ruletypes.StorablePlannedMaintenance{
|
|
Identifiable: types.Identifiable{
|
|
ID: valuer.GenerateUUID(),
|
|
},
|
|
TimeAuditable: types.TimeAuditable{
|
|
CreatedAt: time.Now(),
|
|
UpdatedAt: time.Now(),
|
|
},
|
|
UserAuditable: types.UserAuditable{
|
|
CreatedBy: claims.Email,
|
|
UpdatedBy: claims.Email,
|
|
},
|
|
Name: maintenance.Name,
|
|
Description: maintenance.Description,
|
|
Schedule: maintenance.Schedule,
|
|
OrgID: claims.OrgID,
|
|
}
|
|
|
|
maintenanceRules := make([]*ruletypes.StorablePlannedMaintenanceRule, 0)
|
|
for _, ruleIDStr := range maintenance.RuleIDs {
|
|
ruleID, err := valuer.NewUUID(ruleIDStr)
|
|
if err != nil {
|
|
return valuer.UUID{}, err
|
|
}
|
|
|
|
maintenanceRules = append(maintenanceRules, &ruletypes.StorablePlannedMaintenanceRule{
|
|
Identifiable: types.Identifiable{
|
|
ID: valuer.GenerateUUID(),
|
|
},
|
|
PlannedMaintenanceID: storablePlannedMaintenance.ID,
|
|
RuleID: ruleID,
|
|
})
|
|
}
|
|
|
|
err = r.sqlstore.RunInTxCtx(ctx, nil, func(ctx context.Context) error {
|
|
_, err := r.sqlstore.
|
|
BunDBCtx(ctx).
|
|
NewInsert().
|
|
Model(&storablePlannedMaintenance).
|
|
Exec(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(maintenanceRules) > 0 {
|
|
_, err = r.sqlstore.
|
|
BunDBCtx(ctx).
|
|
NewInsert().
|
|
Model(&maintenanceRules).
|
|
Exec(ctx)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
}
|
|
return nil
|
|
})
|
|
if err != nil {
|
|
return valuer.UUID{}, err
|
|
}
|
|
|
|
return storablePlannedMaintenance.ID, nil
|
|
}
|
|
|
|
func (r *maintenance) DeletePlannedMaintenance(ctx context.Context, id valuer.UUID) error {
|
|
_, err := r.sqlstore.
|
|
BunDB().
|
|
NewDelete().
|
|
Model(new(ruletypes.StorablePlannedMaintenance)).
|
|
Where("id = ?", id.StringValue()).
|
|
Exec(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (r *maintenance) EditPlannedMaintenance(ctx context.Context, maintenance ruletypes.GettablePlannedMaintenance, id valuer.UUID) error {
|
|
claims, err := authtypes.ClaimsFromContext(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
storablePlannedMaintenance := ruletypes.StorablePlannedMaintenance{
|
|
Identifiable: types.Identifiable{
|
|
ID: id,
|
|
},
|
|
TimeAuditable: types.TimeAuditable{
|
|
CreatedAt: maintenance.CreatedAt,
|
|
UpdatedAt: time.Now(),
|
|
},
|
|
UserAuditable: types.UserAuditable{
|
|
CreatedBy: maintenance.CreatedBy,
|
|
UpdatedBy: claims.Email,
|
|
},
|
|
Name: maintenance.Name,
|
|
Description: maintenance.Description,
|
|
Schedule: maintenance.Schedule,
|
|
OrgID: claims.OrgID,
|
|
}
|
|
|
|
storablePlannedMaintenanceRules := make([]*ruletypes.StorablePlannedMaintenanceRule, 0)
|
|
for _, ruleIDStr := range maintenance.RuleIDs {
|
|
ruleID, err := valuer.NewUUID(ruleIDStr)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
storablePlannedMaintenanceRules = append(storablePlannedMaintenanceRules, &ruletypes.StorablePlannedMaintenanceRule{
|
|
Identifiable: types.Identifiable{
|
|
ID: valuer.GenerateUUID(),
|
|
},
|
|
RuleID: ruleID,
|
|
PlannedMaintenanceID: storablePlannedMaintenance.ID,
|
|
})
|
|
}
|
|
|
|
err = r.sqlstore.RunInTxCtx(ctx, nil, func(ctx context.Context) error {
|
|
_, err := r.sqlstore.
|
|
BunDBCtx(ctx).
|
|
NewUpdate().
|
|
Model(&storablePlannedMaintenance).
|
|
Where("id = ?", storablePlannedMaintenance.ID.StringValue()).
|
|
Exec(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
_, err = r.sqlstore.
|
|
BunDBCtx(ctx).
|
|
NewDelete().
|
|
Model(new(ruletypes.StorablePlannedMaintenanceRule)).
|
|
Where("planned_maintenance_id = ?", storablePlannedMaintenance.ID.StringValue()).
|
|
Exec(ctx)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if len(storablePlannedMaintenanceRules) > 0 {
|
|
_, err = r.sqlstore.
|
|
BunDBCtx(ctx).
|
|
NewInsert().
|
|
Model(&storablePlannedMaintenanceRules).
|
|
Exec(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|