657 lines
31 KiB
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))
|
||
|
}
|
||
|
*/
|