mirror of
https://github.com/crazy-max/diun.git
synced 2025-12-21 13:23:09 +01:00
Display hostname in notifications (#102)
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -10,4 +10,5 @@ type Meta struct {
|
||||
Author string
|
||||
Version string
|
||||
UserAgent string
|
||||
Hostname string
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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 <code>{{ .Manifest.Created.Format "Jan 02, 2006 15:04:05 UTC" }}</code>
|
||||
with digest <code>{{ .Manifest.Digest }}</code> for <code>{{ .Manifest.Platform }}</code> platform.
|
||||
This image has been {{ if (eq .Entry.Status "new") }}created{{ else }}updated{{ end }} at <code>{{ .Entry.Manifest.Created.Format "Jan 02, 2006 15:04:05 UTC" }}</code>
|
||||
with digest <code>{{ .Entry.Manifest.Digest }}</code> for <code>{{ .Entry.Manifest.Platform }}</code> 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{
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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()),
|
||||
|
||||
@@ -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("<!channel> 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("<!channel> 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,
|
||||
|
||||
@@ -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},
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
|
||||
@@ -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(),
|
||||
|
||||
Reference in New Issue
Block a user