C#.Net Mvc运营监控,计算方法/接口/action/页面执行时间

1、建立一个TimingActionFilter过滤器

2、代码如下:

public class TimingActionFilter : ActionFilterAttribute
    {
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            GetTimer(filterContext, "action").Start();
            base.OnActionExecuting(filterContext);
        }
        public override void OnActionExecuted(ActionExecutedContext filterContext)
        {
            GetTimer(filterContext, "action").Stop();
            base.OnActionExecuted(filterContext);
        }
        public override void OnResultExecuted(ResultExecutedContext filterContext)
        {
            var renderTimer = GetTimer(filterContext, "render");
            renderTimer.Stop();
            var actionTimer = GetTimer(filterContext, "action");
            if (actionTimer.ElapsedMilliseconds >= 100 || renderTimer.ElapsedMilliseconds >= 100)
            {
                LogHelper.WriteLog("运营监控(" + filterContext.RouteData.Values["controller"] + ")", String.Format(
                        "【{0}】-【{1}】,执行:{2}ms,渲染:{3}ms",
                        filterContext.RouteData.Values["controller"],
                        filterContext.RouteData.Values["action"],
                        actionTimer.ElapsedMilliseconds,
                        renderTimer.ElapsedMilliseconds
                    ));
            }
            base.OnResultExecuted(filterContext);
        }
        public override void OnResultExecuting(ResultExecutingContext filterContext)
        {
            GetTimer(filterContext, "render").Start();
            base.OnResultExecuting(filterContext);
        }
        private Stopwatch GetTimer(ControllerContext context, string name)
        {
            string key = "__timer__" + name;
            if (context.HttpContext.Items.Contains(key))
            {
                return (Stopwatch)context.HttpContext.Items[key];
            }

            var result = new Stopwatch();
            context.HttpContext.Items[key] = result;
            return result;
        }
    }

其中LogHelper.WriteLog是我的写日志文件通用类,修改成你自己的即可。

3、给controller或action加上特性

4、执行时间或渲染时间大于100ms会被记录下来

我这里有好几次执行时间7、800ms是因为每次重新生成项目,所以第一次会这么慢,这种不管它就是了:)

时间: 2024-10-26 16:46:31

C#.Net Mvc运营监控,计算方法/接口/action/页面执行时间的相关文章

ASP.NET MVC 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁

在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检查,看是用户输入的内容是否有危险的sql.如果每个地方都要加有几个缺点: 1.工作量大 2.容易遗漏 3.不容易维护 下面我通过写一个过滤防止sql的特性类,对Action执行前对Action的参数进行处理,如果有其值有sql语句,就会这些非法字符替换为空字符串. 一.sql注入的例子: 上面的输入

ASP.NET MVC 5使用Filter过滤Action参数防止sql注入

在开发程序的过程中,稍微不注意就会隐含有sql注入的危险.今天我就来说下,ASP.NET mvc 5使用Filter过滤Action参数防止sql注入,让你代码安全简洁.不用每下地方对参数的值都进行检查,看是用户输入的内容是否有危险的sql.如果每个地方都要加有几个缺点: 1.工作量大 2.容易遗漏 3.不容易维护 下面我通过写一个过滤防止sql的特性类,对Action执行前对Action的参数进行处理,如果有其值有sql语句,就会这些非法字符替换为空字符串. 一.sql注入的例子: 上面的输入

MVC OR API的接口

MVC OR WEBAPI的接口安全 当我们开发一款App的时候,App需要跟后台服务进行通信获取或者提交数据.如果我们没有完善的安全机制则很容易被别用心的人伪造请求而篡改数据.所以我们需要使用某种安全机制来保证请求的合法.现在最常用的办法是给每个http请求添加一个签名,服务端来验证签名的合法性,如果签名合法则执行响应的操作,如果签名非法则直接拒绝请求. 签名算法 签名算法一般都使用Hash散列算法,常用的有MD5,SHA系列算法.这些算法可以根据不同的输入,计算出不同的结果,而且碰撞的概率很

使用cacti监控虚接口

前言 linux系统中的tun.pppx等虚接口无法被cacti监控流量.因为这些是vpn连接成功后才生成动态接口,即使接口的名称一样,每一次生成的接口id都不相同,导致cacti无法连续监控接口的流量. 为了解决此问题,笔者想到了一个比较dirty但行之有效的方法. 1.在接口生成的时候记录下本次生成的接口名称,然后通过snmpwalk命令获取本次接口的oid值. 2.通过计划任务每30秒一次,获取本次接口的流量保存在本地. 3.使用net-snmp的自定义oid获取已经保存在本地的数值. 4

Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法

Spring MVC 中采用注解方式 Action中跳转到另一个Action的写法 在Action中方法的返回值都是字符串行,一般情况是返回某个JSP,如: return "xx":意思是返回到某个JSP页面上 如果想在此Action中跳转到另一个Action中怎样做呢? return "redirect://.do?" 例如: @RequestMapping(params = "action=delete") public String del

2017.3.31 spring mvc教程(五)Action的单元测试

学习的博客:http://elf8848.iteye.com/blog/875830/ 我项目中所用的版本:4.2.0.博客的时间比较早,11年的,学习的是Spring3 MVC.不知道版本上有没有变化比较大的功能. spring mvc教程(五)Action的单元测试 这里的博客,还不支持@ContextConfiguration的注解式context file注入.所以内容就不写了. 等找到最新的单元测试方式,再来总结.

Python监控网站接口值

Python监控网站接口值: #!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'liudong' import urllib,sys,urllib2,json,smtplib from email.mime.text import MIMEText mailto_list=['邮箱'] mail_host="smtp.philisense.com" mail_user="邮箱" mail_pass

C#/ASP.NET MVC微信公众号接口开发之从零开发(三)回复消息 (附源码)

C#/ASP.NET MVC微信接口开发文章目录: 1.C#/ASP.NET MVC微信公众号接口开发之从零开发(一) 接入微信公众平台 2.C#/ASP.NET MVC微信公众号接口开发之从零开发(二) 接收微信消息并且解析XML(附源码) 一.拼凑回复的XML字符串 微信被动回复的形式有一下六种: 1 回复文本消息 2 回复图片消息 3 回复语音消息 4 回复视频消息 5 回复音乐消息 6 回复图文消息 分别对应不同的XML形式,这里以文本消息和图文为例,读者举一反三其他的类似,不再赘述:

走入asp.net mvc不归路:[4]说说Action有哪些常见成员

一个控制器中,功能最终会落实到一个个Action中实现,最常见的是增删查改操作.这些Action是一个个的方法,一般返回值是ActionResult,并且是public 方法,可以带参数,可以添加元标记,可以结合linq直接访问数据库,可以结合Model进行合法性验证等等,还是比较灵活的.增就是添加记录,如添加一个域名,一个产品:删,就是删除一条记录:查,包含列表显示及单个记录的显示:改就是指的修改记录. 1 最常见的Action当属增删查改功能 2 其中Index是列表,在示例中即列出所有的域