Billionmail/BillionMail · error
failed to convert overview data: %v
Error message
failed to convert overview data: %v
What it means
rebuildPostfixServiceNetworks1 found the 'services' mapping but no map entry named 'postfix-billionmail', so it cannot rebuild the Postfix service's network config. Message wording differs from error 403 but the condition is identical.
Source
Thrown at core/internal/controller/batch_mail/batch_mail_v1_task_stat_chart.go:39
res.Code = 500
res.SetError(gerror.New(public.LangCtx(ctx, "Failed to get task information: {}", err.Error())))
return
}
if taskInfo == nil || taskInfo.Id == 0 {
res.Code = 404
res.SetError(gerror.New(public.LangCtx(ctx, "Task not found: {}", req.TaskId)))
return
}
// reuse the maillog_stat service to get the overview
overview := maillog_stat.NewOverview()
overviewMap := overview.Overview(req.TaskId, req.Domain, req.StartTime, req.EndTime)
err = gconv.Struct(overviewMap, &res.Data)
if err != nil {
err = fmt.Errorf("failed to convert overview data: %v", err)
return
}
//statService := batch_mail.NewTaskStatService()
//
//chartData := statService.GetTaskStatChart(req.TaskId, req.Domain, req.StartTime, req.EndTime)
//
//res.Data.Dashboard = chartData["dashboard"]
//res.Data.MailProviders = chartData["mail_providers"]
//res.Data.SendMailChart = chartData["send_mail_chart"]
//res.Data.BounceRateChart = chartData["bounce_rate_chart"]
//res.Data.OpenRateChart = chartData["open_rate_chart"]
//res.Data.ClickRateChart = chartData["click_rate_chart"]
res.SetSuccess(public.LangCtx(ctx, "Task statistics retrieved successfully"))
return
}
View on GitHub (pinned to fc36c76c05)
Solutions
- Add/restore a service named exactly 'postfix-billionmail' in the compose file being parsed
- Merge override files into the config before calling the rebuild
- Adapt the hardcoded service key in config_manager.go if renaming intentionally
- Log the keys of dockerConfig["services"] to confirm what the parser produced
Example fix
// before
services:
postfix: {image: billionmail/postfix}
// after
services:
postfix-billionmail: {image: billionmail/postfix} Defensive patterns
Strategy: validation
Validate before calling
services, _ := dockerConfig["services"].(map[string]interface{})
if _, ok := services["postfix-billionmail"]; !ok {
return fmt.Errorf("cannot rebuild: postfix-billionmail absent")
} Type guard
func hasPostfixService(cfg map[string]interface{}) bool {
svc, _ := cfg["services"].(map[string]interface{})
_, ok := svc["postfix-billionmail"]
return ok
} Try / catch
if err := m.rebuildPostfixServiceNetworks1(dockerConfig, configs); err != nil {
if strings.Contains(err.Error(), "configuration does not exist") {
// restore or merge the service definition, then retry
}
return err
} Prevention
- Keep the postfix-billionmail key canonical across base and override compose files
- Run merged-config validation ('docker compose config') before programmatic rebuilds
- Alert on diffs that rename or delete the mail service in deployment repos
- Add a preflight grep for the service name in the file being loaded
When it happens
Trigger: services exists in dockerConfig but contains no 'postfix-billionmail' mapping: service renamed, defined only in an unmerged override file, or the wrong file was parsed.
Common situations: Custom compose files with a renamed mail service; forgetting `docker compose config` merge semantics when only the base file is loaded; typos.
Related errors
- failed to check unsubscribe: %w
- Not suppliers found
- Model not found
- failed to query group: %w
- the recipient has unsubscribed from the current group and ca
AI-assisted analysis of Billionmail/BillionMail@fc36c76c05 (2026-09-05).
Data as JSON: /api/errors/22462636c3c81ce2.
Report an issue: GitHub.