diff --git a/cmd/main.go b/cmd/main.go
index 9aeb10fa..bc6e954e 100644
--- a/cmd/main.go
+++ b/cmd/main.go
@@ -32,9 +32,14 @@ var (
)
func main() {
+ var err error
runtime.GOMAXPROCS(runtime.NumCPU())
+
meta.Version = version
meta.UserAgent = fmt.Sprintf("%s/%s go/%s %s", meta.ID, meta.Version, runtime.Version()[2:], strings.Title(runtime.GOOS))
+ if meta.Hostname, err = os.Hostname(); err != nil {
+ log.Fatal().Err(err).Msg("Cannot resolve hostname")
+ }
// Parse command line
_ = kong.Parse(&cli,
@@ -52,7 +57,7 @@ func main() {
// Load timezone location
location, err := time.LoadLocation(cli.Timezone)
if err != nil {
- log.Panic().Err(err).Msgf("Cannot load timezone %s", cli.Timezone)
+ log.Fatal().Err(err).Msgf("Cannot load timezone %s", cli.Timezone)
}
// Init
diff --git a/docs/notif/amqp.md b/docs/notif/amqp.md
index c5f7da3f..25878fd0 100644
--- a/docs/notif/amqp.md
+++ b/docs/notif/amqp.md
@@ -43,6 +43,7 @@ The JSON response will look like this:
```json
{
"diun_version": "0.3.0",
+ "hostname": "myserver",
"status": "new",
"provider": "file",
"image": "docker.io/crazymax/swarm-cronjob:0.2.1",
diff --git a/docs/notif/webhook.md b/docs/notif/webhook.md
index d7f4908a..3b30a3d0 100644
--- a/docs/notif/webhook.md
+++ b/docs/notif/webhook.md
@@ -34,6 +34,7 @@ The JSON response will look like this:
```json
{
"diun_version": "4.0.0",
+ "hostname": "myserver",
"status": "new",
"provider": "file",
"image": "docker.io/crazymax/diun:latest",
diff --git a/internal/model/meta.go b/internal/model/meta.go
index c73f36ae..d9580f0a 100644
--- a/internal/model/meta.go
+++ b/internal/model/meta.go
@@ -10,4 +10,5 @@ type Meta struct {
Author string
Version string
UserAgent string
+ Hostname string
}
diff --git a/internal/notif/amqp/client.go b/internal/notif/amqp/client.go
index 6a58c906..fa47c43d 100644
--- a/internal/notif/amqp/client.go
+++ b/internal/notif/amqp/client.go
@@ -72,6 +72,7 @@ func (c *Client) Send(entry model.NotifEntry) error {
body, err := json.Marshal(struct {
Version string `json:"diun_version"`
+ Hostname string `json:"hostname"`
Status string `json:"status"`
Provider string `json:"provider"`
Image string `json:"image"`
@@ -82,6 +83,7 @@ func (c *Client) Send(entry model.NotifEntry) error {
Platform string `json:"platform"`
}{
Version: c.meta.Version,
+ Hostname: c.meta.Hostname,
Status: string(entry.Status),
Provider: entry.Provider,
Image: entry.Image.String(),
diff --git a/internal/notif/gotify/client.go b/internal/notif/gotify/client.go
index 8d1b6dee..dc624779 100644
--- a/internal/notif/gotify/client.go
+++ b/internal/notif/gotify/client.go
@@ -47,14 +47,20 @@ func (c *Client) Send(entry model.NotifEntry) error {
title = fmt.Sprintf("New image %s has been added", entry.Image.String())
}
- tagTpl := "`{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}`"
+ tagTpl := "`{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}`"
if len(entry.Image.HubLink) > 0 {
- tagTpl = "[`{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}`]({{ .Image.HubLink }})"
+ tagTpl = "[`{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}`]({{ .Entry.Image.HubLink }})"
}
var msgBuf bytes.Buffer
- msgTpl := template.Must(template.New("gotify").Parse(fmt.Sprintf("Docker tag %s which you subscribed to through {{ .Provider }} provider has been {{ if (eq .Status \"new\") }}newly added{{ else }}updated{{ end }}.", tagTpl)))
- if err := msgTpl.Execute(&msgBuf, entry); err != nil {
+ msgTpl := template.Must(template.New("gotify").Parse(fmt.Sprintf("Docker tag %s which you subscribed to through {{ .Entry.Provider }} provider has been {{ if (eq .Entry.Status \"new\") }}newly added{{ else }}updated{{ end }} on {{ .Meta.Hostname }}.", tagTpl)))
+ if err := msgTpl.Execute(&msgBuf, struct {
+ Meta model.Meta
+ Entry model.NotifEntry
+ }{
+ Meta: c.meta,
+ Entry: entry,
+ }); err != nil {
return err
}
diff --git a/internal/notif/mail/client.go b/internal/notif/mail/client.go
index 55ffe261..f0445b56 100644
--- a/internal/notif/mail/client.go
+++ b/internal/notif/mail/client.go
@@ -59,24 +59,30 @@ func (c *Client) Send(entry model.NotifEntry) error {
subject = fmt.Sprintf("New image %s has been added", entry.Image.String())
}
- tagTpl := "**{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}**"
+ tagTpl := "**{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}**"
if len(entry.Image.HubLink) > 0 {
- tagTpl = "[**{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}**]({{ .Image.HubLink }})"
+ tagTpl = "[**{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}**]({{ .Entry.Image.HubLink }})"
}
// Body
var emailBuf bytes.Buffer
emailTpl := template.Must(template.New("email").Parse(fmt.Sprintf(`
-Docker tag %s which you subscribed to through **{{ .Provider }}** provider has been {{ if (eq .Status "new") }}newly added{{ else }}updated{{ end }}.
+Docker tag %s which you subscribed to through **{{ .Entry.Provider }}** provider has been {{ if (eq .Entry.Status "new") }}newly added{{ else }}updated{{ end }} on **{{ .Meta.Hostname }}**.
-This image has been {{ if (eq .Status "new") }}created{{ else }}updated{{ end }} at {{ .Manifest.Created.Format "Jan 02, 2006 15:04:05 UTC" }}
-with digest {{ .Manifest.Digest }} for {{ .Manifest.Platform }} platform.
+This image has been {{ if (eq .Entry.Status "new") }}created{{ else }}updated{{ end }} at {{ .Entry.Manifest.Created.Format "Jan 02, 2006 15:04:05 UTC" }}
+with digest {{ .Entry.Manifest.Digest }} for {{ .Entry.Manifest.Platform }} platform.
Need help, or have questions? Go to https://github.com/crazy-max/diun and leave an issue.
`, tagTpl)))
- if err := emailTpl.Execute(&emailBuf, entry); err != nil {
+ if err := emailTpl.Execute(&emailBuf, struct {
+ Meta model.Meta
+ Entry model.NotifEntry
+ }{
+ Meta: c.meta,
+ Entry: entry,
+ }); err != nil {
return err
}
email := hermes.Email{
diff --git a/internal/notif/rocketchat/client.go b/internal/notif/rocketchat/client.go
index 457d50e0..e0306312 100644
--- a/internal/notif/rocketchat/client.go
+++ b/internal/notif/rocketchat/client.go
@@ -50,12 +50,23 @@ func (c *Client) Send(entry model.NotifEntry) error {
}
var textBuf bytes.Buffer
- textTpl := template.Must(template.New("rocketchat").Parse(`Docker tag {{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }} which you subscribed to through {{ .Provider }} provider has been {{ if (eq .Status "new") }}newly added{{ else }}updated{{ end }}.`))
- if err := textTpl.Execute(&textBuf, entry); err != nil {
+ textTpl := template.Must(template.New("rocketchat").Parse(`Docker tag {{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }} which you subscribed to through {{ .Entry.Provider }} provider has been {{ if (eq .Entry.Status "new") }}newly added{{ else }}updated{{ end }}.`))
+ if err := textTpl.Execute(&textBuf, struct {
+ Meta model.Meta
+ Entry model.NotifEntry
+ }{
+ Meta: c.meta,
+ Entry: entry,
+ }); err != nil {
return err
}
fields := []AttachmentField{
+ {
+ Title: "Hostname",
+ Value: c.meta.Hostname,
+ Short: false,
+ },
{
Title: "Provider",
Value: entry.Provider,
diff --git a/internal/notif/script/client.go b/internal/notif/script/client.go
index a86f1241..3931dea6 100644
--- a/internal/notif/script/client.go
+++ b/internal/notif/script/client.go
@@ -53,6 +53,7 @@ func (c *Client) Send(entry model.NotifEntry) error {
// Set env vars
cmd.Env = append(os.Environ(), []string{
fmt.Sprintf("DIUN_VERSION=%s", c.meta.Version),
+ fmt.Sprintf("DIUN_HOSTNAME=%s", c.meta.Hostname),
fmt.Sprintf("DIUN_ENTRY_STATUS=%s", string(entry.Status)),
fmt.Sprintf("DIUN_ENTRY_PROVIDER=%s", entry.Provider),
fmt.Sprintf("DIUN_ENTRY_IMAGE=%s", entry.Image.String()),
diff --git a/internal/notif/slack/slack.go b/internal/notif/slack/slack.go
index 93bc9e68..28f26ef3 100644
--- a/internal/notif/slack/slack.go
+++ b/internal/notif/slack/slack.go
@@ -38,8 +38,14 @@ func (c *Client) Name() string {
// Send creates and sends a slack notification with an entry
func (c *Client) Send(entry model.NotifEntry) error {
var textBuf bytes.Buffer
- textTpl := template.Must(template.New("text").Parse(" Docker tag `{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}` {{ if (eq .Status \"new\") }}newly added{{ else }}updated{{ end }}."))
- if err := textTpl.Execute(&textBuf, entry); err != nil {
+ textTpl := template.Must(template.New("text").Parse(" Docker tag `{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}` {{ if (eq .Entry.Status \"new\") }}newly added{{ else }}updated{{ end }}."))
+ if err := textTpl.Execute(&textBuf, struct {
+ Meta model.Meta
+ Entry model.NotifEntry
+ }{
+ Meta: c.meta,
+ Entry: entry,
+ }); err != nil {
return err
}
@@ -49,6 +55,11 @@ func (c *Client) Send(entry model.NotifEntry) error {
}
fields := []slack.AttachmentField{
+ {
+ Title: "Hostname",
+ Value: c.meta.Hostname,
+ Short: false,
+ },
{
Title: "Provider",
Value: entry.Provider,
diff --git a/internal/notif/teams/client.go b/internal/notif/teams/client.go
index efba45ab..4c8c7a71 100644
--- a/internal/notif/teams/client.go
+++ b/internal/notif/teams/client.go
@@ -53,14 +53,20 @@ func (c *Client) Send(entry model.NotifEntry) error {
Timeout: time.Duration(10) * time.Second,
}
- tagTpl := "`{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}`"
+ tagTpl := "`{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}`"
if len(entry.Image.HubLink) > 0 {
- tagTpl = "[`{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}`]({{ .Image.HubLink }})"
+ tagTpl = "[`{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}`]({{ .Entry.Image.HubLink }})"
}
var textBuf bytes.Buffer
- textTpl := template.Must(template.New("text").Parse(fmt.Sprintf("Docker tag %s {{ if (eq .Status \"new\") }}newly added{{ else }}updated{{ end }}.", tagTpl)))
- if err := textTpl.Execute(&textBuf, entry); err != nil {
+ textTpl := template.Must(template.New("text").Parse(fmt.Sprintf("Docker tag %s {{ if (eq .Entry.Status \"new\") }}newly added{{ else }}updated{{ end }}.", tagTpl)))
+ if err := textTpl.Execute(&textBuf, struct {
+ Meta model.Meta
+ Entry model.NotifEntry
+ }{
+ Meta: c.meta,
+ Entry: entry,
+ }); err != nil {
return err
}
@@ -84,6 +90,8 @@ func (c *Client) Send(entry model.NotifEntry) error {
ActivityTitle: textBuf.String(),
ActivitySubtitle: "Provider: " + entry.Provider,
Facts: []Fact{
+ {"Hostname", c.meta.Hostname},
+ {"Provider", entry.Provider},
{"Created", entry.Manifest.Created.Format("Jan 02, 2006 15:04:05 UTC")},
{"Digest", entry.Manifest.Digest.String()},
{"Platform", entry.Manifest.Platform},
diff --git a/internal/notif/telegram/telegram.go b/internal/notif/telegram/telegram.go
index 7ed6adaf..6d5fc8ce 100644
--- a/internal/notif/telegram/telegram.go
+++ b/internal/notif/telegram/telegram.go
@@ -39,14 +39,20 @@ func (c *Client) Send(entry model.NotifEntry) error {
return err
}
- tagTpl := "{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}"
+ tagTpl := "{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}"
if len(entry.Image.HubLink) > 0 {
- tagTpl = "[{{ .Image.Domain }}/{{ .Image.Path }}:{{ .Image.Tag }}]({{ .Image.HubLink }})"
+ tagTpl = "[{{ .Entry.Image.Domain }}/{{ .Entry.Image.Path }}:{{ .Entry.Image.Tag }}]({{ .Entry.Image.HubLink }})"
}
var msgBuf bytes.Buffer
- msgTpl := template.Must(template.New("email").Parse(fmt.Sprintf("Docker tag %s which you subscribed to through {{ .Provider }} provider has been {{ if (eq .Status \"new\") }}newly added{{ else }}updated{{ end }}.", tagTpl)))
- if err := msgTpl.Execute(&msgBuf, entry); err != nil {
+ msgTpl := template.Must(template.New("email").Parse(fmt.Sprintf("Docker tag %s which you subscribed to through {{ .Entry.Provider }} provider has been {{ if (eq .Entry.Status \"new\") }}newly added{{ else }}updated{{ end }} on {{ .Meta.Hostname }}.", tagTpl)))
+ if err := msgTpl.Execute(&msgBuf, struct {
+ Meta model.Meta
+ Entry model.NotifEntry
+ }{
+ Meta: c.meta,
+ Entry: entry,
+ }); err != nil {
return err
}
diff --git a/internal/notif/webhook/client.go b/internal/notif/webhook/client.go
index fbd6588c..f8030ba3 100644
--- a/internal/notif/webhook/client.go
+++ b/internal/notif/webhook/client.go
@@ -41,6 +41,7 @@ func (c *Client) Send(entry model.NotifEntry) error {
body, err := json.Marshal(struct {
Version string `json:"diun_version"`
+ Hostname string `json:"hostname"`
Status string `json:"status"`
Provider string `json:"provider"`
Image string `json:"image"`
@@ -51,6 +52,7 @@ func (c *Client) Send(entry model.NotifEntry) error {
Platform string `json:"platform"`
}{
Version: c.meta.Version,
+ Hostname: c.meta.Hostname,
Status: string(entry.Status),
Provider: entry.Provider,
Image: entry.Image.String(),