ing
This commit is contained in:
parent
f4dadd447f
commit
7bd66d6dab
46
modules/config/model/ResultSet.go
Normal file
46
modules/config/model/ResultSet.go
Normal file
|
@ -0,0 +1,46 @@
|
|||
package model
|
||||
|
||||
import "encoding/json"
|
||||
|
||||
type ResultSetter interface {
|
||||
AddRow(row []string)
|
||||
GetMeta() map[string]json.Number
|
||||
GetData() map[string]string
|
||||
}
|
||||
|
||||
type ResultSet struct {
|
||||
Item *Item `json:"item,omitempty"`
|
||||
Rows [][]string `json:"rows,omitempty"`
|
||||
Meta map[string]json.Number `json:"meta,omitempty"`
|
||||
}
|
||||
|
||||
func (rs *ResultSet) AddRow(row []string) {
|
||||
rs.Rows = append(rs.Rows, row)
|
||||
}
|
||||
|
||||
func (rs *ResultSet) GetMeta() map[string]json.Number {
|
||||
return rs.Meta
|
||||
}
|
||||
|
||||
func NewResultSet(item *Item) ResultSetter {
|
||||
if nil == item.MappingInfo {
|
||||
item.MappingInfo = &MappingInfo{}
|
||||
}
|
||||
rs := &ResultSet{}
|
||||
rs.Item = item
|
||||
rs.Rows = make([][]string, 0)
|
||||
|
||||
switch item.MappingInfo.ParseDirection {
|
||||
case "row":
|
||||
rsr := &ResultSetRow{}
|
||||
rsr.ResultSet = rs
|
||||
rsr.setMeta()
|
||||
return rsr
|
||||
default:
|
||||
rsc := &ResultSetCol{}
|
||||
rsc.ResultSet = rs
|
||||
rsc.setMeta()
|
||||
return rsc
|
||||
}
|
||||
|
||||
}
|
85
modules/config/model/ResultSetCol.go
Normal file
85
modules/config/model/ResultSetCol.go
Normal file
|
@ -0,0 +1,85 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
cuej "git.loafle.net/commons_go/util/encoding/json"
|
||||
)
|
||||
|
||||
type ResultSetCol struct {
|
||||
*ResultSet
|
||||
}
|
||||
|
||||
func (rsc *ResultSetCol) setMeta() {
|
||||
meta := rsc.Item.Keys
|
||||
arrayColumns := rsc.Item.MappingInfo.ArrayColumns
|
||||
|
||||
if nil == rsc.Meta {
|
||||
rsc.Meta = make(map[string]json.Number, 0)
|
||||
}
|
||||
|
||||
for i := 0; i < len(meta); i++ {
|
||||
rsc.Meta[meta[i].Key] = json.Number(strconv.Itoa(i))
|
||||
}
|
||||
|
||||
if nil != arrayColumns {
|
||||
for i := 0; i < len(arrayColumns); i++ {
|
||||
if _, ok := rsc.Meta[arrayColumns[i]]; ok {
|
||||
continue
|
||||
}
|
||||
rsc.Meta[arrayColumns[i]] = json.Number(strconv.Itoa(i + len(meta)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (rsc *ResultSetCol) GetData() map[string]string {
|
||||
return rsc.parse()
|
||||
}
|
||||
|
||||
func (rsc *ResultSetCol) parse() map[string]string {
|
||||
metrics := rsc.Item.Keys
|
||||
arrayColumns := rsc.Item.MappingInfo.ArrayColumns
|
||||
|
||||
rm := make(map[string]string, 0)
|
||||
|
||||
for i := 0; i < len(rsc.Rows); i++ {
|
||||
row := rsc.Rows[i]
|
||||
for j := 0; j < len(row); j++ {
|
||||
arrayValue := make([]string, 0)
|
||||
|
||||
if nil != arrayColumns {
|
||||
for k := 0; k < len(arrayColumns); k++ {
|
||||
idxN := rsc.Meta[arrayColumns[k]]
|
||||
idx, _ := cuej.NumberToInt(idxN)
|
||||
arrayValue = append(arrayValue, row[idx])
|
||||
}
|
||||
}
|
||||
|
||||
for k := 0; k < len(metrics); k++ {
|
||||
metric := metrics[k].Metric
|
||||
metric = rsc.convertMetric(metric, arrayValue)
|
||||
rm[metric] = row[k]
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rsc *ResultSetCol) convertMetric(metric string, arrayValue []string) string {
|
||||
if nil == arrayValue || 0 == len(arrayValue) {
|
||||
return metric
|
||||
}
|
||||
|
||||
convertChar := "$"
|
||||
|
||||
for i := 0; i < len(arrayValue); i++ {
|
||||
convertStr := fmt.Sprintf("%s%d", convertChar, i)
|
||||
metric = strings.Replace(metric, convertStr, arrayValue[i], -1)
|
||||
}
|
||||
return metric
|
||||
}
|
105
modules/config/model/ResultSetRow.go
Normal file
105
modules/config/model/ResultSetRow.go
Normal file
|
@ -0,0 +1,105 @@
|
|||
package model
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
cuej "git.loafle.net/commons_go/util/encoding/json"
|
||||
)
|
||||
|
||||
type ResultSetRow struct {
|
||||
*ResultSet
|
||||
}
|
||||
|
||||
func (rsr *ResultSetRow) setMeta() {
|
||||
meta := make([]string, 0)
|
||||
arrayColumns := rsr.Item.MappingInfo.ArrayColumns
|
||||
keyColumns := rsr.Item.MappingInfo.KeyColumns
|
||||
valueColumn := rsr.Item.MappingInfo.ValueColumn
|
||||
|
||||
if nil != arrayColumns {
|
||||
for _, c := range arrayColumns {
|
||||
meta = append(meta, c)
|
||||
}
|
||||
}
|
||||
|
||||
if nil != keyColumns {
|
||||
for _, c := range keyColumns {
|
||||
meta = append(meta, c)
|
||||
}
|
||||
}
|
||||
|
||||
if "" != valueColumn {
|
||||
meta = append(meta, valueColumn)
|
||||
}
|
||||
|
||||
if nil == rsr.Meta {
|
||||
rsr.Meta = make(map[string]json.Number, 0)
|
||||
}
|
||||
|
||||
for i := 0; i < len(meta); i++ {
|
||||
rsr.Meta[meta[i]] = json.Number(strconv.Itoa(i))
|
||||
}
|
||||
}
|
||||
|
||||
func (rsr *ResultSetRow) GetData() map[string]string {
|
||||
return rsr.parse()
|
||||
}
|
||||
|
||||
func (rsr *ResultSetRow) parse() map[string]string {
|
||||
valueColumn := rsr.Item.MappingInfo.ValueColumn
|
||||
|
||||
rm := make(map[string]string, 0)
|
||||
|
||||
for _, row := range rsr.Rows {
|
||||
key := rsr.makeKey(row)
|
||||
if "" == key {
|
||||
continue
|
||||
}
|
||||
idx, _ := cuej.NumberToInt(rsr.Meta[valueColumn])
|
||||
rm[key] = row[idx]
|
||||
}
|
||||
|
||||
return rm
|
||||
}
|
||||
|
||||
func (rsr *ResultSetRow) makeKey(data []string) string {
|
||||
metrics := rsr.Item.Keys
|
||||
arrayColumns := rsr.Item.MappingInfo.ArrayColumns
|
||||
keyColumns := rsr.Item.MappingInfo.KeyColumns
|
||||
keys := rsr.Item.Keys
|
||||
|
||||
findIndex := -1
|
||||
|
||||
Loop:
|
||||
for _, keyColumn := range keyColumns {
|
||||
idx, _ := cuej.NumberToInt(rsr.Meta[keyColumn])
|
||||
row := data[idx]
|
||||
for i := 0; i < len(keys); i++ {
|
||||
if row == keys[i].Key {
|
||||
findIndex = i
|
||||
break Loop
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if 0 > findIndex {
|
||||
return ""
|
||||
}
|
||||
|
||||
metric := metrics[findIndex].Metric
|
||||
|
||||
convertChar := "$"
|
||||
|
||||
if nil != arrayColumns {
|
||||
for i := 0; i < len(arrayColumns); i++ {
|
||||
convertStr := fmt.Sprintf("%s%d", convertChar, i)
|
||||
idx, _ := cuej.NumberToInt(rsr.Meta[arrayColumns[i]])
|
||||
replaceString := data[idx]
|
||||
metric = strings.Replace(metric, convertStr, "'"+replaceString+"'", -1)
|
||||
}
|
||||
}
|
||||
return metric
|
||||
}
|
Loading…
Reference in New Issue
Block a user