SignalR实现页面实时监控

 

1.页面截图

2.数据库截图

 

 

3.前端代码

 

@{
    ViewBag.Title = "ToDB";
}
<style>

</style>
<div style="margin:0 auto;width:auto;text-align:center">
    <h3>日志导入数据库</h3>
</div>
<div></div>
<div>
    <div style="width: 810px; margin: 0 auto; ">
        <button id="btnToDB" style="border: 1px solid #e8e8e8; color: #808080; margin-bottom: 10px; ">导入并监控</button>
    </div>
    <div style="border: 1px solid #e8e8e8; width: 800px; height: 400px; margin: 0 auto; color: #808080; font-size: 13px; padding:5px; overflow:auto;">
        监控信息如下:
        <ul id="discussion"></ul>
        <div id="msg_end" style="height:0px; overflow:hidden;"></div>
    </div>
    <br />
    <div style="border: 1px solid #e8e8e8; width: 800px; height: 55px; margin: 0 auto; color: #808080; font-size: 13px; padding: 5px; overflow: auto;">
        本页面用到的技术:SignalR。 <br />
        SignalR技术功能:数据实时同步到浏览器,不需要刷新。 <br />
        SignalR技术说明:后台动态执行javascript脚本,前台监控后台执行的结果并将结果显示到浏览器上,可以用于网页版的聊天功能。
    </div>
</div>
<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script src="~/Scripts/jquery.signalR-2.0.3.min.js"></script>
<script src="~/signalr/hubs"></script>
<script>
    $(function () {
        var i = 0;
        //指向MyHub.cs类,首字母一定要小写($.connection.myHub不能写成$.connection.MyHub)
        var chat = $.connection.myHub;
        // 调用MyHub创建的动态方法
        chat.client.addNewMessageToPage = function (data) {
            if (data.status == 1) {
                ++i;
                $('#discussion').append('<li style="padding:5px;">' + i + '.' + data.filename + '[' + data.logscount + '];</li>');
                msg_end.scrollIntoView(); //页面自动滚动
            }
            else {
                $('#discussion').append('<li style="padding:5px;color:red">导入结束!</li>');
                msg_end.scrollIntoView(); //页面自动滚动
            }
        };

        $.connection.hub.start().done(function () {
            $("#btnToDB").click(function () {
                chat.server.toDB();
            })
        });
    });
</script>
View Code

 

 

4.后端代码

/// <summary>
        /// 日志导入到数据库
        /// </summary>
        public void ToDB()
        {
            var loganalysis = new LogAnalysisBll();
            var logbll = new LogsBll();
            var json = new { filename = "", logscount = 0, status = 0 };
            //获取所有日志名称
            var list = loganalysis.GetFields(logPath);
            if (list != null && list.Count > 0)
            {
                //时间倒序排列
                list = list.OrderByDescending(x => x.AsDatetime()).ToList();
            }

            foreach (var item in list)
            {
                var month = item.AsDatetime().Month.ToString();
                var day = item.AsDatetime().Day.ToString();
                month = month.Length == 1 ? "0" + month : month;
                day = day.Length == 1 ? "0" + day : day;

                LogInfoModel fileModel = new LogInfoModel() { LogName = item };
                var fileSave = logbll.InsertFile(fileModel);  //插入日志名称到数据库

                //根据日志路径分析日志,获取列表
                var logslist = loganalysis.GetLog(string.Format("{4}{0}\\{1}\\{2}\\{3}.log", item.AsDatetime().Year, month, day, item.AsDatetime().ToString("yyyyMMdd"), logPath));
                if (fileSave > 0)  //如果数据库不存在此日志文件,则添加日志文件和问件包含的日志
                {
                    foreach (var log in logslist)
                    {
                        var logModel = log;
                        logModel.FileId = fileSave;
                        logbll.InsertLog(logModel);
                    }
                    json = new { filename = item, logscount = logslist.Count, status = 1 };
                    Clients.All.addNewMessageToPage(json);
                }
                else  //如果数据库已存在此文件,则检索此文件中所有的日志,将还未添加到数据库中的日志添加到数据库
                {
                    var model = logbll.GetLastLog(item); //获取数据库当前文件的最后一个日志
                    var lastTime = model.LogCreateTime.AsString(19).AsDatetime();
                    var loglist = logslist.Where(x => x.LogCreateTime.AsString(19).AsDatetime() > lastTime).ToList();
                    var a = loglist.Count;
                    foreach (var log in loglist)
                    {
                        var logModel = log;
                        logModel.FileId = model.FileId;
                        logbll.InsertLog(logModel);
                    }
                    json = new { filename = item, logscount = loglist.Count, status = 1 };
                    Clients.All.addNewMessageToPage(json);
                }
            }
            json = new { filename = "", logscount = 0, status = 0 };
            Clients.All.addNewMessageToPage(json);
        }
View Code

 

对于SignalR使用不成功的可以问我,我不是很了解但是使用成功了,遇到部分问题也解决了,QQ:905679027

 

posted @ 2016-10-25 17:33  孤狼灬  阅读(661)  评论(0编辑  收藏  举报