blob: 8a4e674fd99327ae972a589910fbbda74e3c15ac [file] [log] [blame]
package about
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import (
"encoding/json"
"net/http"
"runtime"
"strings"
)
// about allows access to the version info identified at build time
type about struct {
CommitHash string `json:"commitHash,omitempty"`
Commits string `json:"commits,omitempty"`
GoVersion string `json:"goVersion,omitempty"`
Release string `json:"release"`
Name string `json:"name,omitempty"`
RPMVersion string `json:"RPMVersion,omitempty"`
Version string `json:"Version,omitempty"`
}
// About contains version info to be exposed by `api/.../about.json` endpoint
var About about
func splitRPMVersion(v string) (string, string, string, string, string) {
if v == "" {
return "UnknownVersion", "", "", "", ""
}
// RPM version is something like traffic_ops-2.3.0-8765.a0b1c3d4.el7
// -- if not of that form, Name, Version, Commits, CommitHash, Release may be missing
s := strings.SplitN(v, "-", 3)
if len(s) >= 3 {
// 3rd field is commits.hash
t := strings.SplitN(s[2], ".", 3)
s = append(s[0:2], t...)
}
for len(s) < 5 {
s = append(s, "")
}
return s[0], s[1], s[2], s[3], s[4]
}
// SetAbout is called by main.main to store the static info for the .../about endpoint
func SetAbout(s string) {
// name, version, commits, hash, Release -- parts of rpm version string
n, v, c, h, r := splitRPMVersion(s)
About = about{
CommitHash: h,
Commits: c,
GoVersion: runtime.Version(),
Release: r,
Name: n,
RPMVersion: s,
Version: v,
}
}
// Handler returns info about running Traffic Ops
func Handler() http.HandlerFunc {
return func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(About)
}
}