昨天接到上级说要在检测服务器上增加一个可以根据时间来查看服务器信息的线形图,那我首先就在原有的发送监控信息的功能上增加了把信息存入数据库中,然后再数据库中取得数据显示.

至于线形图的插件是jqx 的chart 网址是:http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxchart/index.htm?%28arctic%29

我用的是chart的Axis Position.大致是这样的

选择时间的我用的是my97的时间插件

在编写功能中遇到了如下几个问题:

1.因为检测的服务器的盘符可能是会改变的,所以盘符是需要动态取得,在发送监控信息中我只能是把硬盘的所有信息存在了一个字段中,这样就导致了我在chart中获取数据源的时候取数据中,遇到了字符串截取的困难(在这个上,我承认自己是太差了),因为获得chart数据源是通过ajax获取的,而返回的数据设置的是json格式.在返回json格式之前,通过sql查询到的数据是个表结构的,所以就在把硬盘信息截取到的信息存到了表中

Handler1.ashx

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.Common;
using MySql.Data.MySqlClient;
using System.Data;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using System.Text.RegularExpressions; namespace WebApplication1.js.ajax
{
/// <summary>
/// Handler1 的摘要说明
/// </summary>
public class Handler1 : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
MySqlConnection conn = new MySqlConnection("server=localhost;user id=root;password=123456;database=serverinfo;");
conn.Open(); string sql = "select DiskInfo,RAMSInfo,RAMUInfo,CPUInfo,DataValue,DateTime from serverinfo";
MySqlDataAdapter ad = new MySqlDataAdapter(sql, conn);
DataSet ST = new DataSet();
ad.Fill(ST,"info"); //取得服务器硬盘的盘数 C: 总空间为45G,剩余12.72G D: 总空间为141.01G,剩余129.62G E: 总空间为140.01G,剩余137.07G F: 总空间为139.73G,剩余128.82G //1.算出 硬盘盘数/盘符 2.往ST中添加列 3.往列中添加数据
string disk = ST.Tables[].Rows[]["DiskInfo"].ToString().Trim();
string[] dis = Regex.Split(disk, " ", RegexOptions.IgnoreCase); //盘数就是 dis.length-1
for (int i = ; i < dis.Length; i++) //dis.Length=5
{
ST.Tables[].Columns.Add(dis[i].Substring(, )); //往ST中添加列
ST.Tables[].Columns.Add(dis[i].Substring(, )+"S");
}
for (int n = ; n < ST.Tables[].Rows.Count; n++) //往ST新增列中添加数据
{
for (int j = ; j < dis.Length; j++)
{ string data = ST.Tables[].Rows[n]["DiskInfo"].ToString().Trim(); //当前行的数据
string[] datas = Regex.Split(disk, " ", RegexOptions.IgnoreCase); //当前行各盘的数据
string PF=dis[j].Substring(, );
string PFS = dis[j].Substring(, )+"S"; string pattern = @"\d+(\.\d+)?[G]";
RegexOptions regexOptions = RegexOptions.None;
Regex regex = new Regex(pattern, regexOptions);
string inputData = @""+datas[j]+""; for (int m = ; m < regex.Matches(inputData).Count-; m++)
{
ST.Tables[].Rows[n][PF] = regex.Matches(inputData)[m]; //存入数据
ST.Tables[].Rows[n][PFS] = regex.Matches(inputData)[m+];
}
}
} IsoDateTimeConverter iso = new IsoDateTimeConverter();
iso.DateTimeFormat = "yyyy-MM-dd";
string st= JsonConvert.SerializeObject(ST,iso); context.Response.Write(st);
} public bool IsReusable
{
get
{
return false;
}
}
}
}

这样chart就获得了数据源,而在这里也出现了第二个问题,

2. 在chart中设置硬盘信息的时候,因为硬盘信息是动态取得,seriesGroups中的series信息就没法写死,在jqx中貌似提到了一点,就是用数据绑定的方法 dome在这:http://www.jqwidgets.com/jquery-widgets-demo/demos/jqxchart/index.htm#demos/jqxchart/javascript_chart_donut_series.htm ,这样绑定的话就只能全部数据绑定,当时我设置的数据就只剩下硬盘的信息了,从头再来全部绑定太得不偿失了,后来用到的是写一个函数赋值给seriesGroups中的series, 这里又遇到了第三个问题.

3.在series 中设置的数值 是object的键值对格式,如何设置呢?请看下面代码

  function Diskinfo() {
var source;
$.ajax({
async: false,
type: "POST",
url: "js/ajax/Handler2.ashx",
success: function (data) {
source = data;
}
});
var tempArr = source.split(',');
var arr = [];
//var str=[];
if (source) {
for (var i = 0; i < tempArr.length-1; i++) {
var disk = tempArr[i];
if (i % 2 == 0) {
var obj = { dataField: disk, displayText: disk + "总" };
arr.push(obj);
//str+= "{ dataField: '" + disk + "', displayText: '" + disk + "总' },";
} else {
//str+= "{ dataField: '" + disk + "', displayText: '" + disk + "剩余' },";
var obj = { dataField: disk, displayText: disk + "剩余" };
arr.push(obj);
} }
}
//arr.push(str);
return arr;
}

这样得到的数据就是object类型的键值对啦~

然后赋值series:Diskinfo()

到这里数据就设置完了,功能也搞定了~

2014-06-13 jq chart的更多相关文章

  1. NFC会员管理-转载自http://technews.cn/2014/09/13/nfc-sticker/

    基隆的百年名店“李鹄饼店”误用馊水油,客人纷纷上门退货,因退货条件宽松,客人一货两退,造成巨大的损失.为了平息客人的愤怒,店家允许客人凭发 票或商品办理退货,有的客人先用发票退一次钱,再用商品退一次钱 ...

  2. 【转载】Android Studio jar、so、library项目依赖,原文链接http://zhengxiaopeng.com/2014/12/13/Android-Studio-jar、so、library项目依赖/

    前言 Android Studio(以下简称AS)在13年I/O大会后放出预览版到现在放出的正式版1.0(PS.今天又更新到1.0.1了)历时一年多了,虽然Google官方推出的Android开发者的 ...

  3. Google Maps 学习笔记(一)2014.06.04

    1.<body onload="加载地图的函数" onunload="GUnload()"> 2.new GMap2(container,opts) ...

  4. 索引介绍,转载自:https://tech.meituan.com/2014/06/30/mysql-index.html

    索引原理 除了词典,生活中随处可见索引的例子,如火车站的车次表.图书的目录等.它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总 ...

  5. JavaScript基础系列目录(2014.06.01~2014.06.08)

    下列文章,转载请亲注明链接出处,谢谢! 链接地址: http://www.cnblogs.com/ttcc/tag/JavaScript%20%E5%9F%BA%E7%A1%80%E7%9F%A5%E ...

  6. Cheatsheet: 2014 06.01 ~ 06.30

    Mobile Developing iOS8 Apps Using Swift – Part 1- Hello World The Insider's Guide to Android Intervi ...

  7. 2014.06.20 (转)IEEE与论坛灌水

    转自"饮水思源"      电子类学生大都知道IEEE, 这个IEEE就像一个大的BBS论坛,而这个协会下面有很多杂志,比如图像处理,信号处理,微波技术等.这些杂志就是论坛下的分版 ...

  8. 2014.12.13 ASP.NET文件上传

    一.文件上传:(一)上传到硬盘文件夹1.最简单的上传. [HTML代码] <asp:FileUpload ID="FileUpload1" runat="serve ...

  9. 2014第13周四Webservice概念问题记

    晚上回来看网页学习了这两天一直疑惑的两个问题: 1.REST和SOAP架构下的Webservice的区别? 2.axis2和CXF的区别. 大部分是理论,暂时摘录一下,以后有更多实践后再回顾. 一.R ...

随机推荐

  1. php 练习一 5月5日

    练习题一:通过登录者找到他的好友并显示在页面上 <title>无标题文档</title> <style type="text/css"> * { ...

  2. php魔术方法——属性重载方法

    php有一类很神奇的方法,这些方法是保留方法,通常不会在外部被显式调用,他们使用双下划线(__)开头,他们被称为魔术方法(Magic Methods).php官方也不建议定义其他双下划线开头的方法. ...

  3. HTML&CSS基础学习笔记1.18-表格的边框

    今天的内容比较简单~来看看HTML里表格的边框是怎么设置的吧 表格的边框 前面为了方便观察表格单元格的情况,我们给<table>加了border属性.<table>的borde ...

  4. 所谓has a 和 is a

    在 C# 中 很好理解: {  is    a: 继承关系.    has a: 成员关系,其他类是本类的成员.} 在C++ 中稍微复杂一点: {  由于有多重继承, 继承也可能是has a,类似C# ...

  5. Number Sequence(HDU 1005 构造矩阵 )

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. Qt编程之对QGraphicsItem点击右键弹出菜单

    就是对这个contextMenuEvent 事件重新实现,在这个事件函数中创建菜单,大概就是这样. void MyItem::contextMenuEvent(QGraphicsSceneContex ...

  7. CSS flex让所有灵活的项目都带有相同的长度,忽略它们的内容:

    .flexbox {     display: -webkit-box;     display: -webkit-flex;     display: -ms-flexbox;     displa ...

  8. c指针点滴2之比大小

    #include <stdio.h> #include <stdlib.h> void main2() { ]={,,,4.5}; ]; ]; if(p1<p2) { p ...

  9. 第32讲 UI组件之 时间日期控件DatePicker和TimePicker

    第32讲 UI组件之 时间日期控件DatePicker和TimePicker 在Android中,时间日期控件相对来说还是比较丰富的.其中, DatePicker用来实现日期输入设置,    Time ...

  10. c++ 之 字符和字符串

    字符 1.字符的分类 字符主要包括字母.数字.标点符号.控制字符等 在ASCII编码表中,每一个字符都用一个十进制数来表示 注:ASCII的全称是American Standard Code for ...