public void SetVariable(string name, string value, bool isSecret = false, bool isOutput = false, bool isFilePath = false)
        {
            ArgUtil.NotNullOrEmpty(name, nameof(name));

            if (isFilePath && Container != null)
            {
                value = Container.TranslateToContainerPath(value);
            }

            if (isOutput || OutputVariables.Contains(name))
            {
                _record.Variables[name] = new VariableValue()
                {
                    Value    = value,
                    IsSecret = isSecret
                };
                _jobServerQueue.QueueTimelineRecordUpdate(_mainTimelineId, _record);

                ArgUtil.NotNullOrEmpty(_record.RefName, nameof(_record.RefName));
                Variables.Set($"{_record.RefName}.{name}", value, secret: isSecret);
            }
            else
            {
                Variables.Set(name, value, secret: isSecret);
            }
        }
Beispiel #2
0
 public object this[string name]
 {
     get
     {
         if (OutputVariables.ContainsKey(name))
         {
             return(OutputVariables[name]);
         }
         return(null);
     }
 }
Beispiel #3
0
        /// <summary>
        /// The statistics related to the variables and computations in this block
        /// </summary>
        public Dictionary <string, string> GetStatistics()
        {
            var stats = new Dictionary <string, string>();

            var inputVarsTotalCount  = _inputVariables.Count;
            var inputVarsUsedCount   = _inputVariables.Count(inputVar => inputVar.IsUsed);
            var inputVarsUnUsedCount = inputVarsTotalCount - inputVarsUsedCount;

            stats.Add("Used Input Variables: ", inputVarsUsedCount.ToString());
            stats.Add("Unused Input Variables: ", inputVarsUnUsedCount.ToString());
            stats.Add("Total Input Variables: ", inputVarsTotalCount.ToString());

            var tempVarsCount           = TempVariables.Count();
            var tempVarsSubExprCount    = TempVariables.Count(item => item.IsFactoredSubExpression);
            var tempVarsNonSubExprCount = tempVarsCount - tempVarsSubExprCount;

            stats.Add("Common Subexpressions Temp Variables: ", tempVarsSubExprCount.ToString());
            stats.Add("Generated Temp Variables: ", tempVarsNonSubExprCount.ToString());
            stats.Add("Total Temp Variables: ", tempVarsCount.ToString());

            stats.Add("Total Output Variables: ", OutputVariables.Count().ToString());

            stats.Add("Total Computed Variables: ", ComputedVariables.Count.ToString());

            stats.Add("Target Temp Variables: ", TargetTempVarsCount.ToString());

            var computationsCountTotal =
                ComputedVariables
                .Select(computedVar => computedVar.RhsExpr.ComputationsCount)
                .Sum();

            var computationsCountAverage =
                computationsCountTotal / (double)ComputedVariables.Count;

            stats.Add("Avg. Computations Count: ", computationsCountAverage.ToString("0.000"));
            stats.Add("Total Computations Count: ", computationsCountTotal.ToString());

            var memreadsCountTotal =
                ComputedVariables
                .Select(computedVar => computedVar.RhsVariablesCount)
                .Sum();

            var memreadsCountAverage =
                memreadsCountTotal / (double)ComputedVariables.Count;

            stats.Add("Avg. Memory Reads: ", memreadsCountAverage.ToString("0.000"));
            stats.Add("Total Memory Reads: ", memreadsCountTotal.ToString());

            return(stats);
        }
Beispiel #4
0
        /// <summary>
        /// Try to get an input variable by its low-level name
        /// </summary>
        /// <param name="lowLevelVarName"></param>
        /// <param name="outputVar"></param>
        /// <returns></returns>
        public bool TryGetOutputVariable(string lowLevelVarName, out GMacCbOutputVariable outputVar)
        {
            if (VariablesDictionary.Count == 0)
            {
                outputVar = OutputVariables.FirstOrDefault(item => item.LowLevelName == lowLevelVarName);
                return(outputVar != null);
            }

            GMacCbVariable result;

            if (VariablesDictionary.TryGetValue(lowLevelVarName, out result) == false)
            {
                outputVar = null;
                return(false);
            }

            outputVar = result as GMacCbOutputVariable;
            return(outputVar != null);
        }
Beispiel #5
0
        /// <summary>
        /// The statistics related to the variables and computations in this block as a single string
        /// </summary>
        /// <returns></returns>
        public string GetStatisticsReport()
        {
            var s = new StringBuilder();

            var inputVarsTotalCount  = _inputVariables.Count;
            var inputVarsUsedCount   = _inputVariables.Count(inputVar => inputVar.IsUsed);
            var inputVarsUnUsedCount = inputVarsTotalCount - inputVarsUsedCount;

            s.Append("Input Variables: ")
            .Append(inputVarsUsedCount)
            .Append(" used, ")
            .Append(inputVarsUnUsedCount)
            .Append(" not used, ")
            .Append(inputVarsTotalCount)
            .AppendLine(" total.")
            .AppendLine();

            var tempVarsCount           = TempVariables.Count();
            var tempVarsSubExprCount    = TempVariables.Count(item => item.IsFactoredSubExpression);
            var tempVarsNonSubExprCount = tempVarsCount - tempVarsSubExprCount;

            s.Append("Temp Variables: ")
            .Append(tempVarsSubExprCount)
            .Append(" sub-expressions, ")
            .Append(tempVarsNonSubExprCount)
            .Append(" generated temps, ")
            .Append(tempVarsCount)
            .AppendLine(" total.")
            .AppendLine();

            if (TargetTempVarsCount > 0)
            {
                s.Append("Target Temp Variables: ")
                .Append(TargetTempVarsCount)
                .AppendLine(" total.")
                .AppendLine();
            }

            var outputVarsCount = OutputVariables.Count();

            s.Append("Output Variables: ")
            .Append(outputVarsCount)
            .AppendLine(" total.")
            .AppendLine();

            var computationsCountTotal =
                ComputedVariables
                .Select(computedVar => computedVar.RhsExpr.ComputationsCount)
                .Sum();

            var computationsCountAverage =
                computationsCountTotal / (double)ComputedVariables.Count;

            s.Append("Computations: ")
            .Append(computationsCountAverage)
            .Append(" average, ")
            .Append(computationsCountTotal)
            .AppendLine(" total.")
            .AppendLine();

            var memreadsCountTotal =
                ComputedVariables
                .Select(computedVar => computedVar.RhsVariablesCount)
                .Sum();

            var memreadsCountAverage =
                memreadsCountTotal / (double)ComputedVariables.Count;

            s.Append("Memory Reads: ")
            .Append(memreadsCountAverage)
            .Append(" average, ")
            .Append(memreadsCountTotal)
            .AppendLine(" total.")
            .AppendLine();

            s.Append("Memory Writes: ")
            .Append(ComputedVariables.Count)
            .AppendLine(" total.")
            .AppendLine();

            return(s.ToString());
        }
Beispiel #6
0
 public void Add(string name, object value)
 {
     OutputVariables.Add(name, value);
 }