123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251 |
- package importer
- 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
- datakey_fieldinfos 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...)
- }
- }
- 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,
- datakey_fieldinfos: 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`,
- }
|