/// <summary>
        /// Processes the response.
        /// </summary>
        /// <param name="url">The URL.</param>
        /// <param name="ex">The ex.</param>
        public Exception ProcessException(string url, Exception ex)
        {
            var innerEx = GetInnerException(ex);

            ApiLogger.Error(innerEx, $"{url}");
            return(innerEx);
        }
예제 #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="callname"></param>
        /// <param name="logger"></param>
        /// <param name="metricsList"></param>
        private void GenerateReportPerCallname(string callname, ApiLogger logger, ArrayList metricsList)
        {
            mLogger = logger;
            Log("Call name: " + callname);
            Log("Number of calls recorded: " + metricsList.Count);
            Log("Total     Setup     Network   Server    Finish    Start Time          ");
            Log("======================================================================");
            for (int i = 0; i < metricsList.Count; i++)
            {
                CallMetricsEntry metrics = (CallMetricsEntry)metricsList[i];
                metrics.GenerateReport(logger);
            }
            string avgstring = "";

            if (metricsList.Count > 0)
            {
                long[] averages = GenerateAverage(metricsList);
                for (int i = 0; i < averages.Length; i++)
                {
                    avgstring += CallMetricsEntry.FormatNumber(averages[i]);
                }
            }
            Log("Average : ");
            Log(avgstring);
            Log("======================================================================");
        }
        public WE_T_API_LOG MapModelToEntity(ApiLogger obj)
        {
            if (obj != null)
            {
                return(new WE_T_API_LOG
                {
                    ID = obj.Id,
                    APPLICATION = obj.Application,
                    REQUEST_USER = obj.User,
                    MACHINE = obj.Machine,
                    REQUEST_IP_ADDRESS = obj.RequestIpAddress,
                    REQUEST_CONTENT_TYPE = obj.RequestContentType,
                    REQUEST_CONTENT_BODY = obj.RequestContentBody,
                    REQUEST_URI = obj.RequestUri,
                    REQUEST_METHOD = obj.RequestMethod,
                    REQUEST_ROUTE_TEMPLATE = obj.RequestRouteTemplate,
                    REQUEST_ROUTE_DATA = obj.RequestRouteData,
                    REQUEST_HEADERS = obj.RequestHeaders,
                    REQUEST_DATETIME = obj.RequestTimestamp,
                    RESPONSE_CONTENT_TYPE = obj.ResponseContentType,
                    RESPONSE_CONTENT_BODY = obj.ResponseContentBody,
                    RESPONSE_STATUS_CODE = obj.ResponseStatusCode,
                    RESPONSE_HEADERS = obj.ResponseHeaders,
                    RESPONSE_DATETIME = obj.ResponseTimestamp,
                    API_EXCEPTION_ID = obj.ExceptionId,
                    CORRELATION_ID = obj.CorrelationId,
                    FIELDJOB_ID = obj.FieldJobId,
                    WORKPACKET_ID = obj.WorkPacketId,
                    WORKREQUEST_ID = obj.WorkRequestId
                });
            }

            return(null);
        }
        public void UpdateLog(ApiLogger app)
        {
            var apiLog = unitOfWork.ApiLogRepo.GetSingle(m => m.ID == app.Id);

            if (apiLog != null)
            {
                apiLog.APPLICATION            = app.Application.Truncate(50);
                apiLog.REQUEST_USER           = app.User.Truncate(50);
                apiLog.MACHINE                = app.Machine.Truncate(50);
                apiLog.REQUEST_IP_ADDRESS     = app.RequestIpAddress.Truncate(50);
                apiLog.REQUEST_CONTENT_TYPE   = app.RequestContentType.Truncate(250);
                apiLog.REQUEST_CONTENT_BODY   = app.RequestContentBody;
                apiLog.REQUEST_URI            = app.RequestUri.Truncate(500);
                apiLog.REQUEST_METHOD         = app.RequestMethod.Truncate(20);
                apiLog.REQUEST_ROUTE_TEMPLATE = app.RequestRouteTemplate.Truncate(500);
                apiLog.REQUEST_ROUTE_DATA     = app.RequestRouteData.Truncate(1000);
                apiLog.REQUEST_HEADERS        = app.RequestHeaders.Truncate(1000);
                apiLog.REQUEST_DATETIME       = app.RequestTimestamp;
                apiLog.RESPONSE_CONTENT_TYPE  = app.ResponseContentType.Truncate(250);
                apiLog.RESPONSE_CONTENT_BODY  = app.ResponseContentBody;
                apiLog.RESPONSE_STATUS_CODE   = app.ResponseStatusCode;
                apiLog.RESPONSE_HEADERS       = app.ResponseHeaders.Truncate(1000);
                apiLog.RESPONSE_DATETIME      = app.ResponseTimestamp;
                apiLog.API_EXCEPTION_ID       = app.ExceptionId;
                apiLog.CORRELATION_ID         = app.CorrelationId;
                apiLog.FIELDJOB_ID            = app.FieldJobId;
                apiLog.WORKPACKET_ID          = app.WorkPacketId;
                apiLog.WORKREQUEST_ID         = app.WorkRequestId;

                unitOfWork.ApiLogRepo.Update(apiLog);
                unitOfWork.Save();
            }
        }
예제 #5
0
        public async Task <IActionResult> RequestApiData([FromBody] string urlRequest)
        {
            ApiLogger apiLog = new ApiLogger();

            apiLog.Id          = Guid.NewGuid();
            apiLog.RequestUrl  = _apiConfig.Value.apiBase + urlRequest;
            apiLog.RequestDate = DateTime.Now;

            ApiCaller apiCaller = new ApiCaller();

            apiLog.ResponseContent = await apiCaller.CallApi(apiLog.RequestUrl);

            apiLog.ResponseDate = DateTime.Now;

            using (_context)
            {
                try
                {
                    await _context.ApiLogger.AddAsync(apiLog);

                    await _context.SaveChangesAsync();
                }
                catch (Exception e)
                {
                    return(BadRequest(e.Message));
                }
            }

            return(Ok(apiLog.ResponseContent));
        }
예제 #6
0
        /// <summary>
        ///
        /// </summary>
        public void GenerateReport(ApiLogger logger)
        {
            ICollection keyCollection = mMetricsTable.Keys;

            foreach (string callname in keyCollection)
            {
                ArrayList metricsList = (ArrayList)mMetricsTable[callname];
                GenerateReportPerCallname(callname, logger, metricsList);
            }
        }
예제 #7
0
        public void ShouldPostRequest()
        {
            //Arrange
            var logger = new ApiLogger("http://postb.in/b/Tgix0BIX", null, LogLevel.Trace);

            //Act
            logger.Error("Checking error");
            //Assert
            Assert.True(true);
        }
 /// <summary>
 /// Processes the response.
 /// </summary>
 /// <param name="url">The URL.</param>
 /// <param name="response">The response.</param>
 /// <param name="data">The data.</param>
 public void ProcessResponse(string url, HttpResponseMessage response, string data, string loglevel = "Debug")
 {
     if (loglevel.ToUpper() == "INFO")
     {
         ApiLogger.Info($"{url}\n-[{(int)response.StatusCode}][data:{data ?? string.Empty}]");
     }
     else
     {
         ApiLogger.Debug($"{url}\n-[{(int)response.StatusCode}][data:{data ?? string.Empty}]");
     }
     response.EnsureSuccessStatusCode();
 }
예제 #9
0
        /// <summary>
        /// Generates the call metrics information about the API call that was made.
        /// </summary>
        public void GenerateReport(ApiLogger logger)
        {
//			logger.RecordMessage(FormatMsec(mApiCallStarted) +
//				FormatMsec(mNetworkSendStarted) +
//				FormatNumber(ServerProcessingTime > 0? ServerProcessingTime: -1) +
//				FormatMsec(mNetworkReceiveEnded) +
//				FormatMsec(mApiCallEnded) +
//				FormatString(ApiCallStarted.ToString("yyyy'-'MM'-'dd HH':'mm':'ss'.'fff"), 25),
//				MessageSeverity.Informational);
            logger.RecordMessage(FormatNumber(TurnaroundTime) +
                                 FormatNumber(CallInitTime) +
                                 FormatNumber(NetworkTime) +
                                 FormatNumber(ServerProcessingTime > 0? ServerProcessingTime: -1) +
                                 FormatNumber(CallFinishTime) +
                                 FormatString(ApiCallStarted.ToString("yyyy'-'MM'-'dd HH':'mm':'ss'.'fff"), 25),
                                 MessageSeverity.Informational);
        }
        public async Task <IActionResult> GetAll()
        {
            ApiLogger.Info("Getting all customers!");
            using (var customerService = new CustomerService(ApiLogger, new UnitOfWork(ApiLogger, SalesContext), Mapper))
            {
                try
                {
                    await Task.Delay(1000);

                    var customers = await customerService.LoadAllCustomersAsync();

                    return(Ok(customers));
                } catch (Exception ex)
                {
                    ApiLogger.Error("Error while getting all customers!", ex: ex);
                    return(StatusCode(500));
                }
            }
        }
예제 #11
0
        public async Task <IActionResult> GetAll()
        {
            ApiLogger.Info("Getting all available apps!");
            using (var appService = new AppService(ApiLogger, new UnitOfWork(ApiLogger, SalesContext), Mapper))
            {
                try
                {
                    await Task.Delay(2000);

                    var apps = await appService.LoadAllAppsAsync();

                    return(Ok(apps));
                }
                catch (Exception ex)
                {
                    ApiLogger.Error("Error while getting all apps!", ex: ex);
                    return(StatusCode(500));
                }
            }
        }
        public long InsertLog(ApiLogger app)
        {
            //try {
            var newexception = MapModelToEntity(app);

            unitOfWork.ApiLogRepo.Insert(newexception);
            unitOfWork.Save();

            return(newexception.ID);
            //} catch (System.Data.Entity.Validation.DbEntityValidationException e) {
            //    foreach (var eve in e.EntityValidationErrors) {
            //        Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
            //            eve.Entry.Entity.GetType().Name, eve.Entry.State);
            //        foreach (var ve in eve.ValidationErrors) {
            //            Console.WriteLine("- Property: \"{0}\", Error: \"{1}\"",
            //                ve.PropertyName, ve.ErrorMessage);
            //        }
            //    }
            //    throw;
            //}
        }
예제 #13
0
        public async Task <IActionResult> GetLog(string urlRequest)
        {
            ApiLogger apiLog = new ApiLogger();

            apiLog.Id          = Guid.NewGuid();
            apiLog.RequestUrl  = _apiConfig.Value.apiBase + urlRequest;
            apiLog.RequestDate = DateTime.Now;

            using (_context)
            {
                try
                {
                    var dbResponse = _context.ApiLogger.Where(api =>
                                                              api.RequestUrl == apiLog.RequestUrl &&
                                                              api.ResponseDate >= DateTime.Now.AddMinutes(-60))
                                     .OrderByDescending(api => api.ResponseDate)
                                     .FirstOrDefault();

                    if (dbResponse != null)
                    {
                        return(Ok(dbResponse.ResponseContent));
                    }

                    ApiCaller apiCaller = new ApiCaller();
                    apiLog.ResponseContent = await apiCaller.CallApi(apiLog.RequestUrl);

                    apiLog.ResponseDate = DateTime.Now;

                    await _context.ApiLogger.AddAsync(apiLog);

                    await _context.SaveChangesAsync();
                }
                catch (Exception e)
                {
                    return(BadRequest(e.Message));
                }
            }

            return(Ok(apiLog.ResponseContent));
        }
 /// <summary>
 /// Processes the response.
 /// </summary>
 /// <param name="url">The URL.</param>
 /// <param name="data">The data.</param>
 public void ProcessRequest(string url, object data)
 {
     ApiLogger.Debug($"{url}\n-[data:{(data == null ? string.Empty : HidePd(JsonConvert.SerializeObject(data)))}]");
 }
예제 #15
0
 public static void Init(Form1 app, string token, ApiLogger logger)
 {
     eBayApi.app    = app;
     eBayApi.token  = token;
     eBayApi.logger = logger;
 }
예제 #16
0
        /// <summary>
        /// This method gets called by the runtime. Use this method to add services to the container.
        /// </summary>
        /// <param name="services"></param>
        public void ConfigureServices(IServiceCollection services)
        {
            ApiLogger.Configure();              //使用前先配置
            ApiAuthentication.Authentication(); //加载token配置

            //配置跨域处理
            services.AddCors(options =>
            {
                options.AddPolicy("any", builder =>
                {
                    builder.AllowAnyOrigin() //允许任何来源的主机访问
                    .AllowAnyMethod()
                    .AllowAnyHeader()
                    .AllowCredentials();//指定处理cookie
                });
            });
            //配置Swagger
            services.AddSwaggerGen(c =>
            {
                c.SwaggerDoc("base", new OpenApiInfo
                {
                    Version     = "base",
                    Title       = "基础模块API",
                    Description = "沐阳信息服务接口平台(多模式管理,右上角切换)",
                    Contact     = new OpenApiContact {
                        Name = "Fatefox", Email = "*****@*****.**"
                    }
                });
                c.SwaggerDoc("service", new OpenApiInfo {
                    Title = "服务模块API", Version = "service"
                });
                c.SwaggerDoc("mom", new OpenApiInfo {
                    Title = "业务模块API", Version = "YW"
                });
                c.SwaggerDoc("dm", new OpenApiInfo {
                    Title = "其他模块API", Version = "QT"
                });

                //设置要展示的接口
                c.DocInclusionPredicate((docName, apiDes) =>
                {
                    if (!apiDes.TryGetMethodInfo(out MethodInfo method))
                    {
                        return(false);
                    }

                    /*使用ApiExplorerSettingsAttribute里面的GroupName进行特性标识
                     * DeclaringType只能获取controller上的特性
                     * 我们这里是想以action的特性为主
                     * */
                    var version = method.DeclaringType.GetCustomAttributes(true).OfType <ApiExplorerSettingsAttribute>().Select(m => m.GroupName);
                    if (docName == "v1" && !version.Any())
                    {
                        return(true);
                    }
                    //这里获取action的特性
                    var actionVersion = method.GetCustomAttributes(true).OfType <ApiExplorerSettingsAttribute>().Select(m => m.GroupName);
                    if (actionVersion.Any())
                    {
                        return(actionVersion.Any(v => v == docName));
                    }
                    return(version.Any(v => v == docName));
                });
                //添加授权
                c.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme
                {
                    Description  = "请输入带有Bearer开头的Token",
                    Name         = "Authorization",
                    Type         = SecuritySchemeType.ApiKey,
                    Scheme       = "Bearer",
                    BearerFormat = "JWT",
                    In           = ParameterLocation.Header,
                });
                //认证方式,此方式为全局添加
                c.AddSecurityRequirement(new OpenApiSecurityRequirement
                {
                    { new OpenApiSecurityScheme
                      {
                          Reference = new OpenApiReference()
                          {
                              Id   = "Bearer",
                              Type = ReferenceType.SecurityScheme
                          }
                      }, Array.Empty <string>() }
                });
                //c.OperationFilter<WebUserAPI.Common.AssignOperationVendorExtensions>();
                //设置SjiggJSON和UI的注释路径.
                // 为 Swagger JSON and UI设置xml文档注释路径
                var basePath = Path.GetDirectoryName(typeof(Program).Assembly.Location);
                var xmlPath  = Path.Combine(basePath, "MooyongSwagger.xml");
                //var xmlFile = $"{Assembly.GetExecutingAssembly().GetName().Name}.XML";
                //var xmlmodelPath = Path.Combine(basePath, xmlFile);//添加model注释
                //c.IncludeXmlComments(xmlmodelPath);
                c.IncludeXmlComments(xmlPath, true);//controller注释;必须放最后,否则后面的会覆盖前面的
            });
            // 将异常过滤器注入到容器中
            services.AddScoped <GlobalExceptionFilter>();

            services.AddControllers()
            .AddJsonOptions(configure => {
                //设置日期返回格式
                configure.JsonSerializerOptions.Converters.Add(new DatetimeJsonConverter());
            });
            services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
            .AddJwtBearer(option =>
            {
                option.RequireHttpsMetadata = false;
                option.SaveToken            = true;
                var token = Configuration.GetSection("tokenParameter").Get <TokenParameter>();
                option.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(Encoding.ASCII.GetBytes(token.Secret)),
                    ValidIssuer      = token.Issuer,
                    ValidateIssuer   = true,
                    ValidateAudience = false,
                    ClockSkew        = TimeSpan.Zero,/*token过期时钟偏差,默认是5分钟*/
                };
            });
            services.AddMvc();
        }