mirror of
https://github.com/xiaoxinpro/nginx-proxy-manager-zh.git
synced 2025-01-23 21:28:15 -05:00
64 lines
1.3 KiB
Go
64 lines
1.3 KiB
Go
|
package worker
|
||
|
|
||
|
import (
|
||
|
"time"
|
||
|
|
||
|
"npm/internal/entity/certificate"
|
||
|
"npm/internal/logger"
|
||
|
"npm/internal/state"
|
||
|
)
|
||
|
|
||
|
type certificateWorker struct {
|
||
|
state *state.AppState
|
||
|
}
|
||
|
|
||
|
// StartCertificateWorker starts the CertificateWorker
|
||
|
func StartCertificateWorker(state *state.AppState) {
|
||
|
worker := newCertificateWorker(state)
|
||
|
logger.Info("CertificateWorker Started")
|
||
|
worker.Run()
|
||
|
}
|
||
|
|
||
|
func newCertificateWorker(state *state.AppState) *certificateWorker {
|
||
|
return &certificateWorker{
|
||
|
state: state,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// Run the CertificateWorker
|
||
|
func (w *certificateWorker) Run() {
|
||
|
// global wait group
|
||
|
gwg := w.state.GetWaitGroup()
|
||
|
gwg.Add(1)
|
||
|
|
||
|
ticker := time.NewTicker(15 * time.Second)
|
||
|
mainLoop:
|
||
|
for {
|
||
|
select {
|
||
|
case _, more := <-w.state.GetTermSig():
|
||
|
if !more {
|
||
|
logger.Info("Terminating CertificateWorker ... ")
|
||
|
break mainLoop
|
||
|
}
|
||
|
case <-ticker.C:
|
||
|
// Can confirm that this will wait for completion before the next loop
|
||
|
requestCertificates()
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func requestCertificates() {
|
||
|
// logger.Debug("requestCertificates fired")
|
||
|
rows, err := certificate.GetByStatus(certificate.StatusReady)
|
||
|
if err != nil {
|
||
|
logger.Error("requestCertificatesError", err)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
for _, row := range rows {
|
||
|
if err := row.Request(); err != nil {
|
||
|
logger.Error("CertificateRequestError", err)
|
||
|
}
|
||
|
}
|
||
|
}
|