|
@@ -0,0 +1,230 @@
|
|
|
+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"},
|
|
|
+ )
|
|
|
+ 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"},
|
|
|
+ },
|
|
|
+ )
|
|
|
+ newclassinfo("level1", "level1", "minfo", nil,
|
|
|
+ [2]string{"partition", "name"},
|
|
|
+ )
|
|
|
+ newclassinfo("level2", "level2", "minfo", nil,
|
|
|
+ [2]string{"partition", "name"},
|
|
|
+ )
|
|
|
+ newclassinfo("level3", "level3", "minfo", nil,
|
|
|
+ [2]string{"partition", "name"},
|
|
|
+ )
|
|
|
+ newclassinfo("level4", "level4", "minfo", nil,
|
|
|
+ [2]string{"partition", "name"},
|
|
|
+ )
|
|
|
+ newclassinfo("level5", "level5", "minfo", nil,
|
|
|
+ [2]string{"partition", "name"},
|
|
|
+ )
|
|
|
+ newclassinfo("level6", "level6", "minfo", nil,
|
|
|
+ [2]string{"partition", "name"},
|
|
|
+ )
|
|
|
+ newclassinfo("level7", "level7", "minfo", nil,
|
|
|
+ [2]string{"partition", "name"},
|
|
|
+ )
|
|
|
+ newclassinfo("level8", "level8", "minfo", nil,
|
|
|
+ [2]string{"partition", "name"},
|
|
|
+ )
|
|
|
+}
|
|
|
+
|
|
|
+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]
|
|
|
+ }
|
|
|
+
|
|
|
+ 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 createedgemqls = []string{
|
|
|
+ `create edge type m3cnet.contain`,
|
|
|
+ `create edge type m3cnet.depend`,
|
|
|
+ `create edge type m3cnet.topology`,
|
|
|
+}
|