Browse Source

el

pull/511/head
Gitea 3 years ago
parent
commit
616aba813c
1 changed files with 180 additions and 0 deletions
  1. +180
    -0
      models/elk_pagedata.go

+ 180
- 0
models/elk_pagedata.go View File

@@ -0,0 +1,180 @@
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
}

Loading…
Cancel
Save