Skip to main content
Glama
config.actions.go4.29 kB
package streamconfig import ( configstate "lunar/engine/streams/config-state" "lunar/engine/utils/environment" "path" "github.com/rs/zerolog/log" ) func (o *GetOperation) Apply() (*ContractResponsePayload, error) { log.Trace().Msg("Getting configuration") resp := NewContractResponsePayload() resp.OperationResponse.Get = NewGetOperationResponse() payloads := make([]*GetOperationResponsePayload, 0) confPayload := NewConfigurationPayload() payloads = append(payloads, &GetOperationResponsePayload{ Name: "lunar-proxy", Configuration: confPayload, }) if o.All { configState := configstate.Get() backups, err := configState.ListBackups() if err != nil { log.Trace().Err(err).Msg("Failed to list backups") } for _, backup := range backups { backupDir := path.Join(environment.GetConfigBackupDirectory(), backup) backupPayload := NewConfigurationPayloadFromPath(backupDir) payloads = append(payloads, &GetOperationResponsePayload{ Name: backup, Configuration: backupPayload, }) } } for _, payload := range payloads { if err := payload.Configuration.LoadPayloadContentFromDisk(); err != nil { log.Error().Err(err).Msg("Failed to load payload content from disk") return nil, err } if err := payload.Configuration.PreparePayload(); err != nil { log.Error().Err(err).Msg("Failed to prepare payload") return nil, err } } resp.OperationResponse.Get.Configurations = payloads return resp, nil } func (o *RestoreOperation) Apply() (*ContractResponsePayload, error) { log.Trace().Msg("Restoring configuration") if err := configstate.Get().RestoreCheckpoint(o.Checkpoint); err != nil { log.Error().Err(err).Msg("Failed to restore configuration") return nil, err } resp := NewContractResponsePayload() resp.OperationResponse.Restore = NewResponse() return resp, nil } // Apply applies the init operation to the configuration // It resets all the configuration files to their default state func (o *InitOperation) Apply() (*ContractResponsePayload, error) { log.Trace().Msg("Initiating configuration") if err := configstate.Get().Clean(); err != nil { return nil, err } if err := configstate.Get().RestoreMetricsConfig(); err != nil { log.Error().Err(err).Msg("Failed to restore metrics config") return nil, err } resp := NewContractResponsePayload() resp.OperationResponse.Init = NewResponse() return resp, nil } func (o *WriteOperation) Apply() (*ContractResponsePayload, error) { log.Trace().Msg("Updating configuration") if err := o.SavePayloadContentToDisk(); err != nil { log.Error().Err(err).Msg("Failed to save payload content to disk") return nil, err } resp := NewContractResponsePayload() resp.OperationResponse.Update = NewResponse() return resp, nil } // Apply applies the delete operation to the configuration // It deletes the specified configuration files // If the all flag is set, it deletes all the configuration files func (o *DeleteOperation) Apply() (*ContractResponsePayload, error) { log.Trace().Msg("Deleting configuration") configState := configstate.Get() resp := NewContractResponsePayload() resp.OperationResponse.Delete = NewResponse() if o.All { return resp, configState.Clean() } if o.Flows { if err := configState.CleanFlowsDirectory(); err != nil { return nil, err } } if o.FlowByName != nil { for _, flow := range o.FlowByName { if err := configState.CleanFlow(flow); err != nil { return nil, err } } } if o.Quotas { if err := configState.CleanQuotasDirectory(); err != nil { return nil, err } } if o.QuotaByName != nil { for _, quota := range o.QuotaByName { if err := configState.CleanQuota(quota); err != nil { return nil, err } } } if o.PathParams { if err := configState.CleanPathParamsDirectory(); err != nil { return nil, err } } if o.PathParamByName != nil { for _, pathParam := range o.PathParamByName { if err := configState.CleanPathParams(pathParam); err != nil { return nil, err } } } if o.GatewayConfig { if err := configState.CleanGatewayConfigFile(); err != nil { return nil, err } } if o.Metrics { if err := configState.CleanMetricsConfigFile(); err != nil { return nil, err } } return resp, nil }

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheLunarCompany/lunar'

If you have feedback or need assistance with the MCP directory API, please join our Discord server