public async Task <ApiResult> GetCodeGen([FromBody] JObject config)
        {
            try
            {
                RolesCheck.EnsureWriter(Request, _isLocal);
                Ensure.NotNull(config, "config");

                string queries = string.Join("\n", config.GetValue("query").ToString());

                var ruleDefinitionRaw  = config.Value <JArray>("rules");
                var ruleDefinitionList = ruleDefinitionRaw.ToObject <List <FlowGuiRule> >();
                var ruleDefinitions    = RuleDefinitionGenerator.GenerateRuleDefinitions(ruleDefinitionList, config.GetValue("name").ToString());

                RulesCode codeGen = CodeGen.GenerateCode(queries, ruleDefinitions, config.GetValue("name").ToString());

                await Task.Yield();

                return(ApiResult.CreateSuccess(codeGen.Code));
            }
            catch (Exception e)
            {
                _logger.LogError(e, e.Message);
                return(ApiResult.CreateError(e.Message));
            }
        }
Beispiel #2
0
        public void GenerateRuleDefinitionsTest()
        {
            var props = @"{$productId: '', $ruleType: 'SimpleRule', $ruleId: '', $ruleDescription: 'test'}";
            var ruleDefinitionList = new List <FlowGuiRule>
            {
                new FlowGuiRule()
                {
                    Id         = "test",
                    Type       = "test",
                    Properties = JObject.Parse(props)
                }
            };

            var actual = JArray.Parse(RuleDefinitionGenerator.GenerateRuleDefinitions(ruleDefinitionList, "test123"));

            Assert.AreEqual("test123", actual[0].Value <string>("$productId"));
            Assert.IsTrue(Guid.TryParse(actual[0].Value <string>("$ruleId"), out Guid newGuid));

            props = @"{$productId: '', $ruleType: 'SimpleRule', $ruleId: '12345', $ruleDescription: 'test'}";
            ruleDefinitionList = new List <FlowGuiRule>
            {
                new FlowGuiRule()
                {
                    Id         = "test",
                    Type       = "test",
                    Properties = JObject.Parse(props)
                }
            };

            actual = JArray.Parse(RuleDefinitionGenerator.GenerateRuleDefinitions(ruleDefinitionList, "test123"));

            Assert.AreEqual("test123", actual[0].Value <string>("$productId"));
            Assert.AreEqual("12345", actual[0].Value <string>("$ruleId"));
        }
        /// <summary>
        /// Generate and set the info for the transform file which will be used to generate JobConfig
        /// </summary>
        /// <returns></returns>
        public override async Task <string> Process(FlowDeploymentSession flowToDeploy)
        {
            var config    = flowToDeploy.Config;
            var guiConfig = config?.GetGuiConfig();

            if (guiConfig == null)
            {
                return("no gui input, skipped.");
            }
            string queries = string.Join("\n", guiConfig.Process?.Queries);

            string    ruleDefinitions = RuleDefinitionGenerator.GenerateRuleDefinitions(guiConfig.Rules, config.Name);
            RulesCode rulesCode       = CodeGen.GenerateCode(queries, ruleDefinitions, config.Name);

            Ensure.NotNull(rulesCode, "rulesCode");

            // Save the rulesCode object for downstream processing
            flowToDeploy.SetAttachment(AttachmentName_CodeGenObject, rulesCode);

            var runtimeKeyVaultName = flowToDeploy.GetTokenString(PortConfigurationSettings.TokenName_RuntimeKeyVaultName);

            Ensure.NotNull(runtimeKeyVaultName, "runtimeKeyVaultName");

            var secretName = $"{config.Name}-transform";

            Configuration.TryGet(Constants.ConfigSettingName_SparkType, out string sparkType);
            var uriPrefix           = KeyVaultClient.GetUriPrefix(sparkType);
            var transformFileSecret = SecretUriParser.ComposeUri(runtimeKeyVaultName, secretName, uriPrefix);

            flowToDeploy.SetStringToken(TokenName_TransformFile, transformFileSecret);

            await Task.CompletedTask;

            return("done");
        }
        public override async Task <string> Process(FlowDeploymentSession flowToDeploy)
        {
            var config    = flowToDeploy.Config;
            var guiConfig = config?.GetGuiConfig();

            if (guiConfig == null)
            {
                return("no gui input, skipped.");
            }
            string queries = string.Join("\n", guiConfig.Process?.Queries);

            string    ruleDefinitions = RuleDefinitionGenerator.GenerateRuleDefinitions(guiConfig.Rules, config.Name);
            RulesCode rulesCode       = CodeGen.GenerateCode(queries, ruleDefinitions, config.Name);

            Ensure.NotNull(rulesCode, "rulesCode");

            // Save the rulesCode object for downstream processing
            flowToDeploy.SetAttachment(AttachmentName_CodeGenObject, rulesCode);

            var runtimeConfigBaseFolder = flowToDeploy.GetTokenString(PrepareJobConfigVariables.TokenName_RuntimeConfigFolder);

            Ensure.NotNull(runtimeConfigBaseFolder, "runtimeConfigBaseFolder");

            var runtimeKeyVaultName = flowToDeploy.GetTokenString(PortConfigurationSettings.TokenName_RuntimeKeyVaultName);

            Ensure.NotNull(runtimeKeyVaultName, "runtimeKeyVaultName");

            var filePath          = ResourcePathUtil.Combine(runtimeConfigBaseFolder, $"{config.Name}-combined.txt");
            var transformFilePath = await RuntimeStorage.SaveFile(filePath, rulesCode.Code);

            var secretName          = $"{config.Name}-transform";
            var transformFileSecret = await KeyVaultClient.SaveSecretAsync(runtimeKeyVaultName, secretName, transformFilePath);

            flowToDeploy.SetStringToken(TokenName_TransformFile, transformFileSecret);

            return("done");
        }