2019-03-13 21:47:47 +00:00
|
|
|
// Copyright 2019 Drone IO, Inc.
|
|
|
|
//
|
|
|
|
// Licensed 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.
|
2019-02-19 23:56:41 +00:00
|
|
|
|
|
|
|
package web
|
|
|
|
|
|
|
|
import (
|
|
|
|
"net/http"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/drone/drone/core"
|
|
|
|
"github.com/drone/go-scm/scm"
|
|
|
|
)
|
|
|
|
|
|
|
|
type varz struct {
|
|
|
|
SCM *scmInfo `json:"scm"`
|
|
|
|
License *licenseInfo `json:"license"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type scmInfo struct {
|
|
|
|
URL string `json:"url"`
|
|
|
|
Rate *rateInfo `json:"rate"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type rateInfo struct {
|
|
|
|
Limit int `json:"limit"`
|
|
|
|
Remaining int `json:"remaining"`
|
|
|
|
Reset int64 `json:"reset"`
|
|
|
|
}
|
|
|
|
|
|
|
|
type licenseInfo struct {
|
|
|
|
Kind string `json:"kind"`
|
|
|
|
Seats int64 `json:"seats"`
|
|
|
|
SeatsUsed int64 `json:"seats_used,omitempty"`
|
|
|
|
SeatsAvail int64 `json:"seats_available,omitempty"`
|
|
|
|
Repos int64 `json:"repos"`
|
|
|
|
ReposUsed int64 `json:"repos_used,omitempty"`
|
|
|
|
ReposAvail int64 `json:"repos_available,omitempty"`
|
|
|
|
Expires time.Time `json:"expire_at,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// HandleVarz creates an http.HandlerFunc that exposes internal system
|
|
|
|
// information.
|
|
|
|
func HandleVarz(client *scm.Client, license *core.License) http.HandlerFunc {
|
|
|
|
return func(w http.ResponseWriter, r *http.Request) {
|
|
|
|
rate := client.Rate()
|
|
|
|
v := &varz{
|
|
|
|
License: &licenseInfo{
|
|
|
|
Kind: license.Kind,
|
|
|
|
Seats: license.Users,
|
|
|
|
Repos: license.Repos,
|
|
|
|
Expires: license.Expires,
|
|
|
|
},
|
|
|
|
SCM: &scmInfo{
|
|
|
|
URL: client.BaseURL.String(),
|
|
|
|
Rate: &rateInfo{
|
|
|
|
Limit: rate.Limit,
|
|
|
|
Remaining: rate.Remaining,
|
|
|
|
Reset: rate.Reset,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
}
|
|
|
|
writeJSON(w, v, 200)
|
|
|
|
}
|
|
|
|
}
|