Exemplo n.º 1
0
        private object[] GetArguments(InteractiveDiagnosticMethod method, dynamic query)
        {
            var arguments = new List <object>();

            foreach (var argument in method.Arguments)
            {
                arguments.Add(this.ConvertArgument((string)query[argument.Item1].Value, argument.Item2));
            }

            return(arguments.ToArray());
        }
Exemplo n.º 2
0
        public InteractiveModule(IRequestTracing sessionProvider, IInteractiveDiagnostics interactiveDiagnostics)
            : base("/interactive")
        {
            this.interactiveDiagnostics = interactiveDiagnostics;

            Get["/"] = _ => View["InteractiveDiagnostics"];

            Get["/providers"] = _ =>
            {
                var providers = this.interactiveDiagnostics
                                .AvailableDiagnostics
                                .Select(p => new { p.Name, p.Description, Type = p.GetType().Name, p.GetType().Namespace, Assembly = p.GetType().Assembly.GetName().Name })
                                .ToArray();

                return(Response.AsJson(providers));
            };

            Get["/providers/{providerName}"] = ctx =>
            {
                InteractiveDiagnostic diagnostic = this.interactiveDiagnostics.GetDiagnostic(ctx.providerName);

                if (diagnostic == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                var methods = diagnostic.Methods
                              .Select(m => new
                {
                    m.MethodName,
                    ReturnType = m.ReturnType.ToString(),
                    m.Description,
                    Arguments = m.Arguments.Select(a => new
                    {
                        ArgumentName = a.Item1,
                        ArgumentType = a.Item2.ToString()
                    })
                })
                              .ToArray();

                return(Response.AsJson(methods));
            };

            Get["/providers/{providerName}/{methodName}"] = ctx =>
            {
                InteractiveDiagnosticMethod method = this.interactiveDiagnostics.GetMethod(ctx.providerName, ctx.methodName);

                if (method == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                object[] arguments = this.GetArguments(method, this.Request.Query);

                return(Response.AsJson(new { Result = this.interactiveDiagnostics.ExecuteDiagnostic(method, arguments) }));
            };

            Get["/templates/{providerName}/{methodName}"] = ctx =>
            {
                InteractiveDiagnosticMethod method = this.interactiveDiagnostics.GetMethod(ctx.providerName, ctx.methodName);

                if (method == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                var template = this.interactiveDiagnostics.GetTemplate(method);

                if (template == null)
                {
                    return(HttpStatusCode.NotFound);
                }

                return(template);
            };
        }
Exemplo n.º 3
0
        private static object[] GetArguments(InteractiveDiagnosticMethod method, dynamic query)
        {
            var arguments = new List<object>();

            foreach (var argument in method.Arguments)
            {
                arguments.Add(ConvertArgument((string)query[argument.Item1].Value, argument.Item2));
            }

            return arguments.ToArray();
        }