parent
6feffc568a
commit
ca27cd6c67
@ -0,0 +1,100 @@ |
|||||||
|
package main |
||||||
|
|
||||||
|
import ( |
||||||
|
"context" |
||||||
|
"errors" |
||||||
|
"fmt" |
||||||
|
"io" |
||||||
|
"path" |
||||||
|
|
||||||
|
"github.com/mediocregopher/blog.mediocregopher.com/srv/cfg" |
||||||
|
"github.com/mediocregopher/blog.mediocregopher.com/srv/mailinglist" |
||||||
|
"github.com/mediocregopher/mediocre-go-lib/v2/mctx" |
||||||
|
"github.com/mediocregopher/mediocre-go-lib/v2/mlog" |
||||||
|
"github.com/tilinna/clock" |
||||||
|
) |
||||||
|
|
||||||
|
func loggerFatalErr(ctx context.Context, logger *mlog.Logger, descr string, err error) { |
||||||
|
logger.Fatal(ctx, fmt.Sprintf("%s: %v", descr, err)) |
||||||
|
} |
||||||
|
|
||||||
|
func main() { |
||||||
|
ctx := context.Background() |
||||||
|
cfg := cfg.New() |
||||||
|
|
||||||
|
dataDir := cfg.String("data-dir", ".", "Directory to use for long term storage") |
||||||
|
|
||||||
|
var mailerParams mailinglist.MailerParams |
||||||
|
mailerParams.SetupCfg(cfg) |
||||||
|
ctx = mctx.WithAnnotator(ctx, &mailerParams) |
||||||
|
|
||||||
|
var mlParams mailinglist.Params |
||||||
|
mlParams.SetupCfg(cfg) |
||||||
|
ctx = mctx.WithAnnotator(ctx, &mlParams) |
||||||
|
|
||||||
|
// initialization
|
||||||
|
err := cfg.Init(ctx) |
||||||
|
|
||||||
|
logger := mlog.NewLogger(nil) |
||||||
|
defer logger.Close() |
||||||
|
|
||||||
|
logger.Info(ctx, "process started") |
||||||
|
defer logger.Info(ctx, "process exiting") |
||||||
|
|
||||||
|
if err != nil { |
||||||
|
loggerFatalErr(ctx, logger, "initializing", err) |
||||||
|
} |
||||||
|
|
||||||
|
clock := clock.Realtime() |
||||||
|
|
||||||
|
var mailer mailinglist.Mailer |
||||||
|
if mailerParams.SMTPAddr == "" { |
||||||
|
logger.Info(ctx, "-smtp-addr not given, using NullMailer") |
||||||
|
mailer = mailinglist.NullMailer |
||||||
|
} else { |
||||||
|
mailer = mailinglist.NewMailer(mailerParams) |
||||||
|
} |
||||||
|
|
||||||
|
mlStore, err := mailinglist.NewStore(path.Join(*dataDir, "mailinglist.sqlite3")) |
||||||
|
if err != nil { |
||||||
|
loggerFatalErr(ctx, logger, "initializing mailing list storage", err) |
||||||
|
} |
||||||
|
defer mlStore.Close() |
||||||
|
|
||||||
|
mlParams.Store = mlStore |
||||||
|
mlParams.Mailer = mailer |
||||||
|
mlParams.Clock = clock |
||||||
|
|
||||||
|
ml := mailinglist.New(mlParams) |
||||||
|
_ = ml |
||||||
|
|
||||||
|
args := cfg.Args() |
||||||
|
if len(args) == 0 { |
||||||
|
args = append(args, "") |
||||||
|
} |
||||||
|
|
||||||
|
action, args := args[0], args[1:] |
||||||
|
|
||||||
|
switch action { |
||||||
|
case "list": |
||||||
|
for it := mlStore.GetAll(); ; { |
||||||
|
email, err := it() |
||||||
|
if errors.Is(err, io.EOF) { |
||||||
|
break |
||||||
|
} else if err != nil { |
||||||
|
loggerFatalErr(ctx, logger, "retrieving next email", err) |
||||||
|
} |
||||||
|
|
||||||
|
ctx := mctx.Annotate(context.Background(), |
||||||
|
"email", email.Email, |
||||||
|
"createdAt", email.CreatedAt, |
||||||
|
"verifiedAt", email.VerifiedAt, |
||||||
|
) |
||||||
|
|
||||||
|
logger.Info(ctx, "next") |
||||||
|
} |
||||||
|
|
||||||
|
default: |
||||||
|
logger.Fatal(ctx, "invalid action") |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue