Skip to content

Commit

Permalink
Initial version
Browse files Browse the repository at this point in the history
  • Loading branch information
riton committed Sep 5, 2021
1 parent 2249756 commit c2d3c35
Show file tree
Hide file tree
Showing 325 changed files with 83,874 additions and 38 deletions.
83 changes: 67 additions & 16 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ package cmd

import (
"context"
"fmt"
"os"
"strings"
"time"

"github.com/riton/nagios-plugin-git-hosted-project-merge-requests/nagios"
Expand All @@ -48,14 +50,34 @@ import (
"github.com/spf13/viper"
)

var cfgFile string
type rootCmdFlags struct {
Host string `mapstructure:"host"`
Debug bool `mapstructure:"debug"`
Timeout time.Duration `mapstructure:"timeout"`
ConfigFile string
GitProvider string `mapstructure:"git-provider"`
APIToken string `mapstructure:"api-token"`
Project string `mapstructure:"project"`
TargetBranch string `mapstructure:"target-branch"`
WarningLastUpdateDelay time.Duration `mapstructure:"delay-warning-last-update"`
CriticalLastUpdateDelay time.Duration `mapstructure:"delay-critical-last-update"`
}

var (
// Default command flags
cmdFlags = rootCmdFlags{
Timeout: 30 * time.Second,
}
)

// rootCmd represents the base command when called without any subcommands
var rootCmd = &cobra.Command{
Use: "nagios-plugin-git-hosted-project-merge-requests",
Short: "Checks that a github / gitlab / gitea project has opened merge requests",
Long: ``,
Run: nagios.ProbeCobraAdapter,
Use: "nagios-plugin-git-hosted-project-merge-requests",
Short: "Checks that a github / gitlab / gitea project has opened merge requests",
Long: ``,
Run: func(cmd *cobra.Command, args []string) {
nagios.ProbeCobraAdapter(cmd, args, nagiosConfigViperAdapter())
},
SilenceUsage: true,
SilenceErrors: true,
}
Expand All @@ -75,38 +97,53 @@ func init() {
// Cobra supports persistent flags, which, if defined here,
// will be global for your application.

rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "", "config file (default is /etc/nagios-plugin-git-hosted-project-merge-requests/config.yaml)")
rootCmd.PersistentFlags().StringVarP(&cmdFlags.ConfigFile, "config", "c", "", "config file (default is /etc/nagios-plugin-git-hosted-project-merge-requests/config.yaml)")

rootCmd.Flags().StringP("host", "H", "", "host to check")
rootCmd.Flags().StringVarP(&cmdFlags.Host, "host", "H", "", "host to check (API endpoint)")
rootCmd.MarkFlagRequired("host")

rootCmd.PersistentFlags().DurationP("timeout", "t", 30*time.Second, "Global timeout")
rootCmd.Flags().StringVarP(&cmdFlags.Project, "project", "P", "", "project to check for opened MergeRequests")
rootCmd.MarkFlagRequired("project")

rootCmd.Flags().StringVarP(&cmdFlags.GitProvider, "git-provider", "p", "", fmt.Sprintf("git provider can be one of %s", strings.Join([]string{nagios.GitlabGitProvider}, ",")))

// Cobra also supports local flags, which will only run
// when this action is called directly.
rootCmd.Flags().BoolP("debug", "d", false, "Enable debug")
rootCmd.PersistentFlags().DurationVarP(&cmdFlags.Timeout, "timeout", "t", 30*time.Second, "Global timeout")
rootCmd.PersistentFlags().BoolVarP(&cmdFlags.Debug, "debug", "d", false, "Enable debug")

rootCmd.Flags().StringVar(&cmdFlags.APIToken, "api-token", "", "API Token used for authentication")
rootCmd.Flags().StringVar(&cmdFlags.TargetBranch, "target-branch", "master", "Only consider merge requests with this target-branch")

rootCmd.Flags().DurationVar(&cmdFlags.WarningLastUpdateDelay, "warning-last-update", 6*time.Hour, "warning if last-update was that delay ago")
rootCmd.Flags().DurationVar(&cmdFlags.CriticalLastUpdateDelay, "critical-last-update", 24*time.Hour, "critical if last-update was that delay ago")

viper.BindPFlag("host", rootCmd.Flags().Lookup("host"))
//viper.BindPFlag("ssh.connect_timeout", rootCmd.PersistentFlags().Lookup("connect-timeout"))
viper.BindPFlag("project", rootCmd.Flags().Lookup("project"))
viper.BindPFlag("debug", rootCmd.PersistentFlags().Lookup("debug"))
viper.BindPFlag("timeout", rootCmd.PersistentFlags().Lookup("timeout"))
viper.BindPFlag("api-token", rootCmd.Flags().Lookup("api-token"))
viper.BindPFlag("git-provider", rootCmd.Flags().Lookup("git-provider"))
viper.BindPFlag("target-branch", rootCmd.Flags().Lookup("target-branch"))
viper.BindPFlag("warning-last-update", rootCmd.Flags().Lookup("warning-last-update"))
viper.BindPFlag("critical-last-update", rootCmd.Flags().Lookup("critical-last-update"))
}

// initConfig reads in config file and ENV variables if set.
func initConfig() {
log.SetOutput(os.Stderr)

if cfgFile != "" {
if cmdFlags.ConfigFile != "" {
// Use config file from the flag.
viper.SetConfigFile(cfgFile)
viper.SetConfigFile(cmdFlags.ConfigFile)
} else {
// Search config in home directory with name ".nagios-plugin-check_ssh_interactive_connect" (without extension).
viper.AddConfigPath("/etc/nagios-plugin-git-hosted-project-merge-requests")
viper.SetConfigName("config")
}

viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
viper.AutomaticEnv() // read in environment variables that match

debug, _ := rootCmd.Flags().GetBool("debug")
if debug {
if cmdFlags.Debug {
log.SetLevel(log.DebugLevel)
}

Expand All @@ -115,3 +152,17 @@ func initConfig() {
log.Debug("Using config file:", viper.ConfigFileUsed())
}
}

func nagiosConfigViperAdapter() nagios.ProbeConfig {
return nagios.ProbeConfig{
Timeout: viper.GetDuration("timeout"),
APIEndpoint: viper.GetString("host"),
Project: viper.GetString("project"),
Debug: viper.GetBool("debug"),
APIToken: viper.GetString("api-token"),
GitProvider: viper.GetString("git-provider"),
TargetBranch: viper.GetString("target-branch"),
WarningLastUpdateDelay: viper.GetDuration("warning-last-update"),
CriticalLastUpdateDelay: viper.GetDuration("critical-last-update"),
}
}
3 changes: 3 additions & 0 deletions example/config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
# You usually don't want your secrets to be passed on command line
api-token: 's3cr3t'
10 changes: 10 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,15 @@ require (
github.com/sirupsen/logrus v1.8.1
github.com/spf13/cobra v1.2.1
github.com/spf13/viper v1.8.1
github.com/xanzy/go-gitlab v0.50.4
)

require (
github.com/fsnotify/fsnotify v1.4.9 // indirect
github.com/golang/protobuf v1.5.2 // indirect
github.com/google/go-querystring v1.0.0 // indirect
github.com/hashicorp/go-cleanhttp v0.5.1 // indirect
github.com/hashicorp/go-retryablehttp v0.6.8 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/inconshreveable/mousetrap v1.0.0 // indirect
github.com/magiconair/properties v1.8.5 // indirect
Expand All @@ -23,8 +28,13 @@ require (
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/subosito/gotenv v1.2.0 // indirect
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 // indirect
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 // indirect
golang.org/x/sys v0.0.0-20210510120138-977fb7262007 // indirect
golang.org/x/text v0.3.5 // indirect
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 // indirect
google.golang.org/appengine v1.6.7 // indirect
google.golang.org/protobuf v1.26.0 // indirect
gopkg.in/ini.v1 v1.62.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
)
19 changes: 19 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM=
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
Expand All @@ -116,7 +117,10 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
Expand All @@ -142,10 +146,15 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFb
github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q=
github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=
github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxCsHI=
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
github.com/hashicorp/go-retryablehttp v0.6.8 h1:92lWxgpa+fF3FozM4B3UZtHZMJX8T5XT+TFdCxsPyWs=
github.com/hashicorp/go-retryablehttp v0.6.8/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
Expand Down Expand Up @@ -243,6 +252,8 @@ github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5Cc
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s=
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
github.com/xanzy/go-gitlab v0.50.4 h1:DA0+D9eTBnZvrGBOQ66XV4ZV9gOFXKbbgm9L99EKCUs=
github.com/xanzy/go-gitlab v0.50.4/go.mod h1:Q+hQhV508bDPoBijv7YjK/Lvlb4PhVhJdKqXVQrUoAE=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
Expand Down Expand Up @@ -338,8 +349,10 @@ golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4 h1:4nGaVu0QrbjT/AK2PRLuQfQuh6DJve+pELhqTdAj3x0=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
Expand All @@ -350,6 +363,7 @@ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602 h1:0Ja1LBD+yisY6RWM/BH7TJVXWsSjs2VwBSmvSX4HdBc=
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
Expand Down Expand Up @@ -416,6 +430,7 @@ golang.org/x/text v0.3.5 h1:i6eZZ+zk0SOf0xgBpEpPD18qWcJda6q1sxt3S0kzyUQ=
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
Expand Down Expand Up @@ -471,6 +486,7 @@ golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
Expand All @@ -495,11 +511,13 @@ google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBz
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
Expand Down Expand Up @@ -573,6 +591,7 @@ google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpAD
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.26.0 h1:bxAC2xTBsZGibn2RTntX0oH50xLsqy1OxA9tTL3p/lk=
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
Expand Down
20 changes: 20 additions & 0 deletions nagios/config.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package nagios

import "time"

const (
GitlabGitProvider = "gitlab"
GithubGitProvider = "github"
)

type ProbeConfig struct {
APIEndpoint string `mapstructure:"api-endpoint"`
Debug bool `mapstructure:"debug"`
GitProvider string `mapstructure:"git-provider"`
APIToken string `mapstructure:"api-token"`
Project string `mapstructure:"project"`
Timeout time.Duration `mapstructure:"timeout"`
TargetBranch string `mapstructure:"target-branch"`
WarningLastUpdateDelay time.Duration `mapstructure:"delay-warning-last-update"`
CriticalLastUpdateDelay time.Duration `mapstructure:"delay-critical-last-update"`
}
48 changes: 48 additions & 0 deletions nagios/gitlab_checker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package nagios

import (
"github.com/pkg/errors"
"github.com/xanzy/go-gitlab"
)

var (
// https://docs.gitlab.com/ee/api/merge_requests.html#list-project-merge-requests
// opened, closed, locked, or merged.
gitlabMergeRequestsOpenedState = "opened"
)

type gitlabProjectMRChecker struct {
client *gitlab.Client
}

func newGitlabProjectMRChecker(endpoint, apiToken string) (*gitlabProjectMRChecker, error) {
c, err := gitlab.NewClient(apiToken, gitlab.WithBaseURL(endpoint))
if err != nil {
return nil, err
}
return &gitlabProjectMRChecker{
client: c,
}, nil
}

func (g gitlabProjectMRChecker) CheckMergeRequests(project string, targetBranch string) ([]MergeRequest, error) {
var gmr []MergeRequest
mr, _, err := g.client.MergeRequests.ListProjectMergeRequests(project, &gitlab.ListProjectMergeRequestsOptions{
State: &gitlabMergeRequestsOpenedState,
TargetBranch: &targetBranch,
})
if err != nil {
return gmr, errors.Wrap(err, "listing project merge-requests")
}

for _, cmr := range mr {
gmr = append(gmr, MergeRequest{
CreatedAt: *cmr.CreatedAt,
UpdatedAt: *cmr.UpdatedAt,
ID: *&cmr.ID,
Title: cmr.Title,
})
}

return gmr, nil
}
10 changes: 10 additions & 0 deletions nagios/merge_request.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package nagios

import "time"

type MergeRequest struct {
ID int
CreatedAt time.Time
UpdatedAt time.Time
Title string
}
5 changes: 5 additions & 0 deletions nagios/mr_checker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
package nagios

type GitMergeRequestChecker interface {
CheckMergeRequests(project string, targetBranch string) ([]MergeRequest, error)
}
Loading

0 comments on commit c2d3c35

Please sign in to comment.