Skip to content

Commit

Permalink
[sync] merge master to dev: 1,[fix] cancel the depency between health…
Browse files Browse the repository at this point in the history
…check and etcd 2,[feat]support report the index of servicecomb_kie_config_count to prometheus (#321)

* [feat]support report the index of servicecomb_kie_config_count to prometheus (#316)

Co-authored-by: songshiyuan 00649746 <[email protected]>
(cherry picked from commit 0167fb0)

* [fix] cancel the depency between healthcheck and etcd (#319)

Co-authored-by: songshiyuan 00649746 <[email protected]>
(cherry picked from commit fcacc0d)
  • Loading branch information
tornado-ssy authored Mar 29, 2024
1 parent 77a402f commit 0a30c3f
Show file tree
Hide file tree
Showing 7 changed files with 88 additions and 5 deletions.
3 changes: 3 additions & 0 deletions examples/dev/conf/chassis.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ servicecomb:
protocols:
rest:
listenAddress: 127.0.0.1:30110
metrics:
enable: true
interval: 10s
match:
rateLimitPolicy: |
matches:
Expand Down
1 change: 1 addition & 0 deletions pkg/common/common.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ const (
QueryParamURLPath = "urlPath"
QueryParamUserAgent = "userAgent"
QueryParamOverride = "override"
QueryParamMode = "mode"
)

// http headers
Expand Down
2 changes: 1 addition & 1 deletion server/config/struct.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ type Config struct {
DB DB `yaml:"db"`
RBAC RBAC `yaml:"rbac"`
Sync Sync `yaml:"sync"`
//config from cli
// config from cli
ConfigFile string
NodeName string
ListenPeerAddr string
Expand Down
54 changes: 54 additions & 0 deletions server/metrics/prometheus.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package metrics

import (
"context"
"time"

"github.com/go-chassis/go-archaius"
"github.com/go-chassis/go-chassis/v2/pkg/metrics"
"github.com/go-chassis/openlog"

"github.com/apache/servicecomb-kie/server/datasource"
)

const domain = "default"
const project = "default"

func InitMetric() error {
err := metrics.CreateGauge(metrics.GaugeOpts{
Key: "servicecomb_kie_config_count",
Help: "use to show the number of config under a specifical domain and project pair",
Labels: []string{"domain", "project"},
})
if err != nil {
openlog.Error("init servicecomb_kie_config_count Gauge fail:" + err.Error())
return err
}
reportIntervalstr := archaius.GetString("servicecomb.metrics.interval", "5s")
reportInterval, _ := time.ParseDuration(reportIntervalstr)
reportTicker := time.NewTicker(reportInterval)
go func() {
for {
_, ok := <-reportTicker.C
if !ok {
return
}
getTotalConfigCount(project, domain)
}
}()
return nil
}

func getTotalConfigCount(project, domain string) {
total, err := datasource.GetBroker().GetKVDao().Total(context.TODO(), project, domain)
if err != nil {
openlog.Error("set total config number fail: " + err.Error())
return
}
labels := map[string]string{"domain": domain, "project": project}
err = metrics.GaugeSet("servicecomb_kie_config_count", float64(total), labels)
if err != nil {
openlog.Error("set total config number fail:" + err.Error())
return
}
}
10 changes: 8 additions & 2 deletions server/resource/v1/admin_resource.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,15 @@ import (
"strconv"
"time"

"github.com/apache/servicecomb-kie/pkg/model"
"github.com/apache/servicecomb-kie/server/datasource"
goRestful "github.com/emicklei/go-restful"
"github.com/go-chassis/cari/config"
"github.com/go-chassis/go-chassis/v2/pkg/runtime"
"github.com/go-chassis/go-chassis/v2/server/restful"
"github.com/go-chassis/openlog"

"github.com/apache/servicecomb-kie/pkg/common"
"github.com/apache/servicecomb-kie/pkg/model"
"github.com/apache/servicecomb-kie/server/datasource"
)

type AdminResource struct {
Expand Down Expand Up @@ -57,6 +59,10 @@ func (r *AdminResource) URLPatterns() []restful.Route {

// HealthCheck provider version info and time info
func (r *AdminResource) HealthCheck(context *restful.Context) {
healthCheckMode := context.ReadQueryParameter(common.QueryParamMode)
if healthCheckMode == "liveness" {
return
}
domain := ReadDomain(context.Ctx)
resp := &model.DocHealthCheck{}
latest, err := datasource.GetBroker().GetRevisionDao().GetRevision(context.Ctx, domain)
Expand Down
19 changes: 17 additions & 2 deletions server/resource/v1/admin_resource_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,19 @@ package v1_test

import (
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/http/httptest"
"testing"

_ "github.com/apache/servicecomb-kie/test"

"github.com/apache/servicecomb-kie/pkg/model"
v1 "github.com/apache/servicecomb-kie/server/resource/v1"
"github.com/go-chassis/go-chassis/v2/server/restful/restfultest"
"github.com/stretchr/testify/assert"

"github.com/apache/servicecomb-kie/pkg/model"
v1 "github.com/apache/servicecomb-kie/server/resource/v1"
)

func Test_HeathCheck(t *testing.T) {
Expand All @@ -47,3 +49,16 @@ func Test_HeathCheck(t *testing.T) {
assert.NoError(t, err)
assert.NotEmpty(t, data)
}

func Test_HeakthCheckLiveMode(t *testing.T) {
path := fmt.Sprintf("/v1/health?mode=liveness")
r, _ := http.NewRequest("GET", path, nil)

revision := &v1.AdminResource{}
c, err := restfultest.New(revision, nil)
assert.NoError(t, err)
resp := httptest.NewRecorder()
c.ServeHTTP(resp, r)
respcode := resp.Code
assert.NotEmpty(t, respcode)
}
4 changes: 4 additions & 0 deletions server/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ import (
"github.com/apache/servicecomb-kie/server/config"
"github.com/apache/servicecomb-kie/server/datasource"
"github.com/apache/servicecomb-kie/server/db"
"github.com/apache/servicecomb-kie/server/metrics"
"github.com/apache/servicecomb-kie/server/pubsub"
"github.com/apache/servicecomb-kie/server/rbac"
v1 "github.com/apache/servicecomb-kie/server/resource/v1"
Expand All @@ -46,6 +47,9 @@ func Run() {
if err := datasource.Init(config.GetDB().Kind); err != nil {
openlog.Fatal(err.Error())
}
if err := metrics.InitMetric(); err != nil {
openlog.Fatal(err.Error())
}
if err := validator.Init(); err != nil {
openlog.Fatal("validate init failed: " + err.Error())
}
Expand Down

0 comments on commit 0a30c3f

Please sign in to comment.