123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254 |
- package schema
- import (
- "strings"
- "git.wecise.com/wecise/util/cmap"
- )
- type FieldInfo struct {
- Fieldname string
- Fieldtype string
- Keyidx int // 主键顺序值,0为非主键
- Datakey string // 对应数据中的键名
- }
- type ClassInfo struct {
- Classname string
- Aliasname string
- Classfullname string
- Fieldinfos map[string]*FieldInfo
- DatakeyFieldinfos map[string]*FieldInfo
- Keyfields []string
- Fieldslist []string
- Insertmql string
- Createmql string
- }
- var ClassInfos = cmap.New[string, *ClassInfo]()
- var ClassNames = []string{}
- func init() {
- newclassinfo("m3cnet", "m3cnet", "/", nil,
- [2]string{"ttl", "366 day"},
- [2]string{"autosearch", "true"},
- [2]string{"version", "false"},
- [2]string{"namespace", "'m3cnet'"},
- )
- newclassinfo("master", "master", "m3cnet",
- []*FieldInfo{
- {Fieldname: "uniqueid", Fieldtype: "varchar", Keyidx: 1, Datakey: "UNIQUEID"},
- {Fieldname: "name", Fieldtype: "varchar", Datakey: "NAME"},
- {Fieldname: "entitytypes", Fieldtype: "set<varchar>", Datakey: "ENTITYTYPES"},
- {Fieldname: "basename", Fieldtype: "varchar", Datakey: "BASENAME"},
- {Fieldname: "entitytypesarr", Fieldtype: "varchar", Datakey: "ENTITYTYPESARR"},
- {Fieldname: "originid", Fieldtype: "varchar", Datakey: "ID"},
- {Fieldname: "tags", Fieldtype: "set<varchar>", Datakey: "TAGS"},
- {Fieldname: "changetime", Fieldtype: "timestamp", Datakey: "CHANGETIME"},
- {Fieldname: "emsname", Fieldtype: "varchar", Datakey: "EMSNAME"},
- {Fieldname: "sysid", Fieldtype: "varchar", Datakey: "SYSID"},
- {Fieldname: "site", Fieldtype: "varchar", Datakey: "SITE"},
- {Fieldname: "vendor", Fieldtype: "varchar", Datakey: "VENDOR"},
- {Fieldname: "ci_table", Fieldtype: "varchar", Datakey: "CI_TABLE"},
- {Fieldname: "ci_status", Fieldtype: "varchar", Datakey: "CI_STATUS"},
- {Fieldname: "rel_status", Fieldtype: "varchar", Datakey: "REL_STATUS"},
- {Fieldname: "stage", Fieldtype: "varchar", Datakey: "STAGE"},
- {Fieldname: "extraattr", Fieldtype: "varchar", Datakey: "EXTRAATTR"},
- {Fieldname: "entityid", Fieldtype: "varchar", Datakey: "ENTITYID"},
- {Fieldname: "asmchangetime", Fieldtype: "int", Datakey: "ASMCHANGETIME"},
- {Fieldname: "cmdbmapping", Fieldtype: "varchar", Datakey: "CMDBMAPPING"},
- {Fieldname: "ipaddress", Fieldtype: "varchar", Datakey: "IPADDRESS"},
- {Fieldname: "distname", Fieldtype: "varchar", Datakey: "DISTNAME"},
- {Fieldname: "site_source", Fieldtype: "varchar", Datakey: "SITE_SOURCE"},
- {Fieldname: "lastupdated", Fieldtype: "timestamp", Datakey: "LASTUPDATED"},
- },
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- newclassinfo("minfo", "minfo", "m3cnet",
- []*FieldInfo{
- {Fieldname: "uniqueid", Fieldtype: "varchar", Keyidx: 1, Datakey: "uniqueId"},
- {Fieldname: "distname", Fieldtype: "varchar", Datakey: "distName"},
- {Fieldname: "name", Fieldtype: "varchar", Datakey: "name"},
- {Fieldname: "entitytypes", Fieldtype: "set<varchar>", Datakey: "entityTypes"},
- {Fieldname: "extraattr", Fieldtype: "varchar", Datakey: ""},
- {Fieldname: "tags", Fieldtype: "set<varchar>", Datakey: "tags"},
- },
- [2]string{"key", "manu"},
- )
- newclassinfo("level1", "level1", "minfo", nil,
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- newclassinfo("level2", "level2", "minfo", nil,
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- newclassinfo("level3", "level3", "minfo", nil,
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- newclassinfo("level4", "level4", "minfo", nil,
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- newclassinfo("level5", "level5", "minfo", nil,
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- newclassinfo("level6", "level6", "minfo", nil,
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- newclassinfo("level7", "level7", "minfo", nil,
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- newclassinfo("level8", "level8", "minfo", nil,
- [2]string{"partition", "name"},
- [2]string{"key", "manu"},
- )
- }
- func newclassinfo(aliasname, classname, baseclassname string, fieldinfoslist []*FieldInfo, withoptions ...[2]string) (ci *ClassInfo) {
- defer func() {
- ClassNames = append(ClassNames, classname)
- ClassInfos.Set(classname, ci)
- }()
- fieldinfos := map[string]*FieldInfo{}
- datakey_fieldinfos := map[string]*FieldInfo{}
- fieldslist := []string{}
- keyfields := []string{}
- createmql := `create class if not exists ` + classname + `:` + baseclassname + `(`
- classfullname := ""
- bci := ClassInfos.GetIFPresent(baseclassname)
- if bci != nil {
- classfullname = bci.Classfullname + "/" + classname
- for fn, fi := range bci.Fieldinfos {
- fieldinfos[fn] = fi
- datakey_fieldinfos[fi.Datakey] = fi
- }
- fieldslist = append(fieldslist, bci.Fieldslist...)
- keyfields = append(keyfields, bci.Keyfields...)
- } else {
- if baseclassname != "/" && baseclassname != "" {
- panic("baseclassname not defined " + baseclassname)
- }
- classfullname = "/" + classname
- }
- keyfield_defines := []string{}
- if len(fieldinfoslist) > 0 {
- field_defines := []string{}
- for _, fi := range fieldinfoslist {
- field_defines = append(field_defines, fi.Fieldname+` `+fi.Fieldtype+`"`+fi.Datakey+`"`)
- fieldslist = append(fieldslist, fi.Fieldname)
- if fi.Keyidx > 0 {
- for len(keyfield_defines) < fi.Keyidx {
- keyfield_defines = append(keyfield_defines, "")
- }
- keyfield_defines[fi.Keyidx-1] = fi.Fieldname
- }
- fieldinfos[fi.Fieldname] = fi
- datakey_fieldinfos[fi.Datakey] = fi
- }
- createmql += strings.Join(field_defines, ",")
- }
- if len(keyfield_defines) > 0 {
- createmql += ", keys(" + strings.Join(keyfield_defines, ",") + ")"
- keyfields = append(keyfields, keyfield_defines...)
- }
- createmql += `)with alias='` + aliasname + `'`
- for _, withoption := range withoptions {
- createmql += " and " + withoption[0] + "=" + withoption[1]
- if withoption[0] == "key" && withoption[1] == "manu" {
- fieldslist = append([]string{"id"}, fieldslist...)
- }
- }
- fieldslist = append(fieldslist, "contain")
- fieldslist = append(fieldslist, "depend")
- fieldslist = append(fieldslist, "topology")
- var insertmql string
- if len(fieldslist) > 0 {
- insertmql = `insert into ` + classname + "(" + strings.Join(fieldslist, ",") + ")values(" + strings.Repeat(",?", len(fieldslist))[1:] + ")"
- }
- ci = &ClassInfo{
- Classname: classname,
- Aliasname: aliasname,
- Classfullname: classfullname,
- Fieldinfos: fieldinfos,
- DatakeyFieldinfos: datakey_fieldinfos,
- Keyfields: keyfields,
- Fieldslist: fieldslist,
- Insertmql: insertmql,
- Createmql: createmql,
- }
- return
- }
- var _ = `
- create class if not exists m3cnet : / ( )with ttl=366 day , autosearch=true , version=false , alias='m3cnet' , namespace='m3cnet' ;
- create class if not exists master : m3cnet (
- uniqueid varchar "UNIQUEID",
- name varchar "NAME",
- entitytypes varchar "ENTITYTYPES",
- basename varchar "BASENAME",
- entitytypesarr varchar "ENTITYTYPESARR",
- originid varchar "ID",
- tags set<varchar> "TAGS",
- changetime timestamp "CHANGETIME",
- emsname varchar "EMSNAME",
- sysid varchar "SYSID",
- site varchar "SITE",
- vendor varchar "VENDOR",
- ci_table varchar "CI_TABLE",
- ci_status varchar "CI_STATUS",
- rel_status varchar "REL_STATUS",
- stage varchar "STAGE",
- extraattr map<varchar,varchar> "EXTRAATTR",
- entityid varchar "ENTITYID",
- asmchangetime timestamp "ASMCHANGETIME",
- cmdbmapping varchar "CMDBMAPPING",
- ipaddress varchar "IPADDRESS",
- distname varchar "DISTNAME",
- site_source varchar "SITE_SOURCE",
- lastupdated timestamp "LASTUPDATED",
- keys( uniqueid )
- ) with partition=entitytypes , alias='master' ;
- create class if not exists minfo : m3cnet (
- uniqueid varchar,
- distName varchar,
- name varchar,
- entityTypes varchar,
- extraattr map<varchar,varchar>,
- tags set<varchar>,
-
- keys( uniqueid )
- ) with alias='minfo' ;
- create class if not exists level1 : minfo () with partition=entitytypes , alias='level1' ;
- create class if not exists level2 : minfo () with partition=entitytypes , alias='level2' ;
- create class if not exists level3 : minfo () with partition=entitytypes , alias='level3' ;
- create class if not exists level4 : minfo () with partition=entitytypes , alias='level4' ;
- create class if not exists level5 : minfo () with partition=entitytypes , alias='level5' ;
- create class if not exists level6 : minfo () with partition=entitytypes , alias='level6' ;
- create class if not exists level7 : minfo () with partition=entitytypes , alias='level7' ;
- create class if not exists level8 : minfo () with partition=entitytypes , alias='level8' ;
- `
- var Relations = map[string]string{
- "contains": "contain",
- "contain": "contain",
- "dependon": "depend",
- "depend": "depend",
- "topology": "topology",
- }
- var CreateEdgeMqls = []string{
- `create edge type m3cnet.contain`,
- `create edge type m3cnet.depend`,
- `create edge type m3cnet.topology`,
- }
|