/// <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); }
/// <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(); } }
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)); }
/// <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); } }
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(); }
/// <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)); } } }
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; //} }
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)))}]"); }
public static void Init(Form1 app, string token, ApiLogger logger) { eBayApi.app = app; eBayApi.token = token; eBayApi.logger = logger; }
/// <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(); }