|
- package models
-
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "io/ioutil"
- "net/http"
- )
-
- //输出的json结构begin
- type Hits struct {
- Total int `json:"total"`
- }
- type RawResponse struct {
- Hits Hits `json:"hits"`
- }
- type Result struct {
- RawResponse RawResponse `json:"rawResponse"`
- Loaded int `json:"loaded"`
- }
- type ResultInfo struct {
- Id int `json:"id"`
- Result Result `json:"result"`
- }
-
- //输出的json结构end
-
- // //输入的json结构end
- type InputInfo struct {
- Batch []Batch `json:"batch"`
- }
- type Fields struct {
- Field string `json:"field"`
- Format string `json:"format"`
- }
- type MatchPhrase struct {
- Message string `json:"message"`
- }
- type Should struct {
- MatchPhrase MatchPhrase `json:"match_phrase"`
- }
- type Bool struct {
- Should []Should `json:"should"`
- MinimumShouldMatch int `json:"minimum_should_match"`
- }
- type Timestamptest struct {
- // Gte time.Time `json:"gte"`
- Gte string `json:"gte"`
- Lte string `json:"lte"`
- Format string `json:"format"`
- }
- type Range struct {
- Timestamptest Timestamptest `json:"@timestamptest"`
- }
-
- type FilterMatchPhrase struct {
- UserName string `json:"userName.keyword,omitempty"`
- ProjectName string `json:"projectName.keyword,omitempty"`
- }
-
- type Filter struct {
- Bool *Bool `json:"bool,omitempty"`
- Range *Range `json:"range,omitempty"`
- FilterMatchPhrase *FilterMatchPhrase `json:"match_phrase,omitempty"`
- }
- type MatchPhraseIn struct {
- ProjectName string `json:"projectName"`
- }
- type MustNot struct {
- MatchPhraseIn MatchPhraseIn `json:"match_phrase"`
- }
- type BoolIn struct {
- Filter []Filter `json:"filter"`
- MustNot []MustNot `json:"must_not"`
- }
- type Query struct {
- BoolIn BoolIn `json:"bool"`
- }
- type Body struct {
- Size int `json:"size"`
- Fields []Fields `json:"fields"`
- Query Query `json:"query"`
- }
- type Params struct {
- Index string `json:"index"`
- Body Body `json:"body"`
- }
- type Request struct {
- Params Params `json:"params"`
- }
- type Batch struct {
- Request Request `json:"request"`
- }
-
- func SendData(jsonStr []byte) (content string) {
- url := "http://192.168.207.35:5601/internal/bsearch"
- req, _ := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
- req.Header.Set("Content-Type", "application/json")
- req.Header.Set("kbn-version", "7.13.2")
- req.Header.Set("Authorization", "Basic cWl6aGk6UGNsMjAyMA==")
- client := &http.Client{}
- resp, err := client.Do(req)
- if err != nil {
- panic(err)
- }
- defer resp.Body.Close()
- body, _ := ioutil.ReadAll(resp.Body)
- return string(body)
- }
-
- func getdata(resultinfo ResultInfo, jobResult string) (value1 int, value2 int) {
- var resultTest ResultInfo
- errs := json.Unmarshal([]byte(jobResult), &resultTest)
- fmt.Println(errs)
- return resultTest.Result.Loaded, resultTest.Result.RawResponse.Hits.Total
- }
-
- func inputStructInit(User string, Project string, Gte string, Lte string) (inputStructInit InputInfo) {
- var inputStruct InputInfo
- inputStruct.Batch = make([]Batch, 1)
- inputStruct.Batch[0].Request.Params.Index = "filebeat-7.3.2*"
- inputStruct.Batch[0].Request.Params.Body.Size = 0
- inputStruct.Batch[0].Request.Params.Body.Fields = make([]Fields, 1)
- inputStruct.Batch[0].Request.Params.Body.Fields[0].Field = "@timestamptest"
- inputStruct.Batch[0].Request.Params.Body.Fields[0].Format = "date_time"
- inputStruct.Batch[0].Request.Params.Body.Query.BoolIn.Filter = make([]Filter, 3)
-
- var timeRange Range
- timeRange.Timestamptest.Gte = Gte
- timeRange.Timestamptest.Lte = Lte
- timeRange.Timestamptest.Format = "strict_date_optional_time"
- inputStruct.Batch[0].Request.Params.Body.Query.BoolIn.Filter[0].Range = &timeRange
-
- var userName FilterMatchPhrase
- userName.UserName = User
- inputStruct.Batch[0].Request.Params.Body.Query.BoolIn.Filter[1].FilterMatchPhrase = &userName
-
- var projectName FilterMatchPhrase
- projectName.ProjectName = Project
- inputStruct.Batch[0].Request.Params.Body.Query.BoolIn.Filter[2].FilterMatchPhrase = &projectName
-
- return inputStruct
- }
-
- // @title ProjectViewData
- // @description 获取指定用户和项目的访问量
- // @param User string "用户名"
- // @param Project string "项目名"
- // @param Gte string "起始时间" 如 time.Now().AddDate(0, 0, -1).Format(time.RFC3339)
- // @param Lte string "结束时间" 如 time.Now().Format(time.RFC3339)
- // @return value int "访问量"
- func ProjectViewData(User string, Project string, Gte string, Lte string) (value int) {
- InitInfo := inputStructInit(User, Project, Gte, Lte)
- jsons, errs := json.Marshal(InitInfo)
- if errs != nil {
- fmt.Println("errs:", errs.Error())
- }
- var jsonStr = []byte(jsons)
- var resultTest ResultInfo
- loaded, total := getdata(resultTest, SendData(jsonStr))
- time := 0
- for {
- if loaded == 0 {
- value1, total := getdata(resultTest, SendData(jsonStr))
- time++
- if value1 != 0 && time < 100 {
- fmt.Println("total:", total)
- return total
- }
- if time > 100 {
- break
- }
- } else {
- break
- }
- }
- fmt.Println("loaded:", loaded)
- return total
- }
|