mirror of
https://github.com/usual2970/certimate.git
synced 2025-07-20 01:47:58 +00:00
pool certificate issuance requests
This commit is contained in:
@@ -15,10 +15,24 @@ import (
|
||||
"github.com/go-acme/lego/v4/lego"
|
||||
|
||||
"github.com/usual2970/certimate/internal/domain"
|
||||
"github.com/usual2970/certimate/internal/pkg/utils/pool"
|
||||
"github.com/usual2970/certimate/internal/pkg/utils/slices"
|
||||
"github.com/usual2970/certimate/internal/repository"
|
||||
)
|
||||
|
||||
const defaultPoolSize = 8
|
||||
|
||||
var poolInstance *pool.Pool[proxyApplicant, applicantResult]
|
||||
|
||||
type applicantResult struct {
|
||||
result *ApplyCertResult
|
||||
err error
|
||||
}
|
||||
|
||||
func init() {
|
||||
poolInstance = pool.NewPool[proxyApplicant, applicantResult](defaultPoolSize)
|
||||
}
|
||||
|
||||
type ApplyCertResult struct {
|
||||
CertificateFullChain string
|
||||
IssuerCertificate string
|
||||
@@ -84,6 +98,17 @@ func NewWithApplyNode(node *domain.WorkflowNode) (Applicant, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
func applyAsync(applicant challenge.Provider, options *applicantOptions) <-chan applicantResult {
|
||||
return poolInstance.Submit(context.Background(), func(p proxyApplicant) applicantResult {
|
||||
rs := applicantResult{}
|
||||
rs.result, rs.err = apply(p.applicant, p.options)
|
||||
return rs
|
||||
}, proxyApplicant{
|
||||
applicant: applicant,
|
||||
options: options,
|
||||
})
|
||||
}
|
||||
|
||||
func apply(challengeProvider challenge.Provider, options *applicantOptions) (*ApplyCertResult, error) {
|
||||
settingsRepo := repository.NewSettingsRepository()
|
||||
settings, _ := settingsRepo.GetByName(context.Background(), "sslProvider")
|
||||
@@ -185,5 +210,6 @@ type proxyApplicant struct {
|
||||
}
|
||||
|
||||
func (d *proxyApplicant) Apply() (*ApplyCertResult, error) {
|
||||
return apply(d.applicant, d.options)
|
||||
rs := <-applyAsync(d.applicant, d.options)
|
||||
return rs.result, rs.err
|
||||
}
|
||||
|
Reference in New Issue
Block a user