Skip to content
This repository was archived by the owner on Feb 8, 2026. It is now read-only.

feat: add database configuration and initialize scheduler service#83

Merged
johnnyluo merged 1 commit into
mainfrom
start-scheduler-in-worker
Jun 4, 2025
Merged

feat: add database configuration and initialize scheduler service#83
johnnyluo merged 1 commit into
mainfrom
start-scheduler-in-worker

Conversation

@johnnyluo

@johnnyluo johnnyluo commented Jun 4, 2025

Copy link
Copy Markdown
Contributor

Summary by CodeRabbit

  • New Features
    • Integrated a scheduler service to manage scheduled tasks within the payroll worker.
    • Added support for a Postgres backend configuration.
    • Introduced a new queue for scheduled plugins with configurable concurrency.

Copilot AI review requested due to automatic review settings June 4, 2025 06:51
@coderabbitai

coderabbitai Bot commented Jun 4, 2025

Copy link
Copy Markdown
Contributor

Walkthrough

A new Database configuration struct with a DSN field was added to the payroll worker configuration. The main function now initializes a Postgres backend using this DSN, sets up a scheduler service with the backend and Asynq client, and updates the Asynq server to include a new scheduled plugin queue.

Changes

File(s) Change Summary
cmd/payroll/worker/config.go Added a nested Database struct with a DSN field to PayrollWorkerConfig.
cmd/payroll/worker/main.go Initialized Postgres backend from config, set up scheduler service, and updated Asynq queues.

Sequence Diagram(s)

sequenceDiagram
    participant Main
    participant Config
    participant PostgresBackend
    participant SchedulerService
    participant AsynqClient
    participant AsynqServer

    Main->>Config: Load PayrollWorkerConfig (with Database.DSN)
    Main->>PostgresBackend: Initialize using Config.Database.DSN
    Main->>AsynqClient: Initialize Asynq client
    Main->>SchedulerService: Create with PostgresBackend, AsynqClient, Redis options
    Main->>SchedulerService: Start
    Main->>AsynqServer: Configure with new scheduled_plugin_queue
    Note over Main: Defer SchedulerService.Stop on exit
Loading

Poem

A hop, a skip, a DSN,
The worker's gears now spin again!
With Postgres joined and tasks anew,
Scheduler hops in, right on cue.
Queues are set, the code's in sync—
Time for a carrot, and a thinking wink! 🥕

Warning

There were issues while running some tools. Please review the errors and either fix the tool's configuration or disable the tool if it's a critical failure.

🔧 golangci-lint (1.64.8)

level=warning msg="[runner] Can't run linter goanalysis_metalinter: buildir: failed to load package session: could not load export data: no export data for "github.com/vultisig/go-wrappers/go-dkls/sessions""
level=error msg="Running error: can't run linter goanalysis_metalinter\nbuildir: failed to load package session: could not load export data: no export data for "github.com/vultisig/go-wrappers/go-dkls/sessions""

✨ Finishing Touches
  • 📝 Generate Docstrings

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Explain this complex logic.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai explain this code block.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and explain its main purpose.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate docstrings to generate docstrings for this PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Adds database configuration support and initializes a scheduler service in the payroll worker.

  • Introduce Database.DSN in config to load Postgres connection
  • Wire up postgres.NewPostgresBackend and scheduler.NewSchedulerService in main.go
  • Start and stop the scheduler service alongside existing task handlers

Reviewed Changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.

File Description
cmd/payroll/worker/config.go Added Database struct with DSN field
cmd/payroll/worker/main.go Imported scheduler and Postgres modules, created backend, initialized scheduler, and started service
Comments suppressed due to low confidence (1)

cmd/payroll/worker/main.go:55

  • Typo in variable name 'postgressDB'; consider renaming to 'postgresDB' to accurately reflect the Postgres backend.
postgressDB, err := postgres.NewPostgresBackend(cfg.Database.DSN, nil)

Comment thread cmd/payroll/worker/main.go

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
cmd/payroll/worker/main.go (1)

55-58: Consider adding DSN validation.

The Postgres backend initialization is correctly implemented with proper error handling. However, consider validating that cfg.Database.DSN is not empty before attempting to create the backend to provide clearer error messages.

+	if cfg.Database.DSN == "" {
+		panic(fmt.Errorf("database DSN is required but not configured"))
+	}
	postgressDB, err := postgres.NewPostgresBackend(cfg.Database.DSN, nil)
	if err != nil {
		panic(fmt.Errorf("failed to create postgres backend: %w", err))
	}
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2ee2971 and 2141664.

📒 Files selected for processing (2)
  • cmd/payroll/worker/config.go (1 hunks)
  • cmd/payroll/worker/main.go (2 hunks)
🔇 Additional comments (4)
cmd/payroll/worker/config.go (1)

21-23: LGTM! Database configuration follows established patterns.

The Database struct addition is well-structured and consistent with other configuration fields in the struct. The mapstructure and json tags are properly configured for configuration unmarshalling.

cmd/payroll/worker/main.go (3)

11-13: LGTM! Import additions are appropriate.

The new imports for scheduler and postgres packages align with the functionality being added and follow the existing import organization pattern.


47-47: LGTM! New queue configuration is consistent.

The addition of "scheduled_plugin_queue" with concurrency 10 follows the same pattern as the existing queue configuration and is appropriately named for its purpose.


59-64: LGTM! Scheduler service lifecycle is properly managed.

The scheduler service creation, initialization, and cleanup are well-implemented:

  • Proper error handling with descriptive error messages
  • Service is started immediately after creation
  • Cleanup is ensured with defer schedulerSvc.Stop()
  • Follows the same error handling pattern as other services

@RaghavSood RaghavSood left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@johnnyluo
johnnyluo merged commit 27441bc into main Jun 4, 2025
2 checks passed
@johnnyluo
johnnyluo deleted the start-scheduler-in-worker branch June 4, 2025 10:05
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants