public void InsertComputer(string assetName, string groupName, string ipAddress, string macAddress) { LocationsDAO lwDataAccess = new LocationsDAO(); SettingsDAO lSettingsDao = new SettingsDAO(); // We need to get the root item as all of the domains need to be parented to this System.Data.DataTable table = lwDataAccess.GetGroups(new AssetGroup(AssetGroup.GROUPTYPE.domain)); AssetGroup rootGroup = new AssetGroup(table.Rows[0], AssetGroup.GROUPTYPE.domain); // Get the child domains - as domains are single level we do not need to recurse rootGroup.Populate(false, false, true); // We'll loop through the domains first and add then to the database recovering their ids so that // we only have to do this once. // Does this domain already exist? AssetGroup childGroup; lock (this) { childGroup = rootGroup.IsChildGroup(groupName); // No - add it as a new group both to the database and to the parent if (childGroup == null) { childGroup = new AssetGroup(AssetGroup.GROUPTYPE.domain); childGroup.Name = groupName; childGroup.ParentID = rootGroup.GroupID; childGroup.GroupID = lwDataAccess.GroupAdd(childGroup); rootGroup.Groups.Add(childGroup); } } string vendor = String.Empty; try { if (macAddress != String.Empty) { // // CMD IMPORTANT UNCOMMENT THESE LINES // using (System.IO.StreamReader sr = new System.IO.StreamReader(System.IO.Path.Combine(Application.StartupPath, "oui.txt"))) // { // string line; // while ((line = sr.ReadLine()) != null) // { // if (line.StartsWith(macAddress.Substring(0, 8))) // { // if (line.Substring(18).ToUpper().StartsWith("APPLE")) // { // vendor = line.Substring(18); // break; // } // } // } // } } } catch (FormatException) { } // Now that we have the ID of the group (even if we just added the group) we can now // add the asset to the database also. Asset newAsset = new Asset(); newAsset.Name = assetName; newAsset.MACAddress = macAddress.Replace('-', ':'); newAsset.Make = vendor; if (vendor.ToUpper().StartsWith("APPLE")) { // add as an Apple Device assetTypes.Populate(); AssetType parentAssetType = assetTypes.FindByName("Apple Devices"); if (parentAssetType == null) { // Now create a child of this asset type parentAssetType = new AssetType(); parentAssetType.Name = "Apple Devices"; parentAssetType.Auditable = false; parentAssetType.Icon = "apple.png"; parentAssetType.ParentID = 0; parentAssetType.Add(); // Update the internal list assetTypes.Add(parentAssetType); } assetTypes.Populate(); parentAssetType = assetTypes.FindByName("Apple Devices"); AssetType childAssetType = assetTypes.FindByName("Apple Device"); if (childAssetType == null) { // Now create a child of this asset type childAssetType = new AssetType(); childAssetType.Name = "Apple Device"; childAssetType.Auditable = false; childAssetType.Icon = parentAssetType.Icon; childAssetType.ParentID = parentAssetType.AssetTypeID; childAssetType.Add(); // Update the internal list assetTypes.Add(childAssetType); } assetTypes.Populate(); childAssetType = assetTypes.FindByName("Apple Device"); newAsset.AssetTypeID = childAssetType.AssetTypeID; } AssetList assetList = new AssetList(new AssetDAO().GetAssets(0, AssetGroup.GROUPTYPE.userlocation, false), true); bool bUpdateAsset = true; bool bSNMPAsset = false; bool bExistingAuditedAsset = false; foreach (Asset existingAsset in assetList) { if ((existingAsset.AgentVersion == "SNMP") && (existingAsset.IPAddress == ipAddress)) { bSNMPAsset = true; break; } if ((assetName == existingAsset.Name) && (groupName == existingAsset.Domain)) { // this asset already exists - only need to check if domain or IP have changed // if they have, send it away to be updated if (existingAsset.IPAddress != ipAddress || existingAsset.DomainID != childGroup.GroupID) { newAsset = existingAsset; newAsset.IPAddress = newAsset.IPAddress != ipAddress ? ipAddress : newAsset.IPAddress; newAsset.DomainID = newAsset.DomainID != childGroup.GroupID ? childGroup.GroupID : newAsset.DomainID; } else { // asset exists, nothing has changed so don't process bUpdateAsset = false; } break; } if (!bSNMPAsset && existingAsset.IPAddress == ipAddress && existingAsset.Domain != newAsset.Domain) { bExistingAuditedAsset = true; //check for any asset name change if so update asset with audittrail entry if (existingAsset.Name != assetName) { string strOldValue = existingAsset.Name; newAsset = existingAsset; newAsset.Name = assetName; newAsset.Update(); AuditTrailDAO objAuditTrailDAO = new AuditTrailDAO(); // Build a blank AuditTrailEntry AuditTrailEntry ate = CreateAteForAssetNameChange(newAsset); ate.Key = ate.Key + "|" + "Computer Name"; ate.OldValue = strOldValue; ate.NewValue = assetName; objAuditTrailDAO.AuditTrailAdd(ate); } } } if (bUpdateAsset && !bSNMPAsset && !bExistingAuditedAsset) { newAsset.Domain = childGroup.Name; newAsset.DomainID = childGroup.GroupID; newAsset.IPAddress = ipAddress; // Add the asset newAsset.Add(); if (lSettingsDao.GetSettingAsBoolean("AutoScanNetwork", false) && lSettingsDao.GetSettingAsBoolean("AutoScanDeployAgent", false)) { string scannerPath = System.IO.Path.Combine(Application.StartupPath, "scanners") + "\\auditagent\\default.xml"; System.IO.File.Copy(scannerPath, "AuditAgent\\AuditAgent.xml", true); Operation newOperation = new Operation(newAsset.AssetID, Operation.OPERATION.deployagent); newOperation.Add(); } } if (!bSNMPAsset) { Interlocked.Increment(ref _foundCounter); FireNetworkDiscoveryUpdate(new DiscoveryUpdateEventArgs(_foundCounter.ToString(), "Computer", _maximumCount, 0)); } }
/// <summary> /// 生成BuildInfo信息 /// </summary> public bool GenBuildInfo() { //初始化数据 this.AssetTypeList = new List <string>(); this.BuildAssetsInfo = new BuildAssetsInfo(); this.RuntimeAssetsList = GetRuntimeAssetsInfo(); // var sw = new Stopwatch(); sw.Start(); BuildAssetsInfo.Time = DateTime.Now.ToShortDateString(); int id = 0; //搜集所有的依赖 foreach (var mainAsset in this.RuntimeAssetsList) { //这里会包含主资源 var dependAssetPathList = GetDependAssetList(mainAsset.importFrom); //获取依赖信息 并加入buildinfo foreach (var dependPath in dependAssetPathList) { //防止重复 if (BuildAssetsInfo.AssetDataMaps.ContainsKey(dependPath)) { continue; } //判断资源类型 var type = AssetBundleEditorToolsV2.GetMainAssetTypeAtPath(dependPath); if (type == null) { Debug.LogError("获取资源类型失败:" + dependPath); continue; } //构建资源类型 var assetData = new BuildAssetsInfo.BuildAssetData(); assetData.Id = id; assetData.Hash = this.GetHashFromAssets(dependPath); assetData.ABName = dependPath; var idx = AssetTypeList.FindIndex((a) => a == type.FullName); if (idx == -1) { AssetTypeList.Add(type.FullName); idx = AssetTypeList.Count - 1; } assetData.Type = idx; //获取依赖 var dependeAssetList = this.GetDependAssetList(dependPath); assetData.DependAssetList.AddRange(dependeAssetList); //添加 BuildAssetsInfo.AssetDataMaps[dependPath] = assetData; id++; } } //TODO AB依赖关系纠正 /// 已知Unity,bug/设计缺陷: /// 1.依赖接口,中会携带自己 /// 2.如若a.png、b.png 依赖 c.atlas,则abc依赖都会是:a.png 、b.png 、 a.atlas foreach (var asset in BuildAssetsInfo.AssetDataMaps) { //依赖中不包含自己 asset.Value.DependAssetList.Remove(asset.Value.ABName); } //获取依赖 this.DependAssetList = this.GetDependAssetsinfo(); //---------------------------------------end--------------------------------------------------------- //检查 foreach (var ar in this.RuntimeAssetsList) { if (!BuildAssetsInfo.AssetDataMaps.ContainsKey(ar.importFrom)) { Debug.LogError("AssetDataMaps遗漏资源:" + ar.importFrom); } } Debug.LogFormat("【GenBuildInfo】耗时:{0}ms.", sw.ElapsedMilliseconds); //检测构造的数据 var count = this.RuntimeAssetsList.Count + this.DependAssetList.Count; if (BuildAssetsInfo.AssetDataMaps.Count != count) { Debug.LogErrorFormat("【初始化框架资源环境】出错! buildinfo:{0} output:{1}", BuildAssetsInfo.AssetDataMaps.Count, count); var tmpBuildAssetsInfo = BuildAssetsInfo.Clone(); foreach (var ra in this.RuntimeAssetsList) { tmpBuildAssetsInfo.AssetDataMaps.Remove(ra.importFrom); } foreach (var drf in this.DependAssetList) { tmpBuildAssetsInfo.AssetDataMaps.Remove(drf.importFrom); } Debug.Log(JsonMapper.ToJson(tmpBuildAssetsInfo.AssetDataMaps, true)); return(false); } return(true); }