From 0de6504988658bdde34584e7a6413c48f1e2df0b Mon Sep 17 00:00:00 2001 From: busra Date: Fri, 2 Apr 2021 08:45:15 +0300 Subject: [PATCH] using log library of Go-Core instead of external library --- .github/workflows/release.yml | 62 ++++-- .../send2opsgenie.go | 32 +-- .../send2opsgenie.go | 117 +++++----- BMCRemedy/opsgenie-bmcremedy/send2opsgenie.go | 42 ++-- Icinga/opsgenie-icinga/send2opsgenie.go | 209 +++++++++--------- Icinga2/opsgenie-icinga2/send2opsgenie.go | 28 ++- Nagios/opsgenie-nagios/send2opsgenie.go | 59 +++-- NagiosXI/opsgenie-nagiosxi/send2opsgenie.go | 22 +- OP5/opsgenie-op5/send2opsgenie.go | 27 +-- Zabbix/opsgenie-zabbix/send2opsgenie.go | 26 ++- Zenoss/opsgenie-zenoss/send2opsgenie.go | 59 ++--- release/log/log.go | 55 +++++ 12 files changed, 415 insertions(+), 323 deletions(-) create mode 100644 release/log/log.go diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 3009f53..9fcca23 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,7 @@ on: workflow_dispatch: inputs: integration: - description: 'Integration' + description: 'Integration' required: true oec-version: description: 'Version of OEC' @@ -63,6 +63,12 @@ jobs: file: oec-linux-amd64-${{ github.event.inputs.oec-version }}.zip - name: Extracting Linux Package run: unzip -qq oec-linux-amd64-${{ github.event.inputs.oec-version }}.zip -d .release/oec-linux/${{ env.INTEGRATION_FOLDER }} + - name: Copy Log File if Incoming part exist + run: | + if [ -d ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }} ] + then + cp -R release/log/log.go ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }}/. + fi - name: Copy Integration Files run: cp -R ${{ github.event.inputs.integration }}/. .release/oec-linux/${{ env.INTEGRATION_FOLDER }} - name: Remove http script (todo remove when http version is released) @@ -78,9 +84,9 @@ jobs: run: | INTEGRATION_PATH=oec-linux/${{ env.INTEGRATION_FOLDER }}/opsgenie-${{ env.INTEGRATION_NAME }} echo ${INTEGRATION_PATH} - go get -u github.com/alexcesaro/log && \ cd ${INTEGRATION_PATH} && \ - GOOS=linux GOARCH=amd64 go build -o send2opsgenie send2opsgenie.go + GOOS=linux GOARCH=amd64 go build -o send2opsgenie send2opsgenie.go log.go + rm -f log.go - name: Compressing Linux Package run: | cd .release/oec-linux/ @@ -128,6 +134,12 @@ jobs: run: unzip -qq oec-linux-amd64-${{ github.event.inputs.oec-version }}.zip -d .release/oec-rpm - name: Copy SPEC Files run: cp -R release/oec-builder/oec-rpm/. .release/oec-rpm + - name: Copy Log File if Incoming part exist + run: | + if [ -d ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }} ] + then + cp -R release/log/log.go ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }}/. + fi - name: Copy Integration Files run: cp -R ${{ github.event.inputs.integration }}/. .release/oec-rpm/oec-scripts - name: Check Incoming part exists @@ -141,10 +153,10 @@ jobs: run: | INTEGRATION_PATH=oec-rpm/oec-scripts/opsgenie-${INTEGRATION_NAME} echo ${INTEGRATION_PATH} - go get -u github.com/alexcesaro/log && \ cd ${INTEGRATION_PATH} && \ - GOOS=linux GOARCH=amd64 go build -o send2opsgenie send2opsgenie.go - - name: Create RPM Package + GOOS=linux GOARCH=amd64 go build -o send2opsgenie send2opsgenie.go log.go + rm -f log.go + - name: Create RPM Package working-directory: .release/oec-rpm run: | sed -i "s||$RPM_BUILD_ROOT/home/opsgenie/oec/scripts/actionExecutor.py|" oec-scripts/conf/config.json @@ -222,6 +234,12 @@ jobs: run: cp -R release/oec-builder/oec-deb/. .release/oec-deb - name: Create Output Directory run: mkdir -p .release/oec-deb/home/opsgenie/oec + - name: Copy Log File if Incoming part exist + run: | + if [ -d ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }} ] + then + cp -R release/log/log.go ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }}/. + fi - name: Copy Integration Files run: cp -R ${{ github.event.inputs.integration }}/. .release/oec-deb/home/opsgenie/oec - name: Check Incoming part exists @@ -235,10 +253,10 @@ jobs: run: | INTEGRATION_PATH=oec-deb/home/opsgenie/oec/opsgenie-${{ env.INTEGRATION_NAME }} echo ${INTEGRATION_PATH} - go get -u github.com/alexcesaro/log && \ cd ${INTEGRATION_PATH} && \ - GOOS=linux GOARCH=amd64 go build -o send2opsgenie send2opsgenie.go - - name: Create Deb Package + GOOS=linux GOARCH=amd64 go build -o send2opsgenie send2opsgenie.go log.go + rm -f log.go + - name: Create Deb Package working-directory: .release/ run: | sed -i "s||/home/opsgenie/oec/scripts/actionExecutor.py|" oec-deb/home/opsgenie/oec/conf/config.json @@ -257,7 +275,7 @@ jobs: with: name: Debian Artifact path: .release/oec-deb/opsgenie-${{ env.INTEGRATION_NAME }}_${{ env.INTEGRATION_VERSION }}_amd64.deb - - name: Upload + - name: Upload uses: actions/upload-release-asset@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -274,7 +292,7 @@ jobs: INTEGRATION_NAME: ${{ needs.setup.outputs.integration_name }} INTEGRATION_VERSION: ${{ needs.setup.outputs.integration_version }} INTEGRATION_FOLDER: opsgenie-${{ needs.setup.outputs.integration_name }}-${{ needs.setup.outputs.integration_version }}-win-386 - if: github.ref == 'refs/heads/master' + if: github.ref == 'refs/heads/master' steps: - name: Set up Go 1.x uses: actions/setup-go@v2 @@ -296,6 +314,12 @@ jobs: run: unzip -qq oec-win-386-${{ github.event.inputs.oec-version }}.zip -d .release/oec-win32/${{ env.INTEGRATION_FOLDER }} - name: Copy OEC Service Conf run: cp -R release/oec-builder/oec-win32/oecService.json.example .release/oec-win32/${{ env.INTEGRATION_FOLDER }} + - name: Copy Log File if Incoming part exist + run: | + if [ -d ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }} ] + then + cp -R release/log/log.go ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }}/. + fi - name: Copy Integration Files run: cp -R ${{ github.event.inputs.integration }}/. .release/oec-win32/${{ env.INTEGRATION_FOLDER }} - name: Remove http script (todo remove when http version is released) @@ -311,9 +335,9 @@ jobs: run: | INTEGRATION_PATH=oec-win32/${{ env.INTEGRATION_FOLDER }}/opsgenie-${{ env.INTEGRATION_NAME }} echo ${INTEGRATION_PATH} - go get -u github.com/alexcesaro/log && \ cd ${INTEGRATION_PATH} && \ - GOOS=windows GOARCH=386 go build -o send2opsgenie32.exe send2opsgenie.go + GOOS=linux GOARCH=amd64 go build -o send2opsgenie send2opsgenie.go log.go + rm -f log.go - name: Compressing Win32 Package run: | cd .release/oec-win32/ @@ -340,7 +364,7 @@ jobs: INTEGRATION_NAME: ${{ needs.setup.outputs.integration_name }} INTEGRATION_VERSION: ${{ needs.setup.outputs.integration_version }} INTEGRATION_FOLDER: opsgenie-${{ needs.setup.outputs.integration_name }}-${{ needs.setup.outputs.integration_version }}-win-amd64 - if: github.ref == 'refs/heads/master' + if: github.ref == 'refs/heads/master' steps: - name: Set up Go 1.x uses: actions/setup-go@v2 @@ -362,6 +386,12 @@ jobs: run: unzip -qq oec-win-amd64-${{ github.event.inputs.oec-version }}.zip -d .release/oec-win64/${{ env.INTEGRATION_FOLDER }} - name: Copy OEC Service Conf run: cp -R release/oec-builder/oec-win64/oecService.json.example .release/oec-win64/${{ env.INTEGRATION_FOLDER }} + - name: Copy Log File if Incoming part exist + run: | + if [ -d ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }} ] + then + cp -R release/log/log.go ${{ github.event.inputs.integration }}/opsgenie-${{ env.INTEGRATION_NAME }}/. + fi - name: Copy Integration Files run: cp -R ${{ github.event.inputs.integration }}/. .release/oec-win64/${{ env.INTEGRATION_FOLDER }} - name: Remove http script (todo remove when http version is released) @@ -377,9 +407,9 @@ jobs: run: | INTEGRATION_PATH=oec-win64/${{ env.INTEGRATION_FOLDER }}/opsgenie-${{ env.INTEGRATION_NAME }} echo ${INTEGRATION_PATH} - go get -u github.com/alexcesaro/log && \ cd ${INTEGRATION_PATH} && \ - GOOS=windows GOARCH=amd64 go build -o send2opsgenie32.exe send2opsgenie.go + GOOS=linux GOARCH=amd64 go build -o send2opsgenie send2opsgenie.go log.go + rm -f log.go - name: Compressing Win 64 Package run: | cd .release/oec-win64/ diff --git a/BMCFootprintsV11/opsgenie-bmcfootprintsv11/send2opsgenie.go b/BMCFootprintsV11/opsgenie-bmcfootprintsv11/send2opsgenie.go index 5f63abe..37a89d0 100644 --- a/BMCFootprintsV11/opsgenie-bmcfootprintsv11/send2opsgenie.go +++ b/BMCFootprintsV11/opsgenie-bmcfootprintsv11/send2opsgenie.go @@ -8,8 +8,6 @@ import ( "encoding/xml" "flag" "fmt" - "github.com/alexcesaro/log" - "github.com/alexcesaro/log/golog" "io" "io/ioutil" "net" @@ -41,8 +39,8 @@ var bmcFootPrintsWebServiceURL string var configPath string var configPath2 string -var levels = map[string]log.Level{"info": log.Info, "debug": log.Debug, "warning": log.Warning, "error": log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger var ogPrefix string = "[OpsGenie] " type Item struct { @@ -189,14 +187,18 @@ func main() { parameters["closureCode"] = issueDetails.ClosureCode } else if len(issueDetails.AllDescriptions.Items) > 1 { if strings.HasPrefix(issueDetails.Description, ogPrefix) { - logger.Debug("Skipping, Incident or Problem was created from OpsGenie.") + if logger != nil { + logger.Debug("Skipping, Incident or Problem was created from OpsGenie.") + } return } parameters["action"] = "AddNote" } else { if strings.HasPrefix(issueDetails.Description, ogPrefix) { - logger.Debug("Skipping, Incident or Problem was created from OpsGenie.") + if logger != nil { + logger.Debug("Skipping, Incident or Problem was created from OpsGenie.") + } return } @@ -234,7 +236,7 @@ func main() { func printConfigToLog() { if logger != nil { - if logger.LogDebug() { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -267,7 +269,7 @@ func readConfigFile(file io.Reader) { } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -302,7 +304,7 @@ type Configuration struct { BaseUrl string `json:"baseUrl"` } -func configureLogger() log.Logger { +func configureLogger() *OpsgenieFileLogger { level := configParameters["bmcFootPrints2opsgenie.logger"] var logFilePath = parameters["logPath"] @@ -314,7 +316,7 @@ func configureLogger() log.Logger { } } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) @@ -333,10 +335,10 @@ func configureLogger() log.Logger { if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) } return tmpLogger @@ -546,19 +548,19 @@ func parseFlags() { if *apiKey != "" { parameters["apiKey"] = *apiKey } else { - parameters["apiKey"] = configParameters ["apiKey"] + parameters["apiKey"] = configParameters["apiKey"] } if *responders != "" { parameters["responders"] = *responders } else { - parameters["responders"] = configParameters ["responders"] + parameters["responders"] = configParameters["responders"] } if *tags != "" { parameters["tags"] = *tags } else { - parameters["tags"] = configParameters ["tags"] + parameters["tags"] = configParameters["tags"] } if *logPath != "" { diff --git a/BMCFootprintsV12/opsgenie-bmcfootprintsv12/send2opsgenie.go b/BMCFootprintsV12/opsgenie-bmcfootprintsv12/send2opsgenie.go index fdfa825..7af19ec 100644 --- a/BMCFootprintsV12/opsgenie-bmcfootprintsv12/send2opsgenie.go +++ b/BMCFootprintsV12/opsgenie-bmcfootprintsv12/send2opsgenie.go @@ -1,39 +1,37 @@ package main import ( + "bufio" "bytes" + "crypto/tls" + "encoding/base64" "encoding/json" + "encoding/xml" "flag" - "net/http" - "net" - "time" - "os" - "bufio" - "strings" - "io" - "strconv" - "github.com/alexcesaro/log/golog" - "github.com/alexcesaro/log" "fmt" + "io" "io/ioutil" - "crypto/tls" + "net" + "net/http" "net/url" - "encoding/base64" - "encoding/xml" + "os" "runtime" + "strconv" + "strings" + "time" ) var TOTAL_TIME = 60 var configParameters = map[string]string{"apiKey": "", - "bmcFootPrints.url": "", - "bmcFootPrints.username": "", - "bmcFootPrints.password": "", - "bmcFootPrints.workspaceName": "", - "bmcFootPrints2opsgenie.logger": "warning", - "opsgenie.api.url": "https://api.opsgenie.com", - "bmcFootPrints2opsgenie.http.proxy.enabled": "false", - "bmcFootPrints2opsgenie.http.proxy.port": "1111", - "bmcFootPrints2opsgenie.http.proxy.host": "localhost", + "bmcFootPrints.url": "", + "bmcFootPrints.username": "", + "bmcFootPrints.password": "", + "bmcFootPrints.workspaceName": "", + "bmcFootPrints2opsgenie.logger": "warning", + "opsgenie.api.url": "https://api.opsgenie.com", + "bmcFootPrints2opsgenie.http.proxy.enabled": "false", + "bmcFootPrints2opsgenie.http.proxy.port": "1111", + "bmcFootPrints2opsgenie.http.proxy.host": "localhost", "bmcFootPrints2opsgenie.http.proxy.protocol": "http", "bmcFootPrints2opsgenie.http.proxy.username": "", "bmcFootPrints2opsgenie.http.proxy.password": ""} @@ -43,8 +41,8 @@ var bmcFootPrintsWebServiceURL string var configPath string var configPath2 string -var levels = map[string]log.Level{"info": log.Info, "debug": log.Debug, "warning": log.Warning, "error": log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger var ogPrefix string = "[OpsGenie] " type Definition struct { @@ -176,7 +174,9 @@ func main() { parameters["resolutionDateTime"] = getCustomField(itemDetails.CustomFields, "Resolution Date & Time") } else if len(itemDetails.AllDescriptionsList.DescriptionsDetails) > 1 { if strings.HasPrefix(itemDetails.Description, ogPrefix) { - logger.Debug("Skipping, Incident or Problem was created from OpsGenie.") + if logger != nil { + logger.Debug("Skipping, Incident or Problem was created from OpsGenie.") + } return } @@ -185,7 +185,9 @@ func main() { parameters["updatedBy"] = getCustomField(itemDetails.CustomFields, "Updated By") } else { if strings.HasPrefix(itemDetails.Description, ogPrefix) { - logger.Debug("Skipping, Incident or Problem was created from OpsGenie.") + if logger != nil { + logger.Debug("Skipping, Incident or Problem was created from OpsGenie.") + } return } @@ -223,7 +225,7 @@ func main() { func printConfigToLog() { if logger != nil { - if logger.LogDebug() { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -236,7 +238,7 @@ func printConfigToLog() { } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -291,7 +293,7 @@ func readConfigFile(file io.Reader) { } } -func configureLogger() log.Logger { +func configureLogger() *OpsgenieFileLogger { level := configParameters["bmcFootPrints2opsgenie.logger"] var logFilePath = parameters["logPath"] @@ -303,7 +305,7 @@ func configureLogger() log.Logger { } } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) @@ -322,10 +324,10 @@ func configureLogger() log.Logger { if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) } return tmpLogger @@ -412,8 +414,8 @@ func postRequest(url string, data []byte, headersMap map[string]string) string { return string(body[:]) } else { if logger != nil { - logger.Error(logPrefix + "Couldn't post data to " + url + " successfully; Response code: "+ - strconv.Itoa(resp.StatusCode)+ " Response Body: "+ string(body[:]), err) + logger.Error(logPrefix+"Couldn't post data to "+url+" successfully; Response code: "+ + strconv.Itoa(resp.StatusCode)+" Response Body: "+string(body[:]), err) } } } else { @@ -462,7 +464,9 @@ func getWorkspaceId(workspaceName string) string { "Authorization": "Basic " + base64.StdEncoding.EncodeToString([]byte(parameters["username"]+":"+parameters["password"])), } - logger.Debug(logPrefix + "Retrieving Workspace ID for workspace " + workspaceName + ".") + if logger != nil { + logger.Debug(logPrefix + "Retrieving Workspace ID for workspace " + workspaceName + ".") + } responseString := postRequest(bmcFootPrintsWebServiceURL, []byte(bodyStr), headersMap) return parseWorkspaceId(responseString, workspaceName) @@ -483,8 +487,9 @@ func getItemDefinitionId(workspaceId string, itemType string) string { "Authorization": "Basic " + base64.StdEncoding.EncodeToString([]byte(parameters["username"]+":"+parameters["password"])), } - logger.Debug(logPrefix + "Retrieving Item Definition ID with Workspace ID " + workspaceId + ".") - + if logger != nil { + logger.Debug(logPrefix + "Retrieving Item Definition ID with Workspace ID " + workspaceId + ".") + } responseString := postRequest(bmcFootPrintsWebServiceURL, []byte(bodyStr), headersMap) return parseItemDefinitionId(responseString, itemType) } @@ -505,7 +510,9 @@ func getItemId(itemDefinitionId string, itemNumber string) string { "Authorization": "Basic " + base64.StdEncoding.EncodeToString([]byte(parameters["username"]+":"+parameters["password"])), } - logger.Debug(logPrefix + "Retrieving Item ID with Item Definition ID " + itemDefinitionId + " and Item Number " + itemNumber + ".") + if logger != nil { + logger.Debug(logPrefix + "Retrieving Item ID with Item Definition ID " + itemDefinitionId + " and Item Number " + itemNumber + ".") + } responseString := postRequest(bmcFootPrintsWebServiceURL, []byte(bodyStr), headersMap) return parseItemId(responseString) @@ -513,21 +520,23 @@ func getItemId(itemDefinitionId string, itemNumber string) string { func getTicketDetails(itemDefinitionId string, ticketId string) TicketDetailsResult { bodyStr := ` - - - - - <_itemDefinitionId>` + itemDefinitionId + ` - <_itemId>` + ticketId + ` - - - + + + + + <_itemDefinitionId>` + itemDefinitionId + ` + <_itemId>` + ticketId + ` + + + ` headersMap := map[string]string{ "Authorization": "Basic " + base64.StdEncoding.EncodeToString([]byte(parameters["username"]+":"+parameters["password"])), } - logger.Debug(logPrefix + "Retrieving Ticket Details with Item Definition ID " + itemDefinitionId + " and Item ID " + ticketId + ".") + if logger != nil { + logger.Debug(logPrefix + "Retrieving Ticket Details with Item Definition ID " + itemDefinitionId + " and Item ID " + ticketId + ".") + } responseString := postRequest(bmcFootPrintsWebServiceURL, []byte(bodyStr), headersMap) return parseTicketDetails(responseString) @@ -585,9 +594,9 @@ func getInnerElements(str string, tag string, includeMainElement bool) string { if beginIndex != -1 && endIndex != -1 { if includeMainElement { - return str[beginIndex:endIndex+len(endString)] + return str[beginIndex : endIndex+len(endString)] } else { - return str[beginIndex+len(beginString):endIndex] + return str[beginIndex+len(beginString) : endIndex] } } else { return "" @@ -606,7 +615,7 @@ func getCustomField(customFields CustomFields, customFieldName string) string { func reformatUrl(url string) string { if strings.HasSuffix(url, "/") { - return url[0:len(url)-1] + return url[0 : len(url)-1] } else { return url } @@ -638,19 +647,19 @@ func parseFlags() { if *apiKey != "" { parameters["apiKey"] = *apiKey } else { - parameters["apiKey"] = configParameters ["apiKey"] + parameters["apiKey"] = configParameters["apiKey"] } if *responders != "" { parameters["responders"] = *responders } else { - parameters["responders"] = configParameters ["responders"] + parameters["responders"] = configParameters["responders"] } if *tags != "" { parameters["tags"] = *tags } else { - parameters["tags"] = configParameters ["tags"] + parameters["tags"] = configParameters["tags"] } if *logPath != "" { diff --git a/BMCRemedy/opsgenie-bmcremedy/send2opsgenie.go b/BMCRemedy/opsgenie-bmcremedy/send2opsgenie.go index c7e4dc0..e86b9d4 100644 --- a/BMCRemedy/opsgenie-bmcremedy/send2opsgenie.go +++ b/BMCRemedy/opsgenie-bmcremedy/send2opsgenie.go @@ -7,8 +7,6 @@ import ( "encoding/json" "flag" "fmt" - "github.com/alexcesaro/log" - "github.com/alexcesaro/log/golog" "io" "io/ioutil" "net" @@ -33,7 +31,7 @@ var configParameters = map[string]string{"apiKey": API_KEY, "bmcRemedy2opsgenie.http.proxy.username": "", "bmcRemedy2opsgenie.http.proxy.password": ""} -var logger log.Logger +var logger *OpsgenieFileLogger type Incident struct { IncidentID string @@ -71,7 +69,9 @@ func main() { } loggerPath := filepath.Dir(scriptPath) logger = configureLogger(loggerPath) - logger.Info("Initializing BMC Remedy to Opsgenie Script..\r\n") + if logger != nil { + logger.Info("Initializing BMC Remedy to Opsgenie Script..\r\n") + } configPathPtr := flag.String("config-path", "C:\\OpsGenie\\BMCRemedyIntegration\\opsgenie-integration\\conf\\opsgenie-integration.conf", "OpsGenie Config Path") configFile, err := os.Open(*configPathPtr) @@ -89,7 +89,9 @@ func main() { panic(errFromConf) } - logger.Debug(configParameters, "\r\n") + if logger != nil { + logger.Debug(configParameters, "\r\n") + } printConfigToLog() incident := parseFlags() @@ -145,8 +147,10 @@ func parseFlags() Incident { *Resolution} API_KEY = *OpsGenieIntegrationAPIKey - logger.Info("Flags parsed successfully:\r\n") - logger.Debug(incident, "\r\n") + if logger != nil { + logger.Info("Flags parsed successfully:\r\n") + logger.Debug(incident, "\r\n") + } return incident } @@ -173,7 +177,9 @@ func getHttpClient(timeout int) *http.Client { } proxy = http.ProxyURL(u) } - logger.Warning("final proxy", proxy, "\r\n") + if logger != nil { + logger.Warning("final proxy", proxy, "\r\n") + } client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, @@ -255,15 +261,15 @@ func http_post(jsonBody []byte, incidentID string) { } } -func configureLogger(logFilePath string) log.Logger { +func configureLogger(logFilePath string) *OpsgenieFileLogger { logFilePath += "\\send2opsgenie.log" - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { fmt.Println("Could not create log file \""+logFilePath+" Error: ", err) } else { - tmpLogger = golog.New(file, log.Info) + tmpLogger = NewFileLogger(file, LogInfo) } return tmpLogger @@ -271,7 +277,6 @@ func configureLogger(logFilePath string) log.Logger { func printConfigToLog() { if logger != nil { - logger.Debug("Config:\r\n") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -280,12 +285,13 @@ func printConfigToLog() { logger.Debug(k, "=", v, "\r\n") } } - } } func readConfigFile(file io.Reader, configPathPtr *string) { - logger.Info("Reading config file located at:", *configPathPtr, "\r\n") + if logger != nil { + logger.Info("Reading config file located at:", *configPathPtr, "\r\n") + } scanner := bufio.NewScanner(file) for scanner.Scan() { @@ -297,7 +303,9 @@ func readConfigFile(file io.Reader, configPathPtr *string) { l[0] = strings.TrimSpace(l[0]) l[1] = strings.TrimSpace(l[1]) configParameters[l[0]] = l[1] - logger.Info("key:", l[0], "value:", l[1]) + if logger != nil { + logger.Info("key:", l[0], "value:", l[1]) + } if l[0] == "timeout" { TOTAL_TIME, _ = strconv.Atoi(l[1]) } @@ -346,7 +354,9 @@ type Configuration struct { func check(err error) { if err != nil { + if logger != nil { + logger.Error(err, "\r\n") + } panic(err) - logger.Error(err, "\r\n") } } diff --git a/Icinga/opsgenie-icinga/send2opsgenie.go b/Icinga/opsgenie-icinga/send2opsgenie.go index 348a6a9..9b4ab13 100644 --- a/Icinga/opsgenie-icinga/send2opsgenie.go +++ b/Icinga/opsgenie-icinga/send2opsgenie.go @@ -1,50 +1,48 @@ package main import ( + "bufio" "bytes" + "crypto/tls" "encoding/json" "flag" - "net/http" - "net" - "time" - "os" - "bufio" - "strings" - "io" - "strconv" - "github.com/alexcesaro/log/golog" - "github.com/alexcesaro/log" "fmt" + "io" "io/ioutil" - "crypto/tls" + "net" + "net/http" "net/url" + "os" + "strconv" + "strings" + "time" ) var ICINGA_SERVER = "default" var API_KEY = "" var TOTAL_TIME = 60 var configParameters = map[string]string{"apiKey": API_KEY, - "icinga_server": ICINGA_SERVER, - "icinga2opsgenie.logger":"warning", - "opsgenie.api.url":"https://api.opsgenie.com", - "icinga2opsgenie.http.proxy.enabled" : "false", - "icinga2opsgenie.http.proxy.port" : "1111", - "icinga2opsgenie.http.proxy.host": "localhost", - "icinga2opsgenie.http.proxy.protocol":"http", + "icinga_server": ICINGA_SERVER, + "icinga2opsgenie.logger": "warning", + "opsgenie.api.url": "https://api.opsgenie.com", + "icinga2opsgenie.http.proxy.enabled": "false", + "icinga2opsgenie.http.proxy.port": "1111", + "icinga2opsgenie.http.proxy.host": "localhost", + "icinga2opsgenie.http.proxy.protocol": "http", "icinga2opsgenie.http.proxy.username": "", "icinga2opsgenie.http.proxy.password": ""} var parameters = make(map[string]string) var configPath = "/home/opsgenie/oec/conf/opsgenie-integration.conf" var configPath2 = "/home/opsgenie/oec/conf/config.json" -var levels = map [string]log.Level{"info":log.Info,"debug":log.Debug,"warning":log.Warning,"error":log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger func main() { configFile, err := os.Open(configPath) - if err == nil{ + if err == nil { readConfigFile(configFile) - }else{ + } else { panic(err) } @@ -56,12 +54,12 @@ func main() { panic(err) } - version := flag.String("v","","") + version := flag.String("v", "", "") parseFlags() printConfigToLog() - if *version != ""{ + if *version != "" { fmt.Println("Version: 1.1") return } @@ -77,9 +75,9 @@ func main() { http_post() } -func printConfigToLog(){ +func printConfigToLog() { if logger != nil { - if (logger.LogDebug()) { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -92,21 +90,21 @@ func printConfigToLog(){ } } -func readConfigFile(file io.Reader){ +func readConfigFile(file io.Reader) { scanner := bufio.NewScanner(file) - for scanner.Scan(){ + for scanner.Scan() { line := scanner.Text() line = strings.TrimSpace(line) - if !strings.HasPrefix(line,"#") && line != "" { - l := strings.SplitN(line,"=",2) + if !strings.HasPrefix(line, "#") && line != "" { + l := strings.SplitN(line, "=", 2) l[0] = strings.TrimSpace(l[0]) l[1] = strings.TrimSpace(l[1]) - configParameters[l[0]]=l[1] - if l[0] == "icinga2opsgenie.timeout"{ - TOTAL_TIME,_ = strconv.Atoi(l[1]) + configParameters[l[0]] = l[1] + if l[0] == "icinga2opsgenie.timeout" { + TOTAL_TIME, _ = strconv.Atoi(l[1]) } } } @@ -116,7 +114,7 @@ func readConfigFile(file io.Reader){ } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -151,7 +149,7 @@ type Configuration struct { BaseUrl string `json:"baseUrl"` } -func configureLogger ()log.Logger{ +func configureLogger() *OpsgenieFileLogger { level := configParameters["icinga2opsgenie.logger"] var logFilePath = parameters["logPath"] @@ -159,27 +157,27 @@ func configureLogger ()log.Logger{ logFilePath = "/var/log/opsgenie/send2opsgenie.log" } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if err != nil { - fmt.Println("Could not create log file \"" + logFilePath + "\", will log to \"/tmp/send2opsgenie.log\" file. Error: ", err) - fileTmp, errTmp := os.OpenFile("/tmp/send2opsgenie.log", os.O_CREATE | os.O_WRONLY | os.O_APPEND, 0666) + fmt.Println("Could not create log file \""+logFilePath+"\", will log to \"/tmp/send2opsgenie.log\" file. Error: ", err) + fileTmp, errTmp := os.OpenFile("/tmp/send2opsgenie.log", os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) } return tmpLogger } -func getHttpClient (timeout int) *http.Client { +func getHttpClient(timeout int) *http.Client { seconds := (TOTAL_TIME / 12) * 2 * timeout var proxyEnabled = configParameters["icinga2opsgenie.http.proxy.enabled"] proxy := http.ProxyFromEnvironment @@ -193,9 +191,9 @@ func getHttpClient (timeout int) *http.Client { u := new(url.URL) u.Scheme = scheme - u.Host = proxyHost + ":" + proxyPort + u.Host = proxyHost + ":" + proxyPort if len(proxyUsername) > 0 { - u.User = url.UserPassword(proxyUsername,proxyPassword) + u.User = url.UserPassword(proxyUsername, proxyPassword) } if logger != nil { logger.Debug("Formed Proxy url: ", u) @@ -206,10 +204,10 @@ func getHttpClient (timeout int) *http.Client { client := &http.Client{ Transport: &http.Transport{ - TLSClientConfig: &tls.Config{InsecureSkipVerify : true}, - Proxy: proxy, + TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, + Proxy: proxy, Dial: func(netw, addr string) (net.Conn, error) { - conn, err := net.DialTimeout(netw, addr, time.Second * time.Duration(seconds)) + conn, err := net.DialTimeout(netw, addr, time.Second*time.Duration(seconds)) if err != nil { if logger != nil { logger.Error("Error occurred while connecting: ", err) @@ -224,16 +222,15 @@ func getHttpClient (timeout int) *http.Client { return client } -func http_post() { +func http_post() { var logPrefix = "" - if parameters["entity_type"] == "host"{ - logPrefix = "[HostName: "+ parameters["host_name"] + ", HostState: "+ parameters["host_state"] +"]" - }else{ - logPrefix = "[HostName: "+ parameters["host_name"] + ", ServiceDesc: "+ parameters["service_desc"] + ", ServiceState: " + parameters["service_state"] +"]" + if parameters["entity_type"] == "host" { + logPrefix = "[HostName: " + parameters["host_name"] + ", HostState: " + parameters["host_state"] + "]" + } else { + logPrefix = "[HostName: " + parameters["host_name"] + ", ServiceDesc: " + parameters["service_desc"] + ", ServiceState: " + parameters["service_state"] + "]" } - apiUrl := configParameters["opsgenie.api.url"] + "/v1/json/icinga" target := "OpsGenie" @@ -249,56 +246,54 @@ func http_post() { request, _ := http.NewRequest("POST", apiUrl, body) client := getHttpClient(i) - - if logger != nil { - logger.Debug(logPrefix + "Trying to send data to OpsGenie with timeout: ", (TOTAL_TIME / 12) * 2 * i) + logger.Debug(logPrefix+"Trying to send data to OpsGenie with timeout: ", (TOTAL_TIME/12)*2*i) } resp, error := client.Do(request) if error == nil { defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) - if err == nil{ + if err == nil { if resp.StatusCode <= 399 { if logger != nil { logger.Debug(logPrefix + " Response code: " + strconv.Itoa(resp.StatusCode)) logger.Debug(logPrefix + "Response: " + string(body[:])) - logger.Info(logPrefix + "Data from Icinga posted to " + target + " successfully") + logger.Info(logPrefix + "Data from Icinga posted to " + target + " successfully") } - }else{ + } else { if logger != nil { logger.Error(logPrefix + "Couldn't post data from Icinga to " + target + " successfully; Response code: " + strconv.Itoa(resp.StatusCode) + " Response Body: " + string(body[:])) } } - }else{ + } else { if logger != nil { - logger.Error(logPrefix + "Couldn't read the response from " + target, err) + logger.Error(logPrefix+"Couldn't read the response from "+target, err) } } break - }else if i < 3 { + } else if i < 3 { if logger != nil { - logger.Error(logPrefix + "Error occurred while sending data, will retry.", error) + logger.Error(logPrefix+"Error occurred while sending data, will retry.", error) } - }else { + } else { if logger != nil { - logger.Error(logPrefix + "Failed to post data from Icinga.", error) + logger.Error(logPrefix+"Failed to post data from Icinga.", error) } } - if resp != nil{ + if resp != nil { defer resp.Body.Close() } } } -func parseFlags()map[string]string{ - apiKey := flag.String("apiKey","","api key") - icingaServer := flag.String("is","","icinga server") +func parseFlags() map[string]string { + apiKey := flag.String("apiKey", "", "api key") + icingaServer := flag.String("is", "", "icinga server") - entityType := flag.String("entityType","","") + entityType := flag.String("entityType", "", "") - notificationType := flag.String("t", "","NOTIFICATIONTYPE") + notificationType := flag.String("t", "", "NOTIFICATIONTYPE") longDateTime := flag.String("ldt", "", "LONGDATETIME") hostName := flag.String("hn", "", "HOSTNAME") @@ -307,21 +302,21 @@ func parseFlags()map[string]string{ hostAddress := flag.String("haddr", "", "HOSTADDRESS") hostState := flag.String("hs", "", "HOSTSTATE") hostStateId := flag.String("hsi", "", "HOSTSTATEID") - lastHostState := flag.String("lhs","","LASTHOSTSTATE") - lastHostStateId := flag.String("lhsi","","LASTHOSTSTATEID") - hostStateType := flag.String("hst","","HOSTSTATETYPE") + lastHostState := flag.String("lhs", "", "LASTHOSTSTATE") + lastHostStateId := flag.String("lhsi", "", "LASTHOSTSTATEID") + hostStateType := flag.String("hst", "", "HOSTSTATETYPE") hostAttempt := flag.String("ha", "", "HOSTATTEMPT") maxHostAttempts := flag.String("mha", "", "MAXHOSTATTEMPTS") - hostEventId := flag.String("hei","","HOSTEVENTID") - lastHostEventId := flag.String("lhei","","LASTHOSTEVENTID") - hostProblemId := flag.String("hpi","","HOSTPROBLEMID") - lastHostProblemId := flag.String("lhpi","","LASTHOSTPROBLEMID") + hostEventId := flag.String("hei", "", "HOSTEVENTID") + lastHostEventId := flag.String("lhei", "", "LASTHOSTEVENTID") + hostProblemId := flag.String("hpi", "", "HOSTPROBLEMID") + lastHostProblemId := flag.String("lhpi", "", "LASTHOSTPROBLEMID") hostLatency := flag.String("hl", "", "HOSTLATENCY") - hostExecutionTime := flag.String ("het","","HOSTEXECUTIONTIME") + hostExecutionTime := flag.String("het", "", "HOSTEXECUTIONTIME") hostDuration := flag.String("hd", "", "HOSTDURATION") hostDurationSec := flag.String("hds", "", "HOSTDURATIONSEC") - hostDownTime := flag.String("hdt","","HOSTDOWNTIME") - hostPercentChange := flag.String("hpc","","HOSTPERCENTCHANGE") + hostDownTime := flag.String("hdt", "", "HOSTDOWNTIME") + hostPercentChange := flag.String("hpc", "", "HOSTPERCENTCHANGE") hostGroupName := flag.String("hgn", "", "HOSTGROUPNAME") hostGroupNames := flag.String("hgns", "", "HOSTGROUPNAMES") lastHostCheck := flag.String("lhc", "", "LASTHOSTCHECK") @@ -334,7 +329,7 @@ func parseFlags()map[string]string{ hostPerfData := flag.String("hpd", "", "HOSTPERFDATA") serviceDesc := flag.String("s", "", "SERVICEDESC") - serviceDisplayName := flag.String("sdn","","SERVICEDISPLAYNAME") + serviceDisplayName := flag.String("sdn", "", "SERVICEDISPLAYNAME") serviceState := flag.String("ss", "", "SERVICESTATE") serviceStateId := flag.String("ssi", "", "SERVICESTATEID") lastServiceState := flag.String("lss", "", "LASTSERVICESTATE") @@ -342,67 +337,65 @@ func parseFlags()map[string]string{ serviceStateType := flag.String("sst", "", "SERVICESTATETYPE") serviceAttempt := flag.String("sa", "", "SERVICEATTEMPT") maxServiceAttempts := flag.String("msa", "", "MAXSERVICEATTEMPTS") - serviceIsVolatile := flag.String("siv","","SERVICEISVOLATILE") - serviceEventId := flag.String("sei","","SERVICEEVENTID") - lastServiceEventId := flag.String("lsei","","LASTSERVICEEVENTID") - serviceProblemId := flag.String("spi","","SERVICEPROBLEMID") - lastServiceProblemId := flag.String("lspi","","LASTSERVICEPROBLEMID") + serviceIsVolatile := flag.String("siv", "", "SERVICEISVOLATILE") + serviceEventId := flag.String("sei", "", "SERVICEEVENTID") + lastServiceEventId := flag.String("lsei", "", "LASTSERVICEEVENTID") + serviceProblemId := flag.String("spi", "", "SERVICEPROBLEMID") + lastServiceProblemId := flag.String("lspi", "", "LASTSERVICEPROBLEMID") serviceLatency := flag.String("sl", "", "SERVICELATENCY") - serviceExecutionTime := flag.String("set","","SERVICEEXECUTIONTIME") + serviceExecutionTime := flag.String("set", "", "SERVICEEXECUTIONTIME") serviceDuration := flag.String("sd", "", "SERVICEDURATION") serviceDurationSec := flag.String("sds", "", "SERVICEDURATIONSEC") - serviceDownTime := flag.String("sdt","","SERVICEDOWNTIME") - servicePercentChange := flag.String("spc","","SERVICEPERCENTCHANGE") + serviceDownTime := flag.String("sdt", "", "SERVICEDOWNTIME") + servicePercentChange := flag.String("spc", "", "SERVICEPERCENTCHANGE") serviceGroupName := flag.String("sgn", "", "SERVICEGROUPNAME") serviceGroupNames := flag.String("sgns", "", "SERVICEGROUPNAMES") lastServiceCheck := flag.String("lsch", "", "LASTSERVICECHECK") lastServiceStateChange := flag.String("lssc", "", "LASTSERVICESTATECHANGE") - lastServiceOk := flag.String("lsok","","LASTSERVICEOK") - lastServiceWarning := flag.String("lsw","","LASTSERVICEWARNING") - lastServiceUnknown := flag.String("lsu","","LASTSERVICEUNKNOWN") - lastServiceCritical := flag.String("lsc","","LASTSERVICECRITICAL") + lastServiceOk := flag.String("lsok", "", "LASTSERVICEOK") + lastServiceWarning := flag.String("lsw", "", "LASTSERVICEWARNING") + lastServiceUnknown := flag.String("lsu", "", "LASTSERVICEUNKNOWN") + lastServiceCritical := flag.String("lsc", "", "LASTSERVICECRITICAL") serviceOutput := flag.String("so", "", "SERVICEOUTPUT") longServiceOutput := flag.String("lso", "", "LONGSERVICEOUTPUT") servicePerfData := flag.String("spd", "", "SERVICEPERFDATA") serviceCheckCommand := flag.String("sc", "", "SERVICECHECKCOMMAND") logPath := flag.String("logPath", "", "LOGPATH") - responders := flag.String("responders","","Responders") - tags := flag.String("tags","","Tags") + responders := flag.String("responders", "", "Responders") + tags := flag.String("tags", "", "Tags") flag.Parse() - if *apiKey != ""{ + if *apiKey != "" { parameters["apiKey"] = *apiKey - }else{ + } else { parameters["apiKey"] = configParameters["apiKey"] } - if *icingaServer != ""{ + if *icingaServer != "" { parameters["icinga_server"] = *icingaServer - }else{ + } else { parameters["icinga_server"] = configParameters["icinga_server"] } - if *responders != ""{ + if *responders != "" { parameters["responders"] = *responders - }else{ - parameters["responders"] = configParameters ["responders"] + } else { + parameters["responders"] = configParameters["responders"] } - if *tags != ""{ + if *tags != "" { parameters["tags"] = *tags - }else{ - parameters["tags"] = configParameters ["tags"] + } else { + parameters["tags"] = configParameters["tags"] } - if *logPath != "" { parameters["logPath"] = *logPath } else { parameters["logPath"] = configParameters["logPath"] } - parameters["entity_type"] = *entityType parameters["notification_type"] = *notificationType @@ -475,7 +468,7 @@ func parseFlags()map[string]string{ args := flag.Args() for i := 0; i < len(args); i += 2 { - if(len(args)%2 != 0 && i==len(args)-1){ + if len(args)%2 != 0 && i == len(args)-1 { parameters[args[i]] = "" } else { parameters[args[i]] = args[i+1] diff --git a/Icinga2/opsgenie-icinga2/send2opsgenie.go b/Icinga2/opsgenie-icinga2/send2opsgenie.go index b57ef93..b10ef38 100644 --- a/Icinga2/opsgenie-icinga2/send2opsgenie.go +++ b/Icinga2/opsgenie-icinga2/send2opsgenie.go @@ -7,8 +7,6 @@ import ( "encoding/json" "flag" "fmt" - "github.com/alexcesaro/log" - "github.com/alexcesaro/log/golog" "io" "io/ioutil" "net" @@ -36,8 +34,8 @@ var configParameters = map[string]string{"apiKey": API_KEY, var parameters = make(map[string]string) var configPath = "/home/opsgenie/oec/conf/opsgenie-integration.conf" var configPath2 = "/home/opsgenie/oec/conf/config.json" -var levels = map[string]log.Level{"info": log.Info, "debug": log.Debug, "warning": log.Warning, "error": log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger func main() { configFile, err := os.Open(configPath) @@ -77,7 +75,7 @@ func main() { func printConfigToLog() { if logger != nil { - if (logger.LogDebug()) { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -111,7 +109,7 @@ func readConfigFile(file io.Reader) { } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -146,7 +144,7 @@ type Configuration struct { BaseUrl string `json:"baseUrl"` } -func configureLogger() log.Logger { +func configureLogger() *OpsgenieFileLogger { level := configParameters["icinga2opsgenie.logger"] var logFilePath = parameters["logPath"] @@ -154,7 +152,7 @@ func configureLogger() log.Logger { logFilePath = "/var/log/opsgenie/send2opsgenie.log" } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) @@ -166,10 +164,11 @@ func configureLogger() log.Logger { if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) + } return tmpLogger @@ -233,7 +232,6 @@ func http_post() { apiUrl := configParameters["opsgenie.api.url"] + "/v1/json/icinga2" target := "OpsGenie" - if logger != nil { logger.Debug("URL: ", apiUrl) logger.Debug("Data to be posted:") @@ -348,7 +346,7 @@ func parseFlags() map[string]string { if *apiKey != "" { parameters["apiKey"] = *apiKey } else { - parameters["apiKey"] = configParameters ["apiKey"] + parameters["apiKey"] = configParameters["apiKey"] } if *icingaServer != "" { parameters["icinga_server"] = *icingaServer @@ -359,13 +357,13 @@ func parseFlags() map[string]string { if *responders != "" { parameters["responders"] = *responders } else { - parameters["responders"] = configParameters ["responders"] + parameters["responders"] = configParameters["responders"] } if *tags != "" { parameters["tags"] = *tags } else { - parameters["tags"] = configParameters ["tags"] + parameters["tags"] = configParameters["tags"] } if *logPath != "" { @@ -424,7 +422,7 @@ func parseFlags() map[string]string { args := flag.Args() for i := 0; i < len(args); i += 2 { - if (len(args)%2 != 0 && i == len(args)-1) { + if len(args)%2 != 0 && i == len(args)-1 { parameters[args[i]] = "" } else { parameters[args[i]] = args[i+1] diff --git a/Nagios/opsgenie-nagios/send2opsgenie.go b/Nagios/opsgenie-nagios/send2opsgenie.go index 1f3b7f4..1068a70 100644 --- a/Nagios/opsgenie-nagios/send2opsgenie.go +++ b/Nagios/opsgenie-nagios/send2opsgenie.go @@ -1,43 +1,41 @@ package main import ( + "bufio" "bytes" + "crypto/tls" "encoding/json" "flag" - "net/http" - "net" - "time" - "os" - "bufio" - "strings" - "io" - "strconv" - "github.com/alexcesaro/log/golog" - "github.com/alexcesaro/log" "fmt" + "io" "io/ioutil" - "crypto/tls" + "net" + "net/http" "net/url" + "os" + "strconv" + "strings" + "time" ) var NAGIOS_SERVER = "default" var API_KEY = "" var TOTAL_TIME = 60 var configParameters = map[string]string{"apiKey": API_KEY, - "nagios_server": NAGIOS_SERVER, - "nagios2opsgenie.logger": "warning", - "opsgenie.api.url": "https://api.opsgenie.com", - "nagios2opsgenie.http.proxy.enabled": "false", - "nagios2opsgenie.http.proxy.port": "1111", - "nagios2opsgenie.http.proxy.host": "localhost", + "nagios_server": NAGIOS_SERVER, + "nagios2opsgenie.logger": "warning", + "opsgenie.api.url": "https://api.opsgenie.com", + "nagios2opsgenie.http.proxy.enabled": "false", + "nagios2opsgenie.http.proxy.port": "1111", + "nagios2opsgenie.http.proxy.host": "localhost", "nagios2opsgenie.http.proxy.protocol": "http", "nagios2opsgenie.http.proxy.username": "", "nagios2opsgenie.http.proxy.password": ""} var parameters = make(map[string]string) var configPath = "/home/opsgenie/oec/conf/opsgenie-integration.conf" var configPath2 = "/home/opsgenie/oec/conf/config.json" -var levels = map[string]log.Level{"info": log.Info, "debug": log.Debug, "warning": log.Warning, "error": log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger func main() { configFile, err := os.Open(configPath) @@ -49,14 +47,12 @@ func main() { logger = configureLogger() - errFromConf := readConfigurationFileFromOECConfig(configPath2) if errFromConf != nil { panic(err) } - version := flag.String("v", "", "") parseFlags() @@ -80,7 +76,7 @@ func main() { func printConfigToLog() { if logger != nil { - if (logger.LogDebug()) { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -98,7 +94,6 @@ type Configuration struct { BaseUrl string `json:"baseUrl"` } - func readConfigFile(file io.Reader) { scanner := bufio.NewScanner(file) for scanner.Scan() { @@ -119,7 +114,7 @@ func readConfigFile(file io.Reader) { panic(err) } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -148,7 +143,7 @@ func readConfigurationFileFromOECConfig(filepath string) (error) { return err } -func configureLogger() log.Logger { +func configureLogger() *OpsgenieFileLogger { level := configParameters["nagios2opsgenie.logger"] var logFilePath = parameters["logPath"] @@ -156,7 +151,7 @@ func configureLogger() log.Logger { logFilePath = "/var/log/opsgenie/send2opsgenie.log" } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) @@ -168,10 +163,10 @@ func configureLogger() log.Logger { if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) } return tmpLogger @@ -370,7 +365,7 @@ func parseFlags() map[string]string { if *apiKey != "" { parameters["apiKey"] = *apiKey } else { - parameters["apiKey"] = configParameters ["apiKey"] + parameters["apiKey"] = configParameters["apiKey"] } if *nagiosServer != "" { parameters["nagios_server"] = *nagiosServer @@ -381,13 +376,13 @@ func parseFlags() map[string]string { if *responders != "" { parameters["responders"] = *responders } else { - parameters["responders"] = configParameters ["responders"] + parameters["responders"] = configParameters["responders"] } if *tags != "" { parameters["tags"] = *tags } else { - parameters["tags"] = configParameters ["tags"] + parameters["tags"] = configParameters["tags"] } if *logPath != "" { @@ -469,7 +464,7 @@ func parseFlags() map[string]string { args := flag.Args() for i := 0; i < len(args); i += 2 { - if (len(args)%2 != 0 && i == len(args)-1) { + if len(args)%2 != 0 && i == len(args)-1 { parameters[args[i]] = "" } else { parameters[args[i]] = args[i+1] diff --git a/NagiosXI/opsgenie-nagiosxi/send2opsgenie.go b/NagiosXI/opsgenie-nagiosxi/send2opsgenie.go index 20830af..f60b35a 100644 --- a/NagiosXI/opsgenie-nagiosxi/send2opsgenie.go +++ b/NagiosXI/opsgenie-nagiosxi/send2opsgenie.go @@ -7,8 +7,6 @@ import ( "encoding/json" "flag" "fmt" - "github.com/alexcesaro/log" - "github.com/alexcesaro/log/golog" "io" "io/ioutil" "net" @@ -36,8 +34,8 @@ var configParameters = map[string]string{"apiKey": API_KEY, var parameters = make(map[string]string) var configPath = "/home/opsgenie/oec/conf/opsgenie-integration.conf" var configPath2 = "/home/opsgenie/oec/conf/config.json" -var levels = map[string]log.Level{"info": log.Info, "debug": log.Debug, "warning": log.Warning, "error": log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger func main() { configFile, err := os.Open(configPath) @@ -79,7 +77,7 @@ func main() { func printConfigToLog() { if logger != nil { - if logger.LogDebug() { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { @@ -110,7 +108,7 @@ func readConfigFile(file io.Reader) { } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -145,7 +143,7 @@ type Configuration struct { BaseUrl string `json:"baseUrl"` } -func configureLogger() log.Logger { +func configureLogger() *OpsgenieFileLogger { level := configParameters["nagios2opsgenie.logger"] var logFilePath = parameters["logPath"] @@ -153,7 +151,7 @@ func configureLogger() log.Logger { logFilePath = "/var/log/opsgenie/send2opsgenie.log" } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) @@ -165,10 +163,10 @@ func configureLogger() log.Logger { if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) } return tmpLogger @@ -247,7 +245,9 @@ func http_post() { } strRequest, _ := json.Marshal(request) - logger.Debug("strReq: " + string(strRequest)) + if logger != nil { + logger.Debug("strReq: " + string(strRequest)) + } resp, error := client.Do(request) if error == nil { diff --git a/OP5/opsgenie-op5/send2opsgenie.go b/OP5/opsgenie-op5/send2opsgenie.go index 9148bce..2c5adf2 100644 --- a/OP5/opsgenie-op5/send2opsgenie.go +++ b/OP5/opsgenie-op5/send2opsgenie.go @@ -7,8 +7,6 @@ import ( "encoding/json" "flag" "fmt" - "github.com/alexcesaro/log" - "github.com/alexcesaro/log/golog" "io" "io/ioutil" "net" @@ -34,8 +32,8 @@ var configParameters = map[string]string{"apiKey": API_KEY, var parameters = make(map[string]string) var configPath = "/home/opsgenie/oec/conf/opsgenie-integration.conf" var configPath2 = "/home/opsgenie/oec/conf/config.json" -var levels = map[string]log.Level{"info": log.Info, "debug": log.Debug, "warning": log.Warning, "error": log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger func main() { configFile, err := os.Open(configPath) @@ -75,7 +73,7 @@ func main() { func printConfigToLog() { if logger != nil { - if (logger.LogDebug()) { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -108,7 +106,7 @@ func readConfigFile(file io.Reader) { panic(err) } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -143,7 +141,7 @@ type Configuration struct { BaseUrl string `json:"baseUrl"` } -func configureLogger() log.Logger { +func configureLogger() *OpsgenieFileLogger { level := configParameters["nagios2opsgenie.logger"] var logFilePath = parameters["logPath"] @@ -151,7 +149,7 @@ func configureLogger() log.Logger { logFilePath = "/var/log/opsgenie/send2opsgenie.log" } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) @@ -163,10 +161,10 @@ func configureLogger() log.Logger { if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) } return tmpLogger @@ -228,7 +226,6 @@ func http_post() { apiUrl := configParameters["opsgenie.api.url"] + "/v1/json/op5" target := "OpsGenie" - if logger != nil { logger.Debug("URL: ", apiUrl) logger.Debug("Data to be posted:") @@ -365,19 +362,19 @@ func parseFlags() map[string]string { if *apiKey != "" { parameters["apiKey"] = *apiKey } else { - parameters["apiKey"] = configParameters ["apiKey"] + parameters["apiKey"] = configParameters["apiKey"] } if *responders != "" { parameters["responders"] = *responders } else { - parameters["responders"] = configParameters ["responders"] + parameters["responders"] = configParameters["responders"] } if *tags != "" { parameters["tags"] = *tags } else { - parameters["tags"] = configParameters ["tags"] + parameters["tags"] = configParameters["tags"] } if *logPath != "" { @@ -459,7 +456,7 @@ func parseFlags() map[string]string { args := flag.Args() for i := 0; i < len(args); i += 2 { - if (len(args)%2 != 0 && i == len(args)-1) { + if len(args)%2 != 0 && i == len(args)-1 { parameters[args[i]] = "" } else { parameters[args[i]] = args[i+1] diff --git a/Zabbix/opsgenie-zabbix/send2opsgenie.go b/Zabbix/opsgenie-zabbix/send2opsgenie.go index 22d0079..a7bf438 100755 --- a/Zabbix/opsgenie-zabbix/send2opsgenie.go +++ b/Zabbix/opsgenie-zabbix/send2opsgenie.go @@ -7,8 +7,6 @@ import ( "encoding/json" "flag" "fmt" - "github.com/alexcesaro/log" - "github.com/alexcesaro/log/golog" "io" "io/ioutil" "net" @@ -34,8 +32,8 @@ var configParameters = map[string]string{"apiKey": API_KEY, "zabbix2opsgenie.http.proxy.password": ""} var configPath = "/home/opsgenie/oec/conf/opsgenie-integration.conf" var configPath2 = "/home/opsgenie/oec/conf/config.json" -var levels = map[string]log.Level{"info": log.Info, "debug": log.Debug, "warning": log.Warning, "error": log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger func main() { configFile, err := os.Open(configPath) @@ -69,7 +67,7 @@ func main() { func printConfigToLog() { if logger != nil { - if logger.LogDebug() { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -105,7 +103,7 @@ func readConfigFile(file io.Reader) { } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -135,7 +133,7 @@ func readConfigurationFileFromOECConfig(filepath string) (error) { } -func configureLogger() log.Logger { +func configureLogger() *OpsgenieFileLogger { level := configParameters["zabbix2opsgenie.logger"] var logFilePath = parameters["logPath"] @@ -143,7 +141,7 @@ func configureLogger() log.Logger { logFilePath = "/var/log/opsgenie/send2opsgenie.log" } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) @@ -155,10 +153,10 @@ func configureLogger() log.Logger { if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) } return tmpLogger @@ -187,7 +185,9 @@ func getHttpClient(timeout int) *http.Client { } proxy = http.ProxyURL(u) } - logger.Warning("final proxy", proxy) + if logger != nil { + logger.Warning("final proxy", proxy) + } client := &http.Client{ Transport: &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, @@ -214,7 +214,9 @@ func http_post() { var logPrefix = "[TriggerId: " + parameters["triggerId"] + ", HostName: " + parameters["hostName"] + "]" apiUrl := configParameters["opsgenie.api.url"] + "/v1/json/zabbix" - logger.Error("apiUrl: " + apiUrl) + if logger != nil { + logger.Error("apiUrl: " + apiUrl) + } target := "OpsGenie" if logger != nil { diff --git a/Zenoss/opsgenie-zenoss/send2opsgenie.go b/Zenoss/opsgenie-zenoss/send2opsgenie.go index 1530b1f..041f5a0 100644 --- a/Zenoss/opsgenie-zenoss/send2opsgenie.go +++ b/Zenoss/opsgenie-zenoss/send2opsgenie.go @@ -1,41 +1,39 @@ package main import ( + "bufio" "bytes" + "crypto/tls" "encoding/json" "flag" - "net/http" - "net" - "time" - "os" - "bufio" - "strings" - "io" - "strconv" - "github.com/alexcesaro/log/golog" - "github.com/alexcesaro/log" "fmt" + "io" "io/ioutil" - "crypto/tls" + "net" + "net/http" "net/url" + "os" + "strconv" + "strings" + "time" ) var API_KEY = "" var TOTAL_TIME = 60 var configParameters = map[string]string{"apiKey": API_KEY, - "zenoss2opsgenie.logger": "warning", - "opsgenie.api.url": "https://api.opsgenie.com", - "zenoss2opsgenie.http.proxy.enabled": "false", - "zenoss2opsgenie.http.proxy.port": "1111", - "zenoss2opsgenie.http.proxy.host": "localhost", + "zenoss2opsgenie.logger": "warning", + "opsgenie.api.url": "https://api.opsgenie.com", + "zenoss2opsgenie.http.proxy.enabled": "false", + "zenoss2opsgenie.http.proxy.port": "1111", + "zenoss2opsgenie.http.proxy.host": "localhost", "zenoss2opsgenie.http.proxy.protocol": "http", "zenoss2opsgenie.http.proxy.username": "", "zenoss2opsgenie.http.proxy.password": ""} var parameters = make(map[string]interface{}) var configPath = "/home/opsgenie/oec/conf/opsgenie-integration.conf" var configPath2 = "/home/opsgenie/oec/conf/config.json" -var levels = map[string]log.Level{"info": log.Info, "debug": log.Debug, "warning": log.Warning, "error": log.Error} -var logger log.Logger +var levels = map[string]int{"info": LogInfo, "debug": LogDebug, "warning": LogWarning, "error": LogError} +var logger *OpsgenieFileLogger var logPrefix string var eventState string @@ -53,9 +51,11 @@ func main() { } logPrefix = "[EventId: " + parameters["evid"].(string) + "]" if parameters["test"] == true { - logger.Warning("Sending test alert to OpsGenie.") + if logger != nil { + logger.Warning("Sending test alert to OpsGenie.") + } } else { - if (strings.ToLower(eventState) == "close") { + if strings.ToLower(eventState) == "close" { if logger != nil { logger.Info("eventState flag is set to close. Will not try to retrieve event details from zenoss") } @@ -68,7 +68,7 @@ func main() { func printConfigToLog() { if logger != nil { - if (logger.LogDebug()) { + if logger.LogLevel == LogDebug { logger.Debug("Config:") for k, v := range configParameters { if strings.Contains(k, "password") { @@ -101,7 +101,7 @@ func readConfigFile(file io.Reader) { panic(err) } } -func readConfigurationFileFromOECConfig(filepath string) (error) { +func readConfigurationFileFromOECConfig(filepath string) error { jsonFile, err := os.Open(filepath) @@ -135,7 +135,8 @@ type Configuration struct { ApiKey string `json:"apiKey"` BaseUrl string `json:"baseUrl"` } -func configureLogger() log.Logger { + +func configureLogger() *OpsgenieFileLogger { level := configParameters["zenoss2opsgenie.logger"] var logFilePath = parameters["logPath"].(string) @@ -143,7 +144,7 @@ func configureLogger() log.Logger { logFilePath = "/var/log/opsgenie/send2opsgenie.log" } - var tmpLogger log.Logger + var tmpLogger *OpsgenieFileLogger file, err := os.OpenFile(logFilePath, os.O_CREATE|os.O_WRONLY|os.O_APPEND, 0666) @@ -155,10 +156,10 @@ func configureLogger() log.Logger { if errTmp != nil { fmt.Println("Logging disabled. Reason: ", errTmp) } else { - tmpLogger = golog.New(fileTmp, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(fileTmp, levels[strings.ToLower(level)]) } } else { - tmpLogger = golog.New(file, levels[strings.ToLower(level)]) + tmpLogger = NewFileLogger(file, levels[strings.ToLower(level)]) } return tmpLogger @@ -341,7 +342,7 @@ func parseFlags() { args := flag.Args() for i := 0; i < len(args); i += 2 { - if (len(args)%2 != 0 && i == len(args)-1) { + if len(args)%2 != 0 && i == len(args)-1 { parameters[args[i]] = "" } else { parameters[args[i]] = args[i+1] @@ -378,13 +379,13 @@ func parseFlags() { if *responders != "" { parameters["responders"] = *responders } else { - parameters["responders"] = configParameters ["responders"] + parameters["responders"] = configParameters["responders"] } if *tags != "" { parameters["tags"] = *tags } else { - parameters["tags"] = configParameters ["tags"] + parameters["tags"] = configParameters["tags"] } if *logPath != "" { diff --git a/release/log/log.go b/release/log/log.go new file mode 100644 index 0000000..5dafeab --- /dev/null +++ b/release/log/log.go @@ -0,0 +1,55 @@ +package main + +import ( + "fmt" + "log" + "os" +) + +const ( + LogDebug = iota + LogInfo + LogWarning + LogError +) + +var levelPrefix = map[int]string{LogInfo: "INFO ", LogDebug: "DEBUG ", LogWarning: "WARNING ", LogError: "ERROR "} + +type OpsgenieFileLogger struct { + Logger *log.Logger + LogFile *os.File + LogLevel int +} + +func NewFileLogger(file *os.File, level int) *OpsgenieFileLogger { + return &OpsgenieFileLogger{ + Logger: log.New(file, "", log.Ldate|log.Ltime|log.Lmicroseconds|log.Lmsgprefix), + LogFile: file, + LogLevel: level, + } +} + +func (opsgenieFileLogger *OpsgenieFileLogger) log(level int, msg string) { + if opsgenieFileLogger.Logger != nil { + if level >= opsgenieFileLogger.LogLevel { + opsgenieFileLogger.Logger.SetPrefix(levelPrefix[level]) + opsgenieFileLogger.Logger.Print(msg) + } + } +} + +func (opsgenieFileLogger *OpsgenieFileLogger) Error(msg ...interface{}) { + opsgenieFileLogger.log(LogError, fmt.Sprintln(msg...)) +} + +func (opsgenieFileLogger *OpsgenieFileLogger) Info(msg ...interface{}) { + opsgenieFileLogger.log(LogInfo, fmt.Sprintln(msg...)) +} + +func (opsgenieFileLogger *OpsgenieFileLogger) Warning(msg ...interface{}) { + opsgenieFileLogger.log(LogWarning, fmt.Sprintln(msg...)) +} + +func (opsgenieFileLogger *OpsgenieFileLogger) Debug(msg ...interface{}) { + opsgenieFileLogger.log(LogDebug, fmt.Sprintln(msg...)) +} \ No newline at end of file