Skip to content

Commit

Permalink
Improve testing, add flag to override apache servername for server st…
Browse files Browse the repository at this point in the history
…atus
  • Loading branch information
treydock committed Jan 17, 2020
1 parent b31956e commit 39129b9
Show file tree
Hide file tree
Showing 5 changed files with 110 additions and 50 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ format:
go fmt $(pkgs)

test:
go test -short $(pkgs)
go test -v -short $(pkgs)

build: promu
@$(PROMU) build --verbose --prefix $(PREFIX)
Expand Down
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module github.com/OSC/ondemand_exporter
go 1.13

require (
github.com/Flaque/filet v0.0.0-20190209224823-fc4d33cfcf93
github.com/PuerkitoBio/goquery v1.5.0
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d // indirect
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d // indirect
Expand All @@ -13,6 +14,7 @@ require (
github.com/prometheus/common v0.8.0
github.com/prometheus/promu v0.5.0 // indirect
github.com/shirou/gopsutil v2.19.12+incompatible
github.com/spf13/afero v1.2.2 // indirect
github.com/stretchr/testify v1.4.0
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa // indirect
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d // indirect
Expand Down
5 changes: 5 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
github.com/Flaque/filet v0.0.0-20190209224823-fc4d33cfcf93 h1:NnAUCP75PRm8yWE7+MZBIAR6PA9iwsBYEc6ZNYOy+AQ=
github.com/Flaque/filet v0.0.0-20190209224823-fc4d33cfcf93/go.mod h1:TK+jB3mBs+8ZMWhU5BqZKnZWJ1MrLo8etNVg51ueTBo=
github.com/PuerkitoBio/goquery v1.5.0 h1:uGvmFXOA73IKluu/F84Xd1tt/z07GYm8X49XKHP7EJk=
github.com/PuerkitoBio/goquery v1.5.0/go.mod h1:qD2PgZ9lccMbQlc7eEOjaeRlFQON7xY8kdmcsrnKqMg=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
Expand Down Expand Up @@ -91,6 +93,8 @@ github.com/shirou/gopsutil v2.19.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMT
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.1.1 h1:2vfRuCMp5sSVIDSqO8oNnWJq7mPa6KVP3iPIwFBuy8A=
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
Expand Down Expand Up @@ -130,6 +134,7 @@ golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1 h1:gZpLHxUX5BdYLA08Lj4YCJNN/jk7KtquiArPoeX0WvA=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
Expand Down
121 changes: 73 additions & 48 deletions ondemand_exporter.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,12 @@ const (
)

var (
listenAddr = kingpin.Flag("listen", "Address on which to expose metrics.").Default(":9301").String()
execCommand = exec.Command
listenAddr = kingpin.Flag("listen", "Address on which to expose metrics.").Default(":9301").String()
apacheStatus = kingpin.Flag("apache-status", "URL to collect Apache status from").Default("").String()
execCommand = exec.Command
osHostname = os.Hostname
oodPortalPath = "/etc/ood/config/ood_portal.yml"
fqdn = "localhost"
)

type Exporter struct {
Expand All @@ -51,46 +55,82 @@ type Exporter struct {
}

type oodPortal struct {
servername string `yaml:"servername"`
port string `yaml:"port"`
Servername string `yaml:"servername"`
Port string `yaml:"port"`
}

type connection map[string]interface{}

func (e *Exporter) setServerName() error {
data, err := ioutil.ReadFile("/etc/ood/config/ood_portal.yml")
func getFQDN() string {
hostname, err := osHostname()
if err != nil {
return err
log.Infof("Unable to determine FQDN: %v", err)
return fqdn
}
return hostname
}

func getApacheStatusURL() string {
defaultApacheStatusURL := "http://" + fqdn + "/server-status"
var config oodPortal
var servername, port, apacheStatus string
_, statErr := os.Stat(oodPortalPath)
if os.IsNotExist(statErr) {
log.Infof("File %s not found, using default Apache status URL", oodPortalPath)
return defaultApacheStatusURL
}
data, err := ioutil.ReadFile(oodPortalPath)
if err != nil {
log.Errorf("Error reading %s: %v", oodPortalPath, err)
return defaultApacheStatusURL
}
log.Infof("DATA: %v", string(data))
if err := yaml.Unmarshal(data, &config); err != nil {
return err
log.Errorf("Error parsing %s: %v", oodPortalPath, err)
return defaultApacheStatusURL
}
fqdn, fqdnerr := os.Hostname()
e.fqdn = fqdn
var servername string
var port string
if config.servername != "" {
servername = config.servername
log.Infof("Parsed %s servername=%s port=%s config=%v", oodPortalPath, config.Servername, config.Port, config)
if config.Servername != "" {
servername = config.Servername
} else {
if fqdnerr != nil {
servername = "localhost"
e.fqdn = "localhost"
} else {
servername = fqdn
}
servername = fqdn
}
if config.port != "" {
port = config.port
if config.Port != "" {
port = config.Port
} else {
port = "80"
}
if port != "80" {
e.apacheStatus = "https://" + servername + "/server-status"
apacheStatus = "https://" + servername + "/server-status"
} else {
e.apacheStatus = "http://" + servername + "/server-status"
apacheStatus = "http://" + servername + "/server-status"
}
return nil
return apacheStatus
}

func sliceContains(slice []string, str string) bool {
for _, s := range slice {
if str == s {
return true
}
}
return false
}

func getActivePuns() ([]string, error) {
var puns []string
out, err := execCommand("sudo", "/opt/ood/nginx_stage/sbin/nginx_stage", "nginx_list").Output()
if err != nil {
return nil, err
}
lines := strings.Split(string(out), "\n")
for _, l := range lines {
if l == "" {
continue
}
puns = append(puns, l)
}
return puns, nil
}

func NewExporter() *Exporter {
Expand Down Expand Up @@ -163,28 +203,6 @@ func NewExporter() *Exporter {
}
}

func sliceContains(slice []string, str string) bool {
for _, s := range slice {
if str == s {
return true
}
}
return false
}

func getActivePuns() ([]string, error) {
var puns []string
out, err := execCommand("sudo", "/opt/ood/nginx_stage/sbin/nginx_stage", "nginx_list").Output()
if err != nil {
return nil, err
}
lines := strings.Split(string(out), "\n")
for _, l := range lines {
puns = append(puns, l)
}
return puns, nil
}

func (e *Exporter) getProcessMetrics() error {
rackApps := 0
nodeApps := 0
Expand Down Expand Up @@ -390,8 +408,15 @@ func main() {
log.Infoln("Build context", version.BuildContext())
log.Infof("Starting Server: %s", *listenAddr)

fqdn = getFQDN()

exporter := NewExporter()
exporter.setServerName()
if *apacheStatus == "" {
exporter.apacheStatus = getApacheStatusURL()
} else {
exporter.apacheStatus = *apacheStatus
}

prometheus.MustRegister(exporter)
prometheus.MustRegister(version.NewCollector("ondemand_exporter"))

Expand Down
30 changes: 29 additions & 1 deletion ondemand_exporter_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package main

import (
"fmt"
"github.com/Flaque/filet"
"os"
"os/exec"
"reflect"
Expand Down Expand Up @@ -37,7 +38,8 @@ func TestExecCommandHelper(t *testing.T) {

func TestGetActivePuns(t *testing.T) {
execCommand = fakeExecCommand
mockedStdout = `foo
mockedStdout = `
foo
bar`
expPuns := []string{"foo", "bar"}
defer func() { execCommand = exec.Command }()
Expand All @@ -46,3 +48,29 @@ bar`
t.Errorf("Expected %v, got %v", expPuns, puns)
}
}

func TestGetApacheStatusURL_Default(t *testing.T) {
defer func() { osHostname = os.Hostname }()
fqdn = "foo.example.com"
osHostname = func() (string, error) { return "foo.example.com", nil }
ret := getApacheStatusURL()
expected := "http://foo.example.com/server-status"
if ret != expected {
t.Errorf("Expected %s, got %s", expected, ret)
}
}

func TestGetApacheStatusURL_read_ood_portal(t *testing.T) {
defer filet.CleanUp(t)
oodPortalYAML := `
servername: ood.example.com
port: 443`
filet.File(t, "/tmp/ood_portal.yml", oodPortalYAML)
oodPortalPath = "/tmp/ood_portal.yml"
fqdn = "foo.example.com"
ret := getApacheStatusURL()
expected := "https://ood.example.com/server-status"
if ret != expected {
t.Errorf("Expected %s, got %s", expected, ret)
}
}

0 comments on commit 39129b9

Please sign in to comment.