From 7b43576e0ef81dfdff2a485a22556b78a79d19c9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B7=B4=E6=8B=89=E8=BF=AA=E7=BB=B4?= Date: Sun, 24 Apr 2022 16:33:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B0=83=E6=95=B4=20Grafana=20Folder=20?= =?UTF-8?q?=E5=90=8D=E7=A7=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- network/base_n.go | 11 ++-- network/grafana_n.go | 53 ++++++++++--------- network/grafana_n_test.go | 14 ++--- ...shboard.tmpl => gitee-home-dashboard.tmpl} | 6 +-- ...shboard.tmpl => gitee-repo-dashboard.tmpl} | 4 +- repostats.go | 9 ++-- utils/utils.go | 5 ++ 7 files changed, 52 insertions(+), 50 deletions(-) rename network/templates/{home-dashboard.tmpl => gitee-home-dashboard.tmpl} (99%) rename network/templates/{repo-dashboard.tmpl => gitee-repo-dashboard.tmpl} (99%) diff --git a/network/base_n.go b/network/base_n.go index 024f68a..0caefae 100644 --- a/network/base_n.go +++ b/network/base_n.go @@ -9,17 +9,14 @@ package network import ( + "fmt" "log" + "repostats/utils" "time" "github.com/go-resty/resty/v2" ) -const ( - CONTENT_TYPE = "application/json" - USER_AGENT = "RepoStats https://gitee.com/barat | https://github.com/barats" -) - type OauthToken struct { AccessToken string `json:"access_token"` TokenType string `json:"token_type"` @@ -49,8 +46,8 @@ func NewNetworkClient(token string) *resty.Client { SetAuthToken(token) client.SetHeaders(map[string]string{ - "Content-Type": CONTENT_TYPE, - "User-Agent": USER_AGENT, + "Content-Type": "application/json", + "User-Agent": fmt.Sprintf("RepoStats/%s build %s", utils.Version, utils.Build), }) client.OnError(func(r *resty.Request, err error) { diff --git a/network/grafana_n.go b/network/grafana_n.go index 46f6ba4..69be8ec 100644 --- a/network/grafana_n.go +++ b/network/grafana_n.go @@ -14,6 +14,7 @@ import ( "encoding/json" "fmt" "html/template" + "log" "net/http" gitee_model "repostats/model/gitee" "repostats/utils" @@ -22,12 +23,12 @@ import ( ) const ( - GRAFANA_API_TOKEN = "grafana_api_token.json" - GRAFANA_DATASOURCE = "grafana_datasource.json" - GRAFANA_FOLDER = "grafana_folder.json" - REPOSTATS_FOLDER_NAME = "RepoStats" - REPOSTATS_HOMEDASHBOARD_NAME = "Overview" - REPOSTATS_HOMEDASHBOARD_FILE = "grafana_home_dashboard.json" + GRAFANA_API_TOKEN = "grafana_api_token.json" + GRAFANA_DATASOURCE = "grafana_datasource.json" + GRAFANA_FOLDER = "grafana_folder.json" + REPOSTATS_GITEE_FOLDER_NAME = "Gitee" + // REPOSTATS_HOMEDASHBOARD_NAME = "Overview" + // REPOSTATS_HOMEDASHBOARD_FILE = "grafana_home_dashboard.json" ) //go:embed templates/*.tmpl @@ -157,11 +158,11 @@ func CreateDatasource(token GrafanaToken, dbConfig utils.DatabaseConfigInfo) err "database": "%s", "basicAuth": true, "basicAuthUser": "%s", - "readOnly": true, + "readOnly": true, "withCredentials": false, - "isDefault": true, + "isDefault": true, "secureJsonData": { - "password": "%s", + "password": "%s", "basicAuthPassword": "%s" }, "jsonData": { @@ -200,7 +201,7 @@ func RetrieveGrafanaDatasource() (GrafanaDatasource, error) { return datasource, json.Unmarshal(data, &datasource) } -func CreateRepoDashboard(token GrafanaToken, folder GrafanaFolder, datasource GrafanaDatasource, repo gitee_model.Repository) error { +func CreateGiteeRepoDashboard(token GrafanaToken, folder GrafanaFolder, datasource GrafanaDatasource, repo gitee_model.Repository) error { data := map[string]string{ "datasource": datasource.UID, "folder": folder.UID, @@ -212,7 +213,7 @@ func CreateRepoDashboard(token GrafanaToken, folder GrafanaFolder, datasource Gr } var tp bytes.Buffer - tmpl, err := template.ParseFS(grafanaFS, "templates/repo-dashboard.tmpl") + tmpl, err := template.ParseFS(grafanaFS, "templates/gitee-repo-dashboard.tmpl") if err != nil { return err } @@ -227,16 +228,16 @@ func CreateRepoDashboard(token GrafanaToken, folder GrafanaFolder, datasource Gr } if code != http.StatusOK { - return fmt.Errorf("grafana home dashboard creation failed. status code: %d , response : %s", code, rs) + return fmt.Errorf("grafana gitee remo dashboard creation failed. status code: %d , response : %s", code, rs) } - var rawMap map[string]json.RawMessage - json.Unmarshal([]byte(rs), &rawMap) - - return utils.WriteRepoStatsFile(fmt.Sprintf("gitee-repo-%d.json", repo.ID), []byte(rawMap["dashboard"])) + // var rawMap map[string]json.RawMessage + // json.Unmarshal([]byte(rs), &rawMap) + // return utils.WriteRepoStatsFile(fmt.Sprintf("gitee-repo-%d.json", repo.ID), []byte(rawMap["dashboard"])) + return nil } -func CreateHomeDashboard(token GrafanaToken, folder GrafanaFolder, datasource GrafanaDatasource) error { +func CreateGiteeHomeDashboard(token GrafanaToken, folder GrafanaFolder, datasource GrafanaDatasource) error { data := map[string]string{ "datasource": datasource.UID, "folder": folder.UID, @@ -244,7 +245,7 @@ func CreateHomeDashboard(token GrafanaToken, folder GrafanaFolder, datasource Gr } var tp bytes.Buffer - tmpl, err := template.ParseFS(grafanaFS, "templates/home-dashboard.tmpl") + tmpl, err := template.ParseFS(grafanaFS, "templates/gitee-home-dashboard.tmpl") if err != nil { return err } @@ -253,6 +254,8 @@ func CreateHomeDashboard(token GrafanaToken, folder GrafanaFolder, datasource Gr return err } + log.Println(tp.String()) + code, rs, err := HttpPost(token.Key, fmt.Sprintf("http://%s:%s/api/dashboards/db", token.Host, token.Port), nil, tp.String()) if err != nil { return err @@ -262,17 +265,17 @@ func CreateHomeDashboard(token GrafanaToken, folder GrafanaFolder, datasource Gr return fmt.Errorf("grafana home dashboard creation failed. status code: %d , response : %s", code, rs) } - var rawMap map[string]json.RawMessage - json.Unmarshal([]byte(rs), &rawMap) - - return utils.WriteRepoStatsFile(REPOSTATS_HOMEDASHBOARD_FILE, []byte(rawMap["dashboard"])) + // var rawMap map[string]json.RawMessage + // json.Unmarshal([]byte(rs), &rawMap) + // return utils.WriteRepoStatsFile(REPOSTATS_HOMEDASHBOARD_FILE, []byte(rawMap["dashboard"])) + return nil } //创建 RepoStats 使用的 Folder // -func CreateRepostatsFolder(token GrafanaToken) error { +func CreateGiteeRepostatsFolder(token GrafanaToken) error { url := fmt.Sprintf("http://%s:%s/api/folders", token.Host, token.Port) - data := fmt.Sprintf(`{"title":"%s"}`, REPOSTATS_FOLDER_NAME) + data := fmt.Sprintf(`{"title":"%s"}`, REPOSTATS_GITEE_FOLDER_NAME) code, rs, err := HttpPost(token.Key, url, nil, data) if err != nil { return err @@ -286,7 +289,7 @@ func CreateRepostatsFolder(token GrafanaToken) error { } // 获取本地存储的 Folder 信息 -func RetrieveRepostatsFolder() (GrafanaFolder, error) { +func RetrieveGiteeRepostatsFolder() (GrafanaFolder, error) { var folder GrafanaFolder data, _ := utils.ReadRepoStatsFile(GRAFANA_FOLDER) return folder, json.Unmarshal(data, &folder) diff --git a/network/grafana_n_test.go b/network/grafana_n_test.go index 94df99b..ba1d7f4 100644 --- a/network/grafana_n_test.go +++ b/network/grafana_n_test.go @@ -62,7 +62,7 @@ func TestCreateRepostatsFolder(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if err := CreateRepostatsFolder(tt.args.token); (err != nil) != tt.wantErr { + if err := CreateGiteeRepostatsFolder(tt.args.token); (err != nil) != tt.wantErr { t.Errorf("CreateRepostatsFolder() error = %v, wantErr %v", err, tt.wantErr) } }) @@ -80,7 +80,7 @@ func TestCreateHomeDashboard(t *testing.T) { datasource, err := RetrieveGrafanaDatasource() utils.ExitOnError(err) - folder, err := RetrieveRepostatsFolder() + folder, err := RetrieveGiteeRepostatsFolder() utils.ExitOnError(err) type args struct { @@ -97,7 +97,7 @@ func TestCreateHomeDashboard(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if err := CreateHomeDashboard(tt.args.token, tt.args.folder, tt.args.datasource); (err != nil) != tt.wantErr { + if err := CreateGiteeHomeDashboard(tt.args.token, tt.args.folder, tt.args.datasource); (err != nil) != tt.wantErr { t.Errorf("CreateHomeDashboard() error = %v, wantErr %v", err, tt.wantErr) } }) @@ -115,11 +115,11 @@ func TestCreateRepoDashboard(t *testing.T) { datasource, err := RetrieveGrafanaDatasource() utils.ExitOnError(err) - folder, err := RetrieveRepostatsFolder() + folder, err := RetrieveGiteeRepostatsFolder() utils.ExitOnError(err) - // repos, err := GetGiteeUserRepos("barat") - repos, err := GetGiteeOrgRepos("openharmony") + repos, err := GetGiteeUserRepos("barat") + // repos, err := GetGiteeOrgRepos("openharmony") utils.ExitOnError(err) type args struct { @@ -142,7 +142,7 @@ func TestCreateRepoDashboard(t *testing.T) { for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - if err := CreateRepoDashboard(tt.args.token, tt.args.folder, tt.args.datasource, tt.args.repo); (err != nil) != tt.wantErr { + if err := CreateGiteeRepoDashboard(tt.args.token, tt.args.folder, tt.args.datasource, tt.args.repo); (err != nil) != tt.wantErr { t.Errorf("CreateRepoDashboard() error = %v, wantErr %v", err, tt.wantErr) } }) diff --git a/network/templates/home-dashboard.tmpl b/network/templates/gitee-home-dashboard.tmpl similarity index 99% rename from network/templates/home-dashboard.tmpl rename to network/templates/gitee-home-dashboard.tmpl index 6bfe1e7..478e624 100644 --- a/network/templates/home-dashboard.tmpl +++ b/network/templates/gitee-home-dashboard.tmpl @@ -1,9 +1,9 @@ -{{define "home-dashboard.tmpl"}} +{{define "gitee-home-dashboard.tmpl"}} { "message": "Home Dashboard Update at {{.time}}", "dashboard": { - "title": "RepoStats Overview", - "tags": [ "RepoStats" ], + "title": "Gitee Overview", + "tags": ["RepoStats","Gitee"], "timezone": "browser", "refresh": "2h", "time": { diff --git a/network/templates/repo-dashboard.tmpl b/network/templates/gitee-repo-dashboard.tmpl similarity index 99% rename from network/templates/repo-dashboard.tmpl rename to network/templates/gitee-repo-dashboard.tmpl index a51143b..ad4866d 100644 --- a/network/templates/repo-dashboard.tmpl +++ b/network/templates/gitee-repo-dashboard.tmpl @@ -1,9 +1,9 @@ -{{define "repo-dashboard.tmpl"}} +{{define "gitee-repo-dashboard.tmpl"}} { "message": "Repo Dashboard Update at {{.time}}", "dashboard": { "title": "{{.repo_human_name}}", - "tags": [ "RepoStats","Gitee","{{.repo_path}}","{{.repo_owner}}"], + "tags": ["RepoStats","Gitee","{{.repo_path}}","{{.repo_owner}}"], "timezone": "browser", "refresh": "2h", "time": { diff --git a/repostats.go b/repostats.go index 9e65be6..e37ea2e 100644 --- a/repostats.go +++ b/repostats.go @@ -26,9 +26,6 @@ import ( ) var ( - Version = "1.0" - Build = "2204111911" - //go:embed assets/* templates/* FS embed.FS @@ -39,8 +36,8 @@ func main() { flag.StringVar(&cmdConfig, "c", "repostats.ini", "config file path") flag.Usage = func() { - fmt.Fprintf(os.Stdout, `RepoStats version:%s build %s - Usage: repostats [-c config_file_path]`, Version, Build) + fmt.Fprintf(os.Stdout, `RepoStats v:%s build %s + Usage: repostats [-c config_file_path]`, utils.Version, utils.Build) flag.PrintDefaults() } @@ -57,7 +54,7 @@ func main() { initRouter(router) - log.Println(fmt.Sprintf("[RepoStats v%s build:%s] starts at http://localhost:%d", Version, Build, utils.RepoStatsConfig.AdminPort)) + log.Println(fmt.Sprintf("[RepoStats v%s build:%s] starts at http://localhost:%d", utils.Version, utils.Build, utils.RepoStatsConfig.AdminPort)) router.Run(fmt.Sprintf("localhost:%d", utils.RepoStatsConfig.AdminPort)) } diff --git a/utils/utils.go b/utils/utils.go index 68a67ff..66ef3a8 100644 --- a/utils/utils.go +++ b/utils/utils.go @@ -18,6 +18,11 @@ import ( "strings" ) +var ( + Version = "1.0" + Build = "2204111911" +) + func ExitOnError(err error) { if err != nil { log.Fatalln(err)