Toolbox/goDataverseStrict/metrics/metrics.go

657 lines
31 KiB
Go

package metrics
import (
"Toolbox/goDataverseStrict/connect"
"encoding/json"
"log"
"sort"
"strconv"
"strings"
"time"
"golang.org/x/exp/slices"
)
type (
MetricsType string // To ensure, that the set of constants is limited (a kind of enumeration)
MetricsDataCountType string
ReturnformatType string
SearchType string
)
const PDPURL = "https://pdp.archium.org"
// const IDRequestCriteriaPrefix = "input_"
const (
IDRequestCriteriaPrefix = "get_input_"
IDRequestTextPrefix = "text_input_"
IDRequestHideDisplayPrefix = "span_input_"
IDFormSubmit = "input_form_submit"
)
const StaticMetricsAPIbody = "/api/info/metrics/"
const (
//Level0
MT0unset MetricsType = "" //TODO: Platzhalter für unbelegt, eventuell unnötig
MT1dataverses MetricsType = "dataverses"
MT2datasets MetricsType = "datasets"
MT3files MetricsType = "files"
MT4downloads MetricsType = "downloads"
MT5filedownloads MetricsType = "filedownloads"
MT6uniquefiledownloads MetricsType = "uniquefiledownloads"
MT7makeDataCount MetricsType = "makeDataCount"
//Level1
MDCT0unset MetricsDataCountType = "" //TODO: Platzhalter für unbelegt, eventuell unnötig
MDCT1viewsTotal MetricsDataCountType = "viewsTotal"
MDCT2viewsTotalRegular MetricsDataCountType = "viewsTotalRegular"
MDCT3viewsTotalMachine MetricsDataCountType = "viewsTotalMachine"
MDCT4viewsUnique MetricsDataCountType = "viewsUnique"
MDCT5viewsUniqueRegular MetricsDataCountType = "viewsUniqueRegular"
MDCT6viewsUniqueMachine MetricsDataCountType = "viewsUniqueMachine"
MDCT7downloadsTotal MetricsDataCountType = "downloadsTotal"
MDCT8downloadsTotalRegular MetricsDataCountType = "downloadsTotalRegular"
MDCT9downloadsTotalMachine MetricsDataCountType = "downloadsTotalMachine"
MDCT10downloadsUnique MetricsDataCountType = "downloadsUnique"
MDCT11downloadsUniqueRegular MetricsDataCountType = "downloadsUniqueRegular"
MDCT12downloadsUniqueMachine MetricsDataCountType = "downloadsUniqueMachine"
MDCT13citations MetricsDataCountType = "citations"
//Level2
ST0unset SearchType = "" //TODO: Platzhalter für unbelegt, eventuell unnötig
ST1total SearchType = "total" // ISt eigentlich ein Platzhalter. "total" gibt es nicht und wirkt dann, wenn der SearchType weggelassen wird.
ST2tomonth SearchType = "toMonth"
ST3pastdays SearchType = "pastDays"
ST4monthly SearchType = "monthly"
ST5tree SearchType = "tree"
//Level3
RT0unset ReturnformatType = "" //TODO: Platzhalter für unbelegt, eventuell unnötig
RT1json ReturnformatType = "application/json"
RT2csv ReturnformatType = "text/csv"
)
type InputLevel3 = map[ReturnformatType]bool
var OneJumpPointResultformat = map[ReturnformatType]bool{
RT0unset: false,
RT1json: false,
RT2csv: false,
}
type InputLevel2 = map[SearchType]InputLevel3
var OneJumpPointSearchType = InputLevel2{
ST0unset: OneJumpPointResultformat,
ST1total: OneJumpPointResultformat,
ST2tomonth: OneJumpPointResultformat,
ST3pastdays: OneJumpPointResultformat,
ST4monthly: OneJumpPointResultformat,
ST5tree: OneJumpPointResultformat,
}
type InputLevel1 = map[MetricsDataCountType]InputLevel2
var OneJumpPointMetricsDataCountType = InputLevel1{
MDCT0unset: OneJumpPointSearchType,
MDCT1viewsTotal: OneJumpPointSearchType,
MDCT2viewsTotalRegular: OneJumpPointSearchType,
MDCT3viewsTotalMachine: OneJumpPointSearchType,
MDCT4viewsUnique: OneJumpPointSearchType,
MDCT5viewsUniqueRegular: OneJumpPointSearchType,
MDCT6viewsUniqueMachine: OneJumpPointSearchType,
MDCT7downloadsTotal: OneJumpPointSearchType,
MDCT8downloadsTotalRegular: OneJumpPointSearchType,
MDCT9downloadsTotalMachine: OneJumpPointSearchType,
MDCT10downloadsUnique: OneJumpPointSearchType,
MDCT11downloadsUniqueRegular: OneJumpPointSearchType,
MDCT12downloadsUniqueMachine: OneJumpPointSearchType,
MDCT13citations: OneJumpPointSearchType,
}
type InputLevel0 = map[MetricsType]InputLevel1
var OldOneJumpPointSet = InputLevel0{
MT0unset: OneJumpPointMetricsDataCountType,
MT1dataverses: OneJumpPointMetricsDataCountType,
MT2datasets: OneJumpPointMetricsDataCountType,
MT3files: OneJumpPointMetricsDataCountType,
MT4downloads: OneJumpPointMetricsDataCountType,
MT5filedownloads: OneJumpPointMetricsDataCountType,
MT6uniquefiledownloads: OneJumpPointMetricsDataCountType,
MT7makeDataCount: OneJumpPointMetricsDataCountType,
}
type OneJumpPointSet struct {
Level0 MetricsType
Level1 MetricsDataCountType
Level2 SearchType
Level3 ReturnformatType
Active bool
}
var OneJumpPoints []OneJumpPointSet
// Presets
func init() {
//OneJumpPoints = make([]OneJumpPointSet, 910, 910)
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT1dataverses, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT2datasets, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT3files, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT4downloads, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT5filedownloads, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT6uniquefiledownloads, Level1: MDCT0unset, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST0unset, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT1viewsTotal, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT2viewsTotalRegular, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT3viewsTotalMachine, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT4viewsUnique, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT5viewsUniqueRegular, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT6viewsUniqueMachine, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT7downloadsTotal, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT8downloadsTotalRegular, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT9downloadsTotalMachine, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT10downloadsUnique, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT11downloadsUniqueRegular, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT12downloadsUniqueMachine, Level2: ST5tree, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST1total, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST2tomonth, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST3pastdays, Level3: RT1json, Active: false}) // Nicht valide
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST4monthly, Level3: RT1json, Active: true})
OneJumpPoints = append(OneJumpPoints, OneJumpPointSet{Level0: MT7makeDataCount, Level1: MDCT13citations, Level2: ST5tree, Level3: RT1json, Active: true})
//OldOneJumpPointSet[MT1dataverses][MDCT1viewsTotal][ST2_tomonth][RT1json] = true
//OldOneJumpPointSet[MT1dataverses][MDCT2viewsTotalRegular][ST3_pastdays][RT2csv] = true
//fmt.Println(OneJumpPointSet)
}
func FilterStacklist(meisleisz []OneJumpPointSet, index int8) (deisleisz []string, activity []bool) {
switch index {
case 0:
for _, v := range meisleisz {
if !slices.Contains(deisleisz, string(v.Level0)) {
deisleisz = append(deisleisz, string(v.Level0))
activity = append(activity, v.Active)
}
}
case 1:
for _, v := range meisleisz {
if !slices.Contains(deisleisz, string(v.Level1)) {
deisleisz = append(deisleisz, string(v.Level1))
activity = append(activity, v.Active)
}
}
case 2:
for _, v := range meisleisz {
if !slices.Contains(deisleisz, string(v.Level2)) {
deisleisz = append(deisleisz, string(v.Level2))
activity = append(activity, v.Active)
}
}
case 3:
for _, v := range meisleisz {
if !slices.Contains(deisleisz, string(v.Level3)) {
deisleisz = append(deisleisz, string(v.Level3))
activity = append(activity, v.Active)
}
}
}
return
}
type RequestComponentsType struct {
Level0MetricsType, Level1MetricsDataCountType, Level2SearchType, Level21UserInput, Level3ReturnformatType string
}
/*
func JsonStructSelector[resulttype MonthlyJsonData | TotalJsonData | TreeJsonData | struct{}](bjson []byte) (result resulttype) {
switch {
case json.Unmarshal(bjson, &result) == nil:
case json.Unmarshal(bjson, &result) == nil:
case json.Unmarshal(bjson, &result) == nil:
}
return
}
*/
/*
func MetricsUniversal(server_url, api_token string, rcs RequestComponentsType) {
var err error
//var header map[string]string
header := make(map[string]string)
if len(api_token) > 0 {
header["X-Dataverse-key"] = api_token
}
if len(rcs.Level3ReturnformatType) > 0 {
header["Accept"] = string(rcs.Level3ReturnformatType)
}
stest := func(s ...string) string {
if (len(s) > 1 && len(s[0]) > 0) || len(s) == 1 {
if s[0] == string(ST1total) {
return ""
} else {
return "/" + s[0]
}
} else if (len(s) == 2 && len(s[1]) > 0) || (len(s) == 3 && len(s[1]) > 0 && len(s[2]) == 0) {
return "/" + s[1]
} else if len(s) == 3 && len(s[1]) > 0 && len(s[2]) > 0 {
if s[0] == string(ST1total) {
return ""
} else if s[1] == string(ST4monthly) {
return "/" + s[1] // bei Monthly werden erstmal ALLE Datensätze gezogen
} else {
return "/" + s[1] + "/" + s[2]
}
} else {
return ""
}
}
log.Println("DEBUG:", server_url+"/api/info/metrics"+
"/"+rcs.Level0MetricsType+
stest(rcs.Level1MetricsDataCountType, rcs.Level2SearchType, rcs.Level21UserInput))
if err != nil {
log.Fatal(err)
}
return
}*/
//func MetricsDataCountType() (response []byte, debug string)
func MetricsTotal(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string) (response []byte, debug string) {
var err error
//var header map[string]string
header := make(map[string]string)
if len(api_token) > 0 {
header["X-Dataverse-key"] = api_token
}
if len(return_format) > 0 {
header["Accept"] = string(return_format)
}
//log.Println(header)
response, err, debug = connect.GetRequest(server_url+StaticMetricsAPIbody+mtypeOrMdctypeCombi, map[string]string{}, header)
if err != nil {
log.Fatal(err)
}
return
}
func MetricsToMonth(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string, timerange time.Time) (response []byte, debug string) {
var err error
//var header map[string]string
header := make(map[string]string)
if len(api_token) > 0 {
header["X-Dataverse-key"] = api_token
}
if len(return_format) > 0 {
header["Accept"] = string(return_format)
}
//log.Println(header)
response, err, debug = connect.GetRequest(server_url+StaticMetricsAPIbody+mtypeOrMdctypeCombi+"/toMonth/"+timerange.Format("2006-01"), map[string]string{}, header)
if err != nil {
log.Fatal(err)
}
return
}
func MetricsPastDays(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string, days int) (response []byte, debug string) {
var err error
//var header map[string]string
header := make(map[string]string)
if len(api_token) > 0 {
header["X-Dataverse-key"] = api_token
}
if len(return_format) > 0 {
header["Accept"] = string(return_format)
}
//log.Println(header)
response, err, debug = connect.GetRequest(server_url+StaticMetricsAPIbody+mtypeOrMdctypeCombi+"/pastDays/"+strconv.Itoa(days), map[string]string{}, header)
if err != nil {
log.Fatal(err)
}
return
}
func MetricsMonthly(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string) (response []byte, debug string) {
var err error
//var header map[string]string
header := make(map[string]string)
if len(api_token) > 0 {
header["X-Dataverse-key"] = api_token
}
if len(return_format) > 0 {
header["Accept"] = string(return_format)
}
//log.Println(header)
response, err, debug = connect.GetRequest(server_url+StaticMetricsAPIbody+mtypeOrMdctypeCombi+"/monthly/", map[string]string{}, header)
if err != nil {
log.Fatal(err)
}
return
}
type MonthlyJsonData struct {
Status string `json:"status"`
Data []struct {
Date string `json:"date"`
Id int `json:"id"`
Pid string `json:"pid"`
Counttotal int `json:"count"`
Countmonth int `json:"mount"` //Month Count
//Intex int `json:"intex"` //Integer Index instead of Date
DoiDoi string `json:"doidoi"` //Added to beautify links
} `json:"data"`
}
type TotalJsonData struct {
Status string `json:"status"`
Data struct {
Counttotal int `json:"count"`
} `json:"data"`
}
type TreeJsonData struct {
Status string `json:"status"`
Data struct {
Id int `json:"id"`
Ownerid int `json:"ownerId"`
Alias string `json:"alias"`
Depth int `json:"depth"`
Name string `json:"name"`
Children []struct {
Id int `json:"id"`
Ownerid int `json:"ownerId"`
Alias string `json:"alias"`
Depth int `json:"depth"`
Name string `json:"name"`
} `json:"children"`
} `json:"data"`
}
func MetricsReallyMonthly(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string) (response []byte, debug string) {
response, debug = MetricsMonthly(server_url, api_token, return_format, mtypeOrMdctypeCombi)
// var newData map[string]
res := MonthlyJsonData{}
json.Unmarshal(response, &res)
intexmaker := func(s string) (i int) {
i, _ = strconv.Atoi(s[0:4] + s[5:7])
return
}
//for i, _ := range res.Data {
// res.Data[i].Intex = intexmaker(res.Data[i].Date) //Filtere den Bindestrich heraus
//}
//sort.Slice(res.Data, func(i, j int) bool { return res.Data[i].Intex > res.Data[j].Intex }) // Sortiere rückwärts
sort.Slice(res.Data, func(i, j int) bool { return intexmaker(res.Data[i].Date) > intexmaker(res.Data[j].Date) }) // Sortiere rückwärts
for i, _ := range res.Data {
if i+1 < len(res.Data) { // Finde heraus, wieviele Werte für speziell diesen Monat gelten
res.Data[i].Countmonth = res.Data[i].Counttotal - res.Data[i+1].Counttotal
} else {
res.Data[i].Countmonth = res.Data[i].Counttotal
}
if _, f := strings.CutPrefix(res.Data[i].Pid, "doi:"); f { // Erzeuge gleich einen Link zum Doi
res.Data[i].DoiDoi = PDPURL + "/file.xhtml?persistentId=" + res.Data[i].Pid
} else {
res.Data[i].DoiDoi = ""
}
}
//sort.Slice(res.Data, func(i, j int) bool { return res.Data[i].Intex < res.Data[j].Intex }) // Sortiere wieder vorwärts
sort.Slice(res.Data, func(i, j int) bool { return intexmaker(res.Data[i].Date) < intexmaker(res.Data[j].Date) }) // Sortiere wieder vorwärts
//log.Println(res)
debug += " #enhanced by monthly count (mount)"
response, _ = json.Marshal(res)
return
}
func MetricsReallyMonthlySpan(server_url, api_token string, return_format ReturnformatType, mtypeOrMdctypeCombi string, timerange_span [2]time.Time) (response []byte, debug string) {
response, debug = MetricsReallyMonthly(server_url, api_token, return_format, mtypeOrMdctypeCombi)
//timerange_span[0].Format("2006-01")
//timerange_span[1].Format("2006-01")
//res := monthlyJsonData{}
var res, res2 MonthlyJsonData
res2.Status = res.Status
json.Unmarshal(response, &res)
for _, v := range res.Data { // Finde heraus, wieviele Werte für speziell diesen Monat gelten
if func() bool {
ts, _ := time.Parse("2006-01", v.Date)
if !ts.Before(timerange_span[0]) && !ts.After(timerange_span[1]) {
return true
} else {
return false
}
}() {
//debug += fmt.Sprintf("gefunden %s", v.Date)
res2.Data = append(res2.Data, v)
}
}
//debug += fmt.Sprintln(res2)
//debug += fmt.Sprintln("T E S T")
response, _ = json.Marshal(res2)
return
}
func MetricsTree(server_url, api_token string, return_format ReturnformatType, timerange time.Time) (response []byte, debug string) {
var err error
var header map[string]string
header = make(map[string]string)
if len(api_token) > 0 {
header["X-Dataverse-key"] = api_token
}
if len(return_format) > 0 {
header["Accept"] = string(return_format)
}
//log.Println(header)
response, err, debug = connect.GetRequest(server_url+"/api/info/metrics/tree"+func() string {
if !timerange.IsZero() {
return "/toMonth/" + timerange.Format("2006-01")
} else {
return ""
}
}(), map[string]string{}, header)
if err != nil {
log.Fatal(err)
}
return
}
/*
func ListUsers(server_url, api_token string, sorted bool) string {
response, err, _ := connect.GetRequest(server_url+"/api/admin/list-users"+func(s bool) string {
if s {
return "?sortKey=createdtime"
} else {
return ""
}
}(sorted), map[string]string{}, map[string]string{"X-Dataverse-key": api_token})
if err != nil {
log.Fatal(err)
}
return (fmt.Sprintf("%s", response))
//curl -H "X-Dataverse-key:$API_TOKEN" $SERVER_URL/api/admin/list-users
//# sort by createdtime (the creation time of the account)
//#curl -H "X-Dataverse-key:$API_TOKEN" "$SERVER_URL/api/admin/list-users?sortKey=createdtime"
}
func ListUser(server_url, api_token, id string) string {
response, err, _ := connect.GetRequest(server_url+"/api/admin/authenticatedUsers/"+id, map[string]string{}, map[string]string{"X-Dataverse-key": api_token})
if err != nil {
log.Fatal(err)
}
return (fmt.Sprintf("%s", response))
}
*/
/*
func ToggleSuperuser(server_url, api_token, id string) string {
response, err := connect.PostRequest(server_url+"/api/admin/superuser/"+id+"", map[string]string{}, map[string]string{"X-Dataverse-key": api_token})
if err != nil {
log.Fatal(err)
}
return (fmt.Sprintf("%s", response))
}
*/
/*
func CreateAuthenticatedUser(server_url, api_token, params string) string {
response, err := connect.PostRequestB(server_url+"/api/admin/authenticatedUsers", []byte(params), map[string]string{"X-Dataverse-key": api_token})
if err != nil {
log.Fatal(err)
}
return (fmt.Sprintf("%s", response))
}
*/