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

至于线形图的插件是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. Magento资源问题上CDN方案研究

    通过对Magento的了解,发现Magento的资源文件主要分布在media.js.skin三个文件夹里,media文件夹主要包括了系统自带编辑器WYSIWYG Editor 所有编辑器涉及到的资源( ...

  2. DEDE栏目内容调用

    {dede:sql sql='Select content from dede_arctype where id=1'} [field:content/] {/dede:sql},

  3. C语言初学 数学中带根号的复杂计算问题

    #include<stdio.h> #include<math.h> int main() { double a,b; scanf("%lf%lf",&am ...

  4. cf D. Levko and Array

    http://codeforces.com/contest/361/problem/D 用二分搜索相邻两个数的差的绝对值,然后用dp记录数改变的次数.dp[i]表示在i之前改变的次数,如果|a[i]- ...

  5. Lazy Load Plugin for jQuery延迟加载测试成功

    一直需要的功能,网页图片太多时对于降低网络流量超有用. 最新的V1.9.3版本其实已不用修改就可以起作用了. 不用网上说的要自己修改代码.

  6. Hunt the Wumpus第二个版本---多怪兽,多洞穴,洞穴间双向互通

    其中,将洞穴连起来的算法要好好体会. 学习构建临时变量列表,确认循环用FOR,非确定循环用 WHILE,并定好退出条件. from random import choice cave_numbers ...

  7. ISO7816通讯协议在工控主板EM9160中的实现方案

    在新的国家电网智能终端相关标准中,规定了通过专门的加密芯片来保证设备数据安全性的方法,而设备主控单元与加密芯片采用了广泛应用的ISO7816通讯协议.工控主板EM9160为了适应这一新的技术需求,对其 ...

  8. windows下查看端口占用情况

    最近在用ICE做分布式应用 https://doc.zeroc.com/pages/viewpage.action?pageId=5048454 写了一个client 和server.server监听 ...

  9. Why Memory Barrier?

    引言:xchg做了什么? 首先,xchg eax, ecx并不会比mov edx, eax + mov eax, ecx + mov ecx, edx这三条指令加一起快,原因是xchg有副作用. Mi ...

  10. android开发论坛

    http://www.hiapk.com/ http://bbs.hiapk.com/ http://bbs.gfan.com/ http://bbs.anzhi.com/ http://www.ap ...