"errors"
"fmt"
"io"
- "log"
"net"
"os"
"path/filepath"
return err
}
- linked := "WhatsApp not linked"
+ linked := "not linked"
if whatsapp.isLinked() {
- linked = "WhatsApp linked"
+ linked = "linked"
}
- logger.Printf("ready: socket %s, model %s (%s), workdir %s, %s, %d schedules", listener.Addr(), agent.config.Model, agent.config.Effort, agent.config.Workdir, linked, schedules.Len())
+ logger.Info("ready", "version", version, "socket", listener.Addr(), "model", agent.config.Model, "effort", agent.config.Effort, "workdir", agent.config.Workdir, "whatsapp", linked, "schedules", schedules.Len())
var telegram *TelegramBot
if hasBot {
telegram = newTelegramBot(newTelegramAPI(telegramAPIURL, botSettings.Token), botSettings.Owner, filepath.Join(agent.dir, telegramOffsetFileName), daemonLogger(out, "telegram: "))
- logger.Print("Telegram bot started")
+ logger.Info("Telegram bot started")
}
return daemonServe(ctx, listener, telegram, whatsapp, schedules, func(notify func(Event)) (*TurnLoop, error) {
err := json.Unmarshal(scanner.Bytes(), &request)
if err == nil {
- err = daemonRunRequest(l, h.whatsapp, request, func(text string) {
- h.Send(client, Event{
- Kind: "notice",
- Text: text,
+ if request.Type == "backup" {
+ var size int64
+
+ size, err = backupData(ctx, filepath.Dir(l.agent.dir), request.Text, h.whatsapp, l.runs.Snapshot)
+ if err == nil {
+ h.Send(client, Event{
+ Kind: "backup",
+ Text: fmt.Sprintf("%s (%d bytes)", request.Text, size),
+ })
+ }
+ } else {
+ err = daemonRunRequest(l, h.whatsapp, request, func(text string) {
+ h.Send(client, Event{
+ Kind: "notice",
+ Text: text,
+ })
})
- })
+ }
}
if err != nil {
return fmt.Errorf("unknown request %q", request.Type)
}
}
-
-// daemonLogger returns the logger of the part of the daemon with prefix, such
-// as "telegram: ", on out. The journal adds the time to each line and sets
-// JOURNAL_STREAM for a service, so then the lines have no time stamp. Otherwise
-// each line has the standard time stamp.
-func daemonLogger(out io.Writer, prefix string) *log.Logger {
- if os.Getenv("JOURNAL_STREAM") != "" {
- return log.New(out, prefix, 0)
- }
-
- return log.New(out, prefix, log.LstdFlags)
-}
-
-// durationText returns d for a log line: rounded to the second, or to the
-// millisecond when it is shorter than a second.
-func durationText(d time.Duration) string {
- if d < time.Second {
- return d.Round(time.Millisecond).String()
- }
-
- return d.Round(time.Second).String()
-}