kopia lustrzana https://github.com/bugout-dev/moonstream
				
				
				
			Workers with call_requests clean action
							rodzic
							
								
									2f08452fbb
								
							
						
					
					
						commit
						ce99e7140a
					
				|  | @ -0,0 +1,65 @@ | |||
| 
 | ||||
| # Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,go | ||||
| # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,go | ||||
| 
 | ||||
| ### Go ### | ||||
| # If you prefer the allow list template instead of the deny list, see community template: | ||||
| # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore | ||||
| # | ||||
| # Binaries for programs and plugins | ||||
| *.exe | ||||
| *.exe~ | ||||
| *.dll | ||||
| *.so | ||||
| *.dylib | ||||
| 
 | ||||
| # Test binary, built with `go test -c` | ||||
| *.test | ||||
| 
 | ||||
| # Output of the go coverage tool, specifically when used with LiteIDE | ||||
| *.out | ||||
| 
 | ||||
| # Dependency directories (remove the comment below to include it) | ||||
| # vendor/ | ||||
| 
 | ||||
| # Go workspace file | ||||
| go.work | ||||
| 
 | ||||
| ### Go Patch ### | ||||
| /vendor/ | ||||
| /Godeps/ | ||||
| 
 | ||||
| ### VisualStudioCode ### | ||||
| .vscode/* | ||||
| !.vscode/settings.json | ||||
| !.vscode/tasks.json | ||||
| !.vscode/launch.json | ||||
| !.vscode/extensions.json | ||||
| !.vscode/*.code-snippets | ||||
| 
 | ||||
| # Local History for Visual Studio Code | ||||
| .history/ | ||||
| 
 | ||||
| # Built Visual Studio Code Extensions | ||||
| *.vsix | ||||
| 
 | ||||
| ### VisualStudioCode Patch ### | ||||
| # Ignore all local history of files | ||||
| .history | ||||
| .ionide | ||||
| 
 | ||||
| # Support for Project snippet scope | ||||
| .vscode/*.code-snippets | ||||
| 
 | ||||
| # Ignore code-workspaces | ||||
| *.code-workspace | ||||
| 
 | ||||
| # End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,go | ||||
| 
 | ||||
| # Custom | ||||
| .secrets/* | ||||
| dev.env | ||||
| prod.env | ||||
| test.env | ||||
| .venv | ||||
| workers_dev | ||||
|  | @ -0,0 +1,131 @@ | |||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 
 | ||||
| 	"github.com/spf13/cobra" | ||||
| 
 | ||||
| 	workers "github.com/moonstream-to/api/workers/pkg" | ||||
| 	engine "github.com/moonstream-to/api/workers/pkg/engine" | ||||
| ) | ||||
| 
 | ||||
| func CreateRootCommand() *cobra.Command { | ||||
| 	// rootCmd represents the base command when called without any subcommands
 | ||||
| 	rootCmd := &cobra.Command{ | ||||
| 		Use:   "workers", | ||||
| 		Short: "Autonomous workers for moonstream services", | ||||
| 		Long: `workers is a CLI that allows you to run multiple operations according to Moonstream services. | ||||
| 
 | ||||
| 	workers currently supports services: | ||||
| 	- Engine | ||||
| 	`, | ||||
| 		Run: func(cmd *cobra.Command, args []string) {}, | ||||
| 	} | ||||
| 
 | ||||
| 	versionCmd := CreateVersionCommand() | ||||
| 	engineCmd := CreateEngineCommand() | ||||
| 	rootCmd.AddCommand(versionCmd, engineCmd) | ||||
| 
 | ||||
| 	completionCmd := CreateCompletionCommand(rootCmd) | ||||
| 	rootCmd.AddCommand(completionCmd) | ||||
| 
 | ||||
| 	return rootCmd | ||||
| } | ||||
| 
 | ||||
| func CreateCompletionCommand(rootCmd *cobra.Command) *cobra.Command { | ||||
| 	completionCmd := &cobra.Command{ | ||||
| 		Use:   "completion", | ||||
| 		Short: "Generate shell completion scripts for workers", | ||||
| 		Long: `Generate shell completion scripts for workers. | ||||
| 
 | ||||
| The command for each shell will print a completion script to stdout. You can source this script to get | ||||
| completions in your current shell session. You can add this script to the completion directory for your | ||||
| shell to get completions for all future sessions. | ||||
| 
 | ||||
| For example, to activate bash completions in your current shell: | ||||
| 		$ . <(workers completion bash) | ||||
| 
 | ||||
| To add workers completions for all bash sessions: | ||||
| 		$ workers completion bash > /etc/bash_completion.d/workers_completions`, | ||||
| 	} | ||||
| 
 | ||||
| 	bashCompletionCmd := &cobra.Command{ | ||||
| 		Use:   "bash", | ||||
| 		Short: "bash completions for workers", | ||||
| 		Run: func(cmd *cobra.Command, args []string) { | ||||
| 			rootCmd.GenBashCompletion(cmd.OutOrStdout()) | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	zshCompletionCmd := &cobra.Command{ | ||||
| 		Use:   "zsh", | ||||
| 		Short: "zsh completions for workers", | ||||
| 		Run: func(cmd *cobra.Command, args []string) { | ||||
| 			rootCmd.GenZshCompletion(cmd.OutOrStdout()) | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	fishCompletionCmd := &cobra.Command{ | ||||
| 		Use:   "fish", | ||||
| 		Short: "fish completions for workers", | ||||
| 		Run: func(cmd *cobra.Command, args []string) { | ||||
| 			rootCmd.GenFishCompletion(cmd.OutOrStdout(), true) | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	powershellCompletionCmd := &cobra.Command{ | ||||
| 		Use:   "powershell", | ||||
| 		Short: "powershell completions for workers", | ||||
| 		Run: func(cmd *cobra.Command, args []string) { | ||||
| 			rootCmd.GenPowerShellCompletion(cmd.OutOrStdout()) | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	completionCmd.AddCommand(bashCompletionCmd, zshCompletionCmd, fishCompletionCmd, powershellCompletionCmd) | ||||
| 
 | ||||
| 	return completionCmd | ||||
| } | ||||
| 
 | ||||
| func CreateVersionCommand() *cobra.Command { | ||||
| 	versionCmd := &cobra.Command{ | ||||
| 		Use:   "version", | ||||
| 		Short: "Print the version number of workers", | ||||
| 		Long:  `All software has versions. This is workers's`, | ||||
| 		Run: func(cmd *cobra.Command, args []string) { | ||||
| 			cmd.Println(workers.VERSION) | ||||
| 		}, | ||||
| 	} | ||||
| 	return versionCmd | ||||
| } | ||||
| 
 | ||||
| func CreateEngineCommand() *cobra.Command { | ||||
| 	engineCommand := &cobra.Command{ | ||||
| 		Use:   "engine", | ||||
| 		Short: "Engine workers and more", | ||||
| 	} | ||||
| 
 | ||||
| 	var dbUri string | ||||
| 	engineCommand.PersistentFlags().StringVarP(&dbUri, "db-uri", "d", "", "Database URI.") | ||||
| 
 | ||||
| 	cleanCallRequestsCommand := &cobra.Command{ | ||||
| 		Use:   "clean-call-requests", | ||||
| 		Short: "Clean all inactive call requests from database.", | ||||
| 		Long:  "Remove records in call_requests database table with ttl value greater then now.", | ||||
| 		RunE: func(cmd *cobra.Command, args []string) error { | ||||
| 			ctx := context.Background() | ||||
| 
 | ||||
| 			dbPool, err := CreateDbPool(ctx, dbUri, "10s") | ||||
| 			if err != nil { | ||||
| 				return fmt.Errorf("database connection error: %v", err) | ||||
| 			} | ||||
| 			defer dbPool.Close() | ||||
| 
 | ||||
| 			return engine.CleanCallRequestsCommand(ctx, dbPool) | ||||
| 		}, | ||||
| 	} | ||||
| 
 | ||||
| 	engineCommand.AddCommand(cleanCallRequestsCommand) | ||||
| 
 | ||||
| 	return engineCommand | ||||
| } | ||||
|  | @ -0,0 +1,28 @@ | |||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/jackc/pgx/v5/pgxpool" | ||||
| ) | ||||
| 
 | ||||
| func CreateDbPool(ctx context.Context, dbUri string, timeout string) (*pgxpool.Pool, error) { | ||||
| 	conf, err := pgxpool.ParseConfig(dbUri) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("unable to parse database connection string, err: %v", err) | ||||
| 	} | ||||
| 	ctDuration, err := time.ParseDuration(timeout) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("unable to parse connect timeout duration, err: %v", err) | ||||
| 	} | ||||
| 	conf.ConnConfig.ConnectTimeout = ctDuration | ||||
| 
 | ||||
| 	dbPool, err := pgxpool.NewWithConfig(ctx, conf) | ||||
| 	if err != nil { | ||||
| 		return nil, fmt.Errorf("Unable to establish connection with database, err: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	return dbPool, nil | ||||
| } | ||||
|  | @ -0,0 +1,15 @@ | |||
| package main | ||||
| 
 | ||||
| import ( | ||||
| 	"fmt" | ||||
| 	"os" | ||||
| ) | ||||
| 
 | ||||
| func main() { | ||||
| 	command := CreateRootCommand() | ||||
| 	err := command.Execute() | ||||
| 	if err != nil { | ||||
| 		fmt.Println(err.Error()) | ||||
| 		os.Exit(1) | ||||
| 	} | ||||
| } | ||||
|  | @ -0,0 +1,70 @@ | |||
| #!/usr/bin/env bash | ||||
| 
 | ||||
| # Deployment script - intended to run on Moonstream API server | ||||
| 
 | ||||
| # Colors | ||||
| C_RESET='\033[0m' | ||||
| C_RED='\033[1;31m' | ||||
| C_GREEN='\033[1;32m' | ||||
| C_YELLOW='\033[1;33m' | ||||
| 
 | ||||
| # Logs | ||||
| PREFIX_INFO="${C_GREEN}[INFO]${C_RESET} [$(date +%d-%m\ %T)]" | ||||
| PREFIX_WARN="${C_YELLOW}[WARN]${C_RESET} [$(date +%d-%m\ %T)]" | ||||
| PREFIX_CRIT="${C_RED}[CRIT]${C_RESET} [$(date +%d-%m\ %T)]" | ||||
| 
 | ||||
| # Main | ||||
| APP_DIR="${APP_DIR:-/home/ubuntu/api}" | ||||
| AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION:-us-east-1}" | ||||
| SCRIPT_DIR="$(realpath $(dirname $0))" | ||||
| SECRETS_DIR="${SECRETS_DIR:-/home/ubuntu/engineapi-secrets}" | ||||
| PARAMETERS_ENV_PATH="${SECRETS_DIR}/app.env" | ||||
| 
 | ||||
| # API server service file | ||||
| CLEAN_CALL_REQUESTS_SERVICE_FILE="workers-engine-clean-call-requests.service" | ||||
| CLEAN_CALL_REQUESTS_TIMER_FILE="workers-engine-clean-call-requests.timer" | ||||
| 
 | ||||
| set -eu | ||||
| 
 | ||||
| echo | ||||
| echo | ||||
| echo -e "${PREFIX_INFO} Install checkenv" | ||||
| HOME=/home/ubuntu /usr/local/go/bin/go install github.com/bugout-dev/checkenv@latest | ||||
| 
 | ||||
| echo | ||||
| echo | ||||
| echo -e "${PREFIX_INFO} Retrieving deployment parameters" | ||||
| if [ ! -d "${SECRETS_DIR}" ]; then | ||||
|   mkdir "${SECRETS_DIR}" | ||||
|   echo -e "${PREFIX_WARN} Created new secrets directory" | ||||
| fi | ||||
| AWS_DEFAULT_REGION="${AWS_DEFAULT_REGION}" /home/ubuntu/go/bin/checkenv show aws_ssm+engine:true > "${PARAMETERS_ENV_PATH}" | ||||
| chmod 0640 "${PARAMETERS_ENV_PATH}" | ||||
| 
 | ||||
| echo | ||||
| echo | ||||
| echo -e "${PREFIX_INFO} Add AWS default region to parameters" | ||||
| echo "AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}" >> "${PARAMETERS_ENV_PATH}" | ||||
| 
 | ||||
| echo | ||||
| echo | ||||
| echo -e "${PREFIX_INFO} Add instance local IP to parameters" | ||||
| echo "AWS_LOCAL_IPV4=$(ec2metadata --local-ipv4)" >> "${PARAMETERS_ENV_PATH}" | ||||
| 
 | ||||
| echo | ||||
| echo | ||||
| echo -e "${PREFIX_INFO} Replacing existing Engine API server service definition with ${ENGINE_SERVICE_FILE}" | ||||
| chmod 644 "${SCRIPT_DIR}/${ENGINE_SERVICE_FILE}" | ||||
| cp "${SCRIPT_DIR}/${ENGINE_SERVICE_FILE}" "/home/ubuntu/.config/systemd/user/${ENGINE_SERVICE_FILE}" | ||||
| XDG_RUNTIME_DIR="/run/user/1000" systemctl --user daemon-reload | ||||
| XDG_RUNTIME_DIR="/run/user/1000" systemctl --user restart --no-block "${ENGINE_SERVICE_FILE}" | ||||
| 
 | ||||
| 
 | ||||
| echo | ||||
| echo | ||||
| echo -e "${PREFIX_INFO} Replacing existing workers-engine-clean-call-requests service and timer with: ${CLEAN_CALL_REQUESTS_SERVICE_FILE}, ${CLEAN_CALL_REQUESTS_TIMER_FILE}" | ||||
| chmod 644 "${SCRIPT_DIR}/${CLEAN_CALL_REQUESTS_SERVICE_FILE}" "${SCRIPT_DIR}/${CLEAN_CALL_REQUESTS_TIMER_FILE}" | ||||
| cp "${SCRIPT_DIR}/${CLEAN_CALL_REQUESTS_SERVICE_FILE}" "/home/ubuntu/.config/systemd/user/${CLEAN_CALL_REQUESTS_SERVICE_FILE}" | ||||
| cp "${SCRIPT_DIR}/${CLEAN_CALL_REQUESTS_TIMER_FILE}" "/home/ubuntu/.config/systemd/user/${CLEAN_CALL_REQUESTS_TIMER_FILE}" | ||||
| XDG_RUNTIME_DIR="/run/user/1000" systemctl --user daemon-reload | ||||
| XDG_RUNTIME_DIR="/run/user/1000" systemctl --user restart --no-block "${CLEAN_CALL_REQUESTS_TIMER_FILE}" | ||||
|  | @ -0,0 +1,11 @@ | |||
| [Unit] | ||||
| Description=Clean outdated call_requests from Engine DB | ||||
| After=network.target | ||||
| 
 | ||||
| [Service] | ||||
| Type=oneshot | ||||
| WorkingDirectory=/home/ubuntu/api/workers | ||||
| EnvironmentFile=/home/ubuntu/engineapi-secrets/app.env | ||||
| ExecStart=/home/ubuntu/api/workers/workers engine clean-call-requests -db-uri "${ENGINE_DB_URI}" | ||||
| CPUWeight=50 | ||||
| SyslogIdentifier=workers-engine-clean-call-requests | ||||
|  | @ -0,0 +1,9 @@ | |||
| [Unit] | ||||
| Description=Clean outdated call_requests from Engine DB | ||||
| 
 | ||||
| [Timer] | ||||
| OnBootSec=40s | ||||
| OnUnitActiveSec=60m | ||||
| 
 | ||||
| [Install] | ||||
| WantedBy=timers.target | ||||
|  | @ -0,0 +1,10 @@ | |||
| #!/usr/bin/env sh | ||||
| 
 | ||||
| # Compile application and run with provided arguments | ||||
| set -e | ||||
| 
 | ||||
| PROGRAM_NAME="workers_dev" | ||||
| 
 | ||||
| go build -o "$PROGRAM_NAME" cmd/workers/*.go | ||||
| 
 | ||||
| ./"$PROGRAM_NAME" "$@" | ||||
|  | @ -0,0 +1,19 @@ | |||
| module github.com/moonstream-to/api/workers | ||||
| 
 | ||||
| go 1.19 | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/jackc/pgx/v5 v5.3.1 | ||||
| 	github.com/spf13/cobra v1.7.0 | ||||
| ) | ||||
| 
 | ||||
| require ( | ||||
| 	github.com/inconshreveable/mousetrap v1.1.0 // indirect | ||||
| 	github.com/jackc/pgpassfile v1.0.0 // indirect | ||||
| 	github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect | ||||
| 	github.com/jackc/puddle/v2 v2.2.0 // indirect | ||||
| 	github.com/spf13/pflag v1.0.5 // indirect | ||||
| 	golang.org/x/crypto v0.6.0 // indirect | ||||
| 	golang.org/x/sync v0.1.0 // indirect | ||||
| 	golang.org/x/text v0.7.0 // indirect | ||||
| ) | ||||
|  | @ -0,0 +1,34 @@ | |||
| github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= | ||||
| github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||||
| github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= | ||||
| github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= | ||||
| github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= | ||||
| github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= | ||||
| github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= | ||||
| github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= | ||||
| github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= | ||||
| github.com/jackc/pgx/v5 v5.3.1 h1:Fcr8QJ1ZeLi5zsPZqQeUZhNhxfkkKBOgJuYkJHoBOtU= | ||||
| github.com/jackc/pgx/v5 v5.3.1/go.mod h1:t3JDKnCBlYIc0ewLF0Q7B8MXmoIaBOZj/ic7iHozM/8= | ||||
| github.com/jackc/puddle/v2 v2.2.0 h1:RdcDk92EJBuBS55nQMMYFXTxwstHug4jkhT5pq8VxPk= | ||||
| github.com/jackc/puddle/v2 v2.2.0/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= | ||||
| github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||||
| github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||||
| github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= | ||||
| github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= | ||||
| github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= | ||||
| github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | ||||
| github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | ||||
| github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||||
| github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= | ||||
| github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
| github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= | ||||
| golang.org/x/crypto v0.6.0 h1:qfktjS5LUO+fFKeJXZ+ikTRijMmljikvG68fpMMruSc= | ||||
| golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= | ||||
| golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= | ||||
| golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= | ||||
| golang.org/x/text v0.7.0 h1:4BRB4x83lYWy72KwLD/qYDuTu7q9PjSagHvijDw7cLo= | ||||
| golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= | ||||
| gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= | ||||
| gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||
| gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= | ||||
| gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= | ||||
|  | @ -0,0 +1,35 @@ | |||
| package engine | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"fmt" | ||||
| 	"log" | ||||
| 	"time" | ||||
| 
 | ||||
| 	"github.com/jackc/pgx/v5/pgxpool" | ||||
| ) | ||||
| 
 | ||||
| type CallRequest struct { | ||||
| 	Id                    string      `json:"id"` | ||||
| 	RegisteredContractIid string      `json:"registered_contract_id"` | ||||
| 	Caller                string      `json:"caller"` | ||||
| 	MoonstreamUserId      string      `json:"moonstream_user_id"` | ||||
| 	Method                string      `json:"method"` | ||||
| 	Parameters            interface{} `json:"parameters"` | ||||
| 	ExpiresAt             time.Time   `json:"expires_at"` | ||||
| 	CreatedAt             time.Time   `json:"created_at"` | ||||
| 	UpdatedAt             time.Time   `json:"updated_at"` | ||||
| } | ||||
| 
 | ||||
| func CleanCallRequestsCommand(ctx context.Context, dbPool *pgxpool.Pool) error { | ||||
| 	tag, err := dbPool.Exec( | ||||
| 		ctx, | ||||
| 		"DELETE FROM call_requests WHERE expires_at <= NOW() - INTERVAL '1 minute';", | ||||
| 	) | ||||
| 	if err != nil { | ||||
| 		return fmt.Errorf("delete execution failed, err: %v", err) | ||||
| 	} | ||||
| 
 | ||||
| 	log.Printf("Deleted %d call requests", tag.RowsAffected()) | ||||
| 	return nil | ||||
| } | ||||
|  | @ -0,0 +1,3 @@ | |||
| package workers | ||||
| 
 | ||||
| const VERSION string = "0.0.1" | ||||
|  | @ -0,0 +1 @@ | |||
| export ENGINE_DB_URI="postgresql://<username>:<password>@<db_host>:<db_port>/<db_name>" | ||||
		Ładowanie…
	
		Reference in New Issue
	
	 kompotkot
						kompotkot