private void _processContentConfig(BridgeContentConfig contentConfig, Stream stream) { var serializer = new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull).Build(); var watch = new Stopwatch(); string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; _clearTempFolder(); watch.Start(); //have this driven by config var serializationPath = $"{serializationFolder}/content/{contentConfig.Name}"; var tempGUID = DateTime.Now.Ticks.ToString(); var tempSerializationPath = $"{serializationFolder}/temp/{tempGUID}/{contentConfig.Name}"; var pageTypes = contentConfig.GetPageTypes(); var fieldsToIgnore = contentConfig.GetIgnoreFields(); var path = contentConfig.Query; //TODO: Query to see if page types exist, if DOESNT, display that... MultiDocumentQuery docs = DocumentHelper.GetDocuments().Path(path).Types(pageTypes.ToArray()).AllCultures().FilterDuplicates(); var treeNodes = docs.ToList <TreeNode>(); foreach (var treeNode in treeNodes) { watch.Reset(); watch.Start(); var mappedItem = treeNode.Adapt <BridgeTreeNode>(); mappedItem.FieldValues = new Dictionary <string, object>(); foreach (string columnName in treeNode.ColumnNames) { if (!fieldsToIgnore.Contains(columnName)) { var columnValue = treeNode.GetValue(columnName); if (columnValue != null) { mappedItem.FieldValues.Add(columnName, columnValue); } } } mappedItem.ParentNodeGUID = treeNode?.Parent?.NodeGUID; var stringBuilder = new StringBuilder(); var res = serializer.Serialize(mappedItem); stringBuilder.AppendLine(res); var pathToWriteTo = $"{tempSerializationPath}/{mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml"; var concretePath = this.GetRootPath(pathToWriteTo); FileInfo file = new FileInfo(concretePath); file.Directory.Create(); // If the directory already exists, this method does nothing. File.WriteAllText(concretePath, res); } watch.Stop(); _outputToStream(stream, $"Generating temp {contentConfig.Name} - {watch.ElapsedMilliseconds}ms"); _processDifferences(stream, watch, serializationPath, tempSerializationPath); }
private void _processContentConfig(BridgeContentConfig contentConfig, Stream stream) { var serializer = new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull).Build(); var watch = new Stopwatch(); string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; //have this driven by config var serializationPath = $"{serializationFolder}/content/{contentConfig.Name}"; var pageTypes = contentConfig.GetPageTypes(); var fieldsToIgnore = contentConfig.GetIgnoreFields(); var path = contentConfig.Query; MultiDocumentQuery docs = DocumentHelper.GetDocuments().Path(path).Types(pageTypes.ToArray()).AllCultures().FilterDuplicates(); var treeNodes = docs.ToList <TreeNode>(); foreach (var treeNode in treeNodes) { watch.Reset(); watch.Start(); var mappedItem = treeNode.Adapt <BridgeTreeNode>(); mappedItem.FieldValues = new Dictionary <string, object>(); foreach (string columnName in treeNode.ColumnNames) { if (!fieldsToIgnore.Contains(columnName)) { var columnValue = treeNode.GetValue(columnName); if (columnValue != null) { mappedItem.FieldValues.Add(columnName, columnValue); } } } mappedItem.ParentNodeGUID = treeNode?.Parent?.NodeGUID; var stringBuilder = new StringBuilder(); var res = serializer.Serialize(mappedItem); stringBuilder.AppendLine(res); var pathToWriteTo = $"{serializationPath}/{mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml"; var concretePath = this.GetRootPath(pathToWriteTo); FileInfo file = new FileInfo(concretePath); file.Directory.Create(); // If the directory already exists, this method does nothing. File.WriteAllText(concretePath, res); watch.Stop(); byte[] bytes = Encoding.UTF8.GetBytes($"Serialized {contentConfig.Name}: {mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml ({mappedItem.NodeGUID}) - {watch.ElapsedMilliseconds}ms"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); } }
public Home() { this.RequiresAuthentication(HttpContext.Current); Get("/index", parameters => { var bridgeCoreConfigs = BridgeConfiguration.GetConfig().CoreConfigs; var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs; var currentRequest = Request.Url; currentRequest.Path = (ConfigurationManager.AppSettings["BridgeBaseUrl"] ?? "/Admin/BridgeUI").ToString(); var model = new { coreConfigs = bridgeCoreConfigs, contentConfigs = bridgeContentConfigs, urlBase = currentRequest.ToString() }; return(View["Index", model]); }); Get("/about", parameters => "Hello from Bridge -|--|-"); //Get("/{all*}", parameters => //{ // //If you are having serious problems hitting anything, uncomment this // var test = Request; // return "catchall"; //}); }
protected override void OnStart(string[] args) { var config = BridgeConfiguration.GetConfig(); var presenceServiceEndPoint = new IPEndPoint(config.InternalServiceBinding.EndPoint.Address, config.PresenceBinding.ServicePort); var multicastReceiveEndPoint = new IPEndPoint(config.InternalServiceBinding.EndPoint.Address, config.PresenceBinding.CallbackPort); DumpConfig(config, presenceServiceEndPoint); bridge = new SquiggleBridge(config.InternalServiceBinding.EndPoint, config.ExternalServiceBinding.EndPoint, config.PresenceBinding.MulticastEndPoint, multicastReceiveEndPoint, presenceServiceEndPoint); foreach (Target target in config.Targets) { bridge.AddTarget(target.EndPoint); } bridge.Start(); }
private void _clearTempFolder() { try { //just trying to clean up some temp stuff from prev diffs string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; var tempRoot = this.GetRootPath($"{serializationFolder}/temp"); DirectoryInfo di = new DirectoryInfo(tempRoot); foreach (FileInfo file in di.EnumerateFiles()) { file.Delete(); } foreach (DirectoryInfo dir in di.EnumerateDirectories()) { dir.Delete(true); } } catch (Exception ex) { //keep moving } }
private void _processCoreConfig(BridgeCoreConfig coreConfig, Stream stream) { string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; var deserializer = new DeserializerBuilder().Build(); TreeProvider tree = new TreeProvider(MembershipContext.AuthenticatedUser); var watch = new Stopwatch(); //have this driven by config var serializationPath = $"{serializationFolder}/core/{coreConfig.Name}"; var classTypes = coreConfig.GetClassTypes(); var ignoreFields = coreConfig.GetIgnoreFields(); var allAllowedChildInfos = new List <AllowedChildClassInfo>(); int retryCount = 3; _processClasses(retryCount, allAllowedChildInfos, coreConfig.Name, stream, deserializer, watch, serializationPath, classTypes, ignoreFields); //at this point we should have all children, lets post process these foreach (var allowedChildClass in allAllowedChildInfos) { AllowedChildClassInfoProvider.SetAllowedChildClassInfo(allowedChildClass); } }
public Diff() { this.RequiresAuthentication(HttpContext.Current); Get("/diffcore/{id}", parameters => { var response = new Response(); response.ContentType = "text/plain"; response.Contents = stream => { var bridgeCoreConfigs = BridgeConfiguration.GetConfig().CoreConfigs; string configName = parameters.id; foreach (BridgeCoreConfig coreConfig in bridgeCoreConfigs) { if (configName.ToLower() == coreConfig.Name.ToLower()) { _processCoreConfig(coreConfig, stream); } } }; return(response); }); Get("/diffcontent/{id}", parameters => { var response = new Response(); response.ContentType = "text/plain"; response.Contents = stream => { var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs; string configName = parameters.id; foreach (BridgeContentConfig contentConfig in bridgeContentConfigs) { if (configName.ToLower() == contentConfig.Name.ToLower()) { _processContentConfig(contentConfig, stream); } } }; return(response); }); Get("/viewdiff", parameters => { var response = new Response(); response.ContentType = "text/plain"; response.Contents = stream => { var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs; string origFolder = Request.Query["origFolder"]; string tempFolder = Request.Query["tempFolder"]; string file = Request.Query["file"]; var origPath = this.GetRootPath($"{origFolder}/{file}"); var origYamlFileContents = File.ReadAllText(origPath); var tempPath = this.GetRootPath($"{tempFolder}/{file}"); var tempFileContents = File.ReadAllText(tempPath); var diffBuilder = new InlineDiffBuilder(new Differ()); var diff = diffBuilder.BuildDiffModel(origYamlFileContents, tempFileContents); foreach (var line in diff.Lines) { string linePrefix = ""; string lineSuffix = ""; switch (line.Type) { case ChangeType.Inserted: linePrefix = "K <strong>"; lineSuffix = "</strong>"; break; case ChangeType.Deleted: linePrefix = "F <em>"; lineSuffix = "</em>"; break; default: linePrefix = " "; lineSuffix = ""; break; } _outputToStream(stream, $"{linePrefix}{line.Text}{lineSuffix}"); } }; return(response); }); }
private void _processCoreConfig(BridgeCoreConfig coreConfig, Stream stream) { var serializer = new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull).Build(); string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; var watch = new Stopwatch(); _clearTempFolder(); watch.Start(); //have this driven by config var serializationPath = $"{serializationFolder}/core/{coreConfig.Name}"; var tempGUID = DateTime.Now.Ticks.ToString(); var tempSerializationPath = $"{serializationFolder}/temp/{tempGUID}/{coreConfig.Name}"; var classTypes = coreConfig.GetClassTypes(); var fieldsToIgnore = coreConfig.GetIgnoreFields(); ProviderHelper.ClearHashtables("cms.class", false); foreach (var classType in classTypes) { var dci = DataClassInfoProvider.GetDataClassInfo(classType); if (dci != null) { var mappedItem = dci.Adapt <BridgeClassInfo>(); mappedItem.FieldValues = new Dictionary <string, object>(); foreach (string columnName in dci.ColumnNames) { if (!fieldsToIgnore.Contains(columnName)) { var columnValue = dci.GetValue(columnName); mappedItem.FieldValues.Add(columnName, columnValue); } } var assignedSites = new List <Guid>(); foreach (SiteInfo assignedSite in dci.AssignedSites) { assignedSites.Add(assignedSite.SiteGUID); } mappedItem.AssignedSites = assignedSites; var allowedChildClasses = AllowedChildClassInfoProvider.GetAllowedChildClasses().Where("ParentClassID", QueryOperator.Equals, dci["ClassID"].ToString()).Column("ChildClassID").ToList(); var allowedChildrenTypes = new List <string>(); foreach (AllowedChildClassInfo allowedChildClass in allowedChildClasses) { var className = new ObjectQuery("cms.class").Where("ClassID", QueryOperator.Equals, allowedChildClass.ChildClassID).Column("ClassName").FirstOrDefault()["ClassName"].ToString(); allowedChildrenTypes.Add(className); } mappedItem.AllowedChildTypes = allowedChildrenTypes; var classQueries = QueryInfoProvider.GetQueries().Where("ClassID", QueryOperator.Equals, dci.ClassID).ToList(); var queries = new Dictionary <string, BridgeClassQuery>(); foreach (var classQuery in classQueries) { var bcq = classQuery.Adapt <BridgeClassQuery>(); queries.Add(classQuery.QueryName, bcq); } mappedItem.Queries = queries; var stringBuilder = new StringBuilder(); var res = serializer.Serialize(mappedItem); stringBuilder.AppendLine(res); var pathToMatching = $"{tempSerializationPath}/{mappedItem.ClassName.ToLower()}.yaml"; var tempPath = this.GetRootPath(pathToMatching); FileInfo file = new FileInfo(tempPath); file.Directory.Create(); // If the directory already exists, this method does nothing. File.WriteAllText(tempPath, res); } } watch.Stop(); _outputToStream(stream, $"Generating temp {coreConfig.Name} - {watch.ElapsedMilliseconds}ms"); _processDifferences(stream, watch, serializationPath, tempSerializationPath); }
/// <summary> /// Take whats in the database and serialize it /// </summary> public Serialize() { this.RequiresAuthentication(HttpContext.Current); Get("/serializecore/{id}", parameters => { var response = new Response(); response.ContentType = "text/plain"; response.Contents = stream => { var bridgeCoreConfigs = BridgeConfiguration.GetConfig().CoreConfigs; string configName = parameters.id; foreach (BridgeCoreConfig coreConfig in bridgeCoreConfigs) { if (configName.ToLower() == coreConfig.Name.ToLower()) { _processCoreConfig(coreConfig, stream); } byte[] bytes = Encoding.UTF8.GetBytes($"Completed serialize!"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); } }; return(response); }); Get("/serializecore", parameters => { var response = new Response(); response.ContentType = "text/plain"; response.Contents = stream => { var bridgeCoreConfigs = BridgeConfiguration.GetConfig().CoreConfigs; foreach (BridgeCoreConfig coreConfig in bridgeCoreConfigs) { _processCoreConfig(coreConfig, stream); } byte[] bytes = Encoding.UTF8.GetBytes($"Completed serialize!"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); }; return(response); }); Get("/serializecontent/{id}", parameters => { var response = new Response(); response.ContentType = "text/plain"; response.Contents = stream => { var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs; string configName = parameters.id; foreach (BridgeContentConfig contentConfig in bridgeContentConfigs) { if (configName.ToLower() == contentConfig.Name.ToLower()) { _processContentConfig(contentConfig, stream); } byte[] bytes = Encoding.UTF8.GetBytes($"Completed serialize!"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); } }; return(response); }); Get("/serializecontent", parameters => { var response = new Response(); response.ContentType = "text/plain"; response.Contents = stream => { var bridgeContentConfigs = BridgeConfiguration.GetConfig().ContentConfigs; foreach (BridgeContentConfig contentConfig in bridgeContentConfigs) { _processContentConfig(contentConfig, stream); } byte[] bytes = Encoding.UTF8.GetBytes($"Completed serialize!"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); }; return(response); }); }
private void _processContentConfing(BridgeContentConfig contentConfig, Stream stream) { string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; var deserializer = new DeserializerBuilder().Build(); TreeProvider tree = new TreeProvider(MembershipContext.AuthenticatedUser); var watch = new Stopwatch(); var serializationPath = $"{serializationFolder}/content/{contentConfig.Name}"; var pageTypes = contentConfig.GetPageTypes(); var ignoreFields = contentConfig.GetIgnoreFields(); var concretePath = this.GetRootPath(serializationPath); var yamlFiles = Directory.EnumerateFiles(concretePath, "*.yaml", SearchOption.AllDirectories); foreach (string yamlFile in yamlFiles) { watch.Reset(); watch.Start(); var yamlFileContent = File.ReadAllText(yamlFile); var bridgeTreeNode = deserializer.Deserialize <BridgeTreeNode>(yamlFileContent); if (pageTypes.Any(x => x.ToLower() == bridgeTreeNode.ClassName.ToLower())) { var treeNode = tree.SelectSingleNode(bridgeTreeNode.NodeGUID, bridgeTreeNode.DocumentCulture, bridgeTreeNode.NodeSiteName); if (treeNode != null) { if (bridgeTreeNode.FieldValues != null) { foreach (var fieldValue in bridgeTreeNode.FieldValues) { if (!ignoreFields.Contains(fieldValue.Key)) { treeNode.SetValue(fieldValue.Key, fieldValue.Value); } } treeNode.Update(); } } else { var nonSpecificCultureTreeNode = tree.SelectSingleNode(bridgeTreeNode.NodeGUID, null, bridgeTreeNode.NodeSiteName, true); if (nonSpecificCultureTreeNode != null) { // if we are in here, we have a version of the same page already, make it a culture variant if (bridgeTreeNode.FieldValues != null) { foreach (var fieldValue in bridgeTreeNode.FieldValues) { if (!ignoreFields.Contains(fieldValue.Key)) { nonSpecificCultureTreeNode.SetValue(fieldValue.Key, fieldValue.Value); } } } nonSpecificCultureTreeNode.InsertAsNewCultureVersion(bridgeTreeNode.DocumentCulture); } else { //else, we can assume this is a new page and insert var parentTreeNode = tree.SelectSingleNode(bridgeTreeNode.ParentNodeGUID.GetValueOrDefault(), bridgeTreeNode.DocumentCulture, bridgeTreeNode.NodeSiteName); var newTreeNode = TreeNode.New(bridgeTreeNode.ClassName, tree); if (bridgeTreeNode.FieldValues != null) { foreach (var fieldValue in bridgeTreeNode.FieldValues) { if (!ignoreFields.Contains(fieldValue.Key)) { newTreeNode.SetValue(fieldValue.Key, fieldValue.Value); } } } newTreeNode.Insert(parentTreeNode); } } byte[] bytes = Encoding.UTF8.GetBytes($"Synced {contentConfig.Name}: {yamlFile.Replace(concretePath, "")} - {watch.ElapsedMilliseconds}ms"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); } watch.Stop(); } }