示例#1
0
    public override void ParseScopeValue(ParseScopeContext scopeContext)
    {
        const string transactionScopeName   = "transaction";
        const string separator              = ":";
        const string transactionScopePrefix = transactionScopeName + separator;

        var scopeValue = scopeContext.RawValue;

        if (scopeValue.StartsWith(transactionScopePrefix))
        {
            // we get in here with a scope like "transaction:something"
            var parts = scopeValue.Split(separator, StringSplitOptions.RemoveEmptyEntries);
            if (parts.Length == 2)
            {
                scopeContext.SetParsedValues(transactionScopeName, parts[1]);
            }
            else
            {
                scopeContext.SetError("transaction scope missing transaction parameter value");
            }
        }
        else if (scopeValue != transactionScopeName)
        {
            // we get in here with a scope not like "transaction"
            base.ParseScopeValue(scopeContext);
        }
        else
        {
            // we get in here with a scope exactly "transaction", which is to say we're ignoring it
            // and not including it in the results
            scopeContext.SetIgnore();
        }
    }
        /// <inheritdoc/>
        public ParsedScopesResult ParseScopeValues(IEnumerable <string> scopeValues)
        {
            if (scopeValues == null)
            {
                throw new ArgumentNullException(nameof(scopeValues));
            }

            var result = new ParsedScopesResult();

            foreach (var scopeValue in scopeValues)
            {
                var ctx = new ParseScopeContext(scopeValue);
                ParseScopeValue(ctx);

                if (ctx.Succeeded)
                {
                    var parsedScope = ctx.ParsedName != null ?
                                      new ParsedScopeValue(ctx.RawValue, ctx.ParsedName, ctx.ParsedParameter) :
                                      new ParsedScopeValue(ctx.RawValue);

                    result.ParsedScopes.Add(parsedScope);
                }
                else if (!ctx.Ignore)
                {
                    result.Errors.Add(new ParsedScopeValidationError(scopeValue, ctx.Error));
                }
                else
                {
                    _logger.LogDebug("Scope parsing ignoring scope {scope}", scopeValue);
                }
            }

            return(result);
        }
示例#3
0
    /// <inheritdoc/>
    public ParsedScopesResult ParseScopeValues(IEnumerable <string> scopeValues)
    {
        using var activity = Tracing.ValidationActivitySource.StartActivity("DefaultScopeParser.ParseScopeValues");
        activity?.SetTag(Tracing.Properties.Scope, scopeValues.ToSpaceSeparatedString());

        if (scopeValues == null)
        {
            throw new ArgumentNullException(nameof(scopeValues));
        }

        var result = new ParsedScopesResult();

        foreach (var scopeValue in scopeValues)
        {
            var ctx = new ParseScopeContext(scopeValue);
            ParseScopeValue(ctx);

            if (ctx.Succeeded)
            {
                var parsedScope = ctx.ParsedName != null ?
                                  new ParsedScopeValue(ctx.RawValue, ctx.ParsedName, ctx.ParsedParameter) :
                                  new ParsedScopeValue(ctx.RawValue);

                result.ParsedScopes.Add(parsedScope);
            }
            else if (!ctx.Ignore)
            {
                result.Errors.Add(new ParsedScopeValidationError(scopeValue, ctx.Error));
            }
            else
            {
                _logger.LogDebug("Scope parsing ignoring scope {scope}", scopeValue);
            }
        }

        return(result);
    }
 /// <summary>
 /// Parses a scope value.
 /// </summary>
 /// <param name="scopeContext"></param>
 /// <returns></returns>
 public virtual void ParseScopeValue(ParseScopeContext scopeContext)
 {
     // nop leaves the raw scope value as a success result.
 }