├── .gitattributes ├── .gitignore ├── Makefile ├── NgxStatMgr ├── py │ ├── Main.py │ ├── __init__.py │ ├── filter.py │ ├── ngx_stat_dao.py │ ├── ngx_stat_query.py │ ├── settings.py │ └── stat_db_clean.py ├── static │ ├── NginxStatMgr.png │ ├── __init__.py │ ├── contextMenu │ │ ├── css │ │ │ └── ContextMenu.css │ │ ├── images │ │ │ ├── cut.png │ │ │ ├── door.png │ │ │ ├── page_white_copy.png │ │ │ ├── page_white_delete.png │ │ │ ├── page_white_edit.png │ │ │ └── page_white_paste.png │ │ └── jquery.contextMenu.js │ ├── css │ │ └── main.css │ ├── dwz │ │ ├── chart │ │ │ ├── g.bar.js │ │ │ ├── g.dot.js │ │ │ ├── g.line.js │ │ │ ├── g.pie.js │ │ │ ├── g.raphael.js │ │ │ ├── raphael-min.js │ │ │ ├── raphael.js │ │ │ └── test │ │ │ │ ├── barchart.html │ │ │ │ ├── hbarchart.html │ │ │ │ ├── linechart.html │ │ │ │ └── piechart.html │ │ ├── demo │ │ │ ├── combox │ │ │ │ ├── area_all.html │ │ │ │ ├── area_bj.html │ │ │ │ ├── area_sh.html │ │ │ │ ├── city_all.html │ │ │ │ ├── city_bj.html │ │ │ │ └── city_sh.html │ │ │ ├── common │ │ │ │ ├── ajaxDone.html │ │ │ │ ├── ajaxDone.json │ │ │ │ ├── ajaxTimeout.html │ │ │ │ └── dwz-team.xls │ │ │ ├── database │ │ │ │ ├── db_attachmentBrightBack.html │ │ │ │ ├── db_attachmentLookup.html │ │ │ │ ├── db_lookupSuggest.html │ │ │ │ ├── db_select.html │ │ │ │ ├── db_widget.html │ │ │ │ ├── dwzOrgLookup.html │ │ │ │ ├── dwzOrgLookup2.html │ │ │ │ ├── treeBringBack.html │ │ │ │ └── treeLookup.html │ │ │ ├── pagination │ │ │ │ ├── ajaxDone1.html │ │ │ │ ├── ajaxDone2.html │ │ │ │ ├── ajaxDone3.html │ │ │ │ ├── dialog1.html │ │ │ │ ├── dialog2.html │ │ │ │ ├── layout1.html │ │ │ │ ├── layout2.html │ │ │ │ ├── list1.html │ │ │ │ ├── list2.html │ │ │ │ └── list3.html │ │ │ └── sortDrag │ │ │ │ ├── 1.html │ │ │ │ └── 2.html │ │ ├── doc │ │ │ └── dwz-user-guide.chm │ │ ├── dwz.frag.xml │ │ ├── js │ │ │ ├── additional-methods.js │ │ │ ├── dwz.accordion.js │ │ │ ├── dwz.ajax.js │ │ │ ├── dwz.alertMsg.js │ │ │ ├── dwz.barDrag.js │ │ │ ├── dwz.checkbox.js │ │ │ ├── dwz.combox.js │ │ │ ├── dwz.contextmenu.js │ │ │ ├── dwz.core.js │ │ │ ├── dwz.cssTable.js │ │ │ ├── dwz.database.js │ │ │ ├── dwz.datepicker.js │ │ │ ├── dwz.dialog.js │ │ │ ├── dwz.dialogDrag.js │ │ │ ├── dwz.drag.js │ │ │ ├── dwz.effects.js │ │ │ ├── dwz.history.js │ │ │ ├── dwz.navTab.js │ │ │ ├── dwz.pagination.js │ │ │ ├── dwz.panel.js │ │ │ ├── dwz.print.js │ │ │ ├── dwz.regional.zh.js │ │ │ ├── dwz.resize.js │ │ │ ├── dwz.scrollCenter.js │ │ │ ├── dwz.sortDrag.js │ │ │ ├── dwz.stable.js │ │ │ ├── dwz.switchEnv.js │ │ │ ├── dwz.tab.js │ │ │ ├── dwz.taskBar.js │ │ │ ├── dwz.theme.js │ │ │ ├── dwz.tree.js │ │ │ ├── dwz.ui.js │ │ │ ├── dwz.util.date.js │ │ │ ├── dwz.util.number.js │ │ │ ├── dwz.validate.method.js │ │ │ ├── jquery-1.7.2.js │ │ │ ├── jquery-1.7.2.min.js │ │ │ ├── jquery.bgiframe.js │ │ │ ├── jquery.cookie.js │ │ │ ├── jquery.easing.1.3.js │ │ │ ├── jquery.validate.js │ │ │ ├── jquery.validate.min.js │ │ │ └── speedup.js │ │ ├── themes │ │ │ ├── azure │ │ │ │ ├── images │ │ │ │ │ ├── accordion │ │ │ │ │ │ └── accordion.png │ │ │ │ │ ├── account_info_bg.png │ │ │ │ │ ├── alert │ │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ │ ├── button │ │ │ │ │ │ ├── button_s.png │ │ │ │ │ │ ├── imgX.gif │ │ │ │ │ │ ├── imgX.png │ │ │ │ │ │ └── tack-effects.png │ │ │ │ │ ├── dialog │ │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ │ ├── form │ │ │ │ │ │ ├── input_bg.png │ │ │ │ │ │ └── input_bt.png │ │ │ │ │ ├── grid │ │ │ │ │ │ ├── grid.png │ │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ │ └── tableth.png │ │ │ │ │ ├── header_bg.png │ │ │ │ │ ├── icon.png │ │ │ │ │ ├── layout │ │ │ │ │ │ ├── taskbar.png │ │ │ │ │ │ ├── taskbar_control.png │ │ │ │ │ │ ├── taskbar_icon.png │ │ │ │ │ │ └── toggleSidebar.png │ │ │ │ │ ├── listLine.png │ │ │ │ │ ├── menu │ │ │ │ │ │ └── menu.png │ │ │ │ │ ├── order_down.gif │ │ │ │ │ ├── order_up.gif │ │ │ │ │ ├── pageHeader_bg.png │ │ │ │ │ ├── panel │ │ │ │ │ │ ├── panel.png │ │ │ │ │ │ └── panel_icon.png │ │ │ │ │ ├── preview.png │ │ │ │ │ ├── progressBar │ │ │ │ │ │ ├── progressBar_l.gif │ │ │ │ │ │ ├── progressBar_m.gif │ │ │ │ │ │ └── progressBar_s.gif │ │ │ │ │ ├── search-bg.gif │ │ │ │ │ ├── search-bt.gif │ │ │ │ │ ├── shadow │ │ │ │ │ │ ├── shadow_c_c.png │ │ │ │ │ │ ├── shadow_c_l.png │ │ │ │ │ │ ├── shadow_c_r.png │ │ │ │ │ │ ├── shadow_f_c.png │ │ │ │ │ │ ├── shadow_f_l.png │ │ │ │ │ │ ├── shadow_f_r.png │ │ │ │ │ │ ├── shadow_h_c.png │ │ │ │ │ │ ├── shadow_h_l.png │ │ │ │ │ │ └── shadow_h_r.png │ │ │ │ │ ├── tabs │ │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ │ ├── tabspage.png │ │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ │ └── tabspanel.png │ │ │ │ │ └── tree │ │ │ │ │ │ ├── check.png │ │ │ │ │ │ ├── folder.png │ │ │ │ │ │ └── tree.png │ │ │ │ └── style.css │ │ │ ├── css │ │ │ │ ├── core.css │ │ │ │ ├── ieHack.css │ │ │ │ ├── login.css │ │ │ │ └── print.css │ │ │ ├── default │ │ │ │ ├── images │ │ │ │ │ ├── accordion │ │ │ │ │ │ └── accordion.png │ │ │ │ │ ├── account_info_bg.png │ │ │ │ │ ├── alert │ │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ │ ├── button │ │ │ │ │ │ ├── button_s.png │ │ │ │ │ │ └── imgX.gif │ │ │ │ │ ├── dialog │ │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ │ ├── form │ │ │ │ │ │ ├── input_bg.png │ │ │ │ │ │ └── input_bt.png │ │ │ │ │ ├── grid │ │ │ │ │ │ ├── grid.png │ │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ │ └── tableth.png │ │ │ │ │ ├── header_bg.png │ │ │ │ │ ├── icon.png │ │ │ │ │ ├── layout │ │ │ │ │ │ ├── taskbar.png │ │ │ │ │ │ ├── taskbar_control.png │ │ │ │ │ │ ├── taskbar_icon.png │ │ │ │ │ │ └── toggleSidebar.png │ │ │ │ │ ├── listLine.png │ │ │ │ │ ├── login_banner.jpg │ │ │ │ │ ├── login_bg.png │ │ │ │ │ ├── login_content_bg.png │ │ │ │ │ ├── login_header_bg.png │ │ │ │ │ ├── login_list.png │ │ │ │ │ ├── login_logo.gif │ │ │ │ │ ├── login_sub.png │ │ │ │ │ ├── login_title.png │ │ │ │ │ ├── logo.png │ │ │ │ │ ├── menu │ │ │ │ │ │ └── menu.png │ │ │ │ │ ├── order_down.gif │ │ │ │ │ ├── order_up.gif │ │ │ │ │ ├── pageHeader_bg.png │ │ │ │ │ ├── panel │ │ │ │ │ │ ├── panel.png │ │ │ │ │ │ └── panel_icon.png │ │ │ │ │ ├── progressBar │ │ │ │ │ │ ├── progressBar_l.gif │ │ │ │ │ │ ├── progressBar_m.gif │ │ │ │ │ │ └── progressBar_s.gif │ │ │ │ │ ├── search-bg.gif │ │ │ │ │ ├── search-bt.gif │ │ │ │ │ ├── shadow │ │ │ │ │ │ ├── shadow_c_c.png │ │ │ │ │ │ ├── shadow_c_l.png │ │ │ │ │ │ ├── shadow_c_r.png │ │ │ │ │ │ ├── shadow_f_c.png │ │ │ │ │ │ ├── shadow_f_l.png │ │ │ │ │ │ ├── shadow_f_r.png │ │ │ │ │ │ ├── shadow_h_c.png │ │ │ │ │ │ ├── shadow_h_l.png │ │ │ │ │ │ └── shadow_h_r.png │ │ │ │ │ ├── tabs │ │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ │ ├── tabspage.png │ │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ │ └── tabspanel.png │ │ │ │ │ ├── themeButton.png │ │ │ │ │ └── tree │ │ │ │ │ │ ├── check.png │ │ │ │ │ │ ├── folder.png │ │ │ │ │ │ └── tree.png │ │ │ │ └── style.css │ │ │ ├── green │ │ │ │ ├── images │ │ │ │ │ ├── accordion │ │ │ │ │ │ └── accordion.png │ │ │ │ │ ├── account_info_bg.png │ │ │ │ │ ├── alert │ │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ │ ├── button │ │ │ │ │ │ └── button_s.png │ │ │ │ │ ├── dialog │ │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ │ ├── form │ │ │ │ │ │ ├── input_bg.png │ │ │ │ │ │ └── input_bt.png │ │ │ │ │ ├── grid │ │ │ │ │ │ ├── grid.png │ │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ │ └── tableth.png │ │ │ │ │ ├── header_bg.png │ │ │ │ │ ├── layout │ │ │ │ │ │ └── toggleSidebar.png │ │ │ │ │ ├── listLine.png │ │ │ │ │ ├── pageHeader_bg.png │ │ │ │ │ ├── panel │ │ │ │ │ │ ├── panel.png │ │ │ │ │ │ └── panel_icon.png │ │ │ │ │ ├── tabs │ │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ │ ├── tabspage.png │ │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ │ └── tabspanel.png │ │ │ │ │ └── tree │ │ │ │ │ │ └── tree.png │ │ │ │ └── style.css │ │ │ ├── purple │ │ │ │ ├── images │ │ │ │ │ ├── accordion │ │ │ │ │ │ └── accordion.png │ │ │ │ │ ├── account_info_bg.png │ │ │ │ │ ├── alert │ │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ │ ├── button │ │ │ │ │ │ └── button_s.png │ │ │ │ │ ├── dialog │ │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ │ ├── form │ │ │ │ │ │ ├── input_bg.png │ │ │ │ │ │ └── input_bt.png │ │ │ │ │ ├── grid │ │ │ │ │ │ ├── grid.png │ │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ │ └── tableth.png │ │ │ │ │ ├── header_bg.png │ │ │ │ │ ├── layout │ │ │ │ │ │ ├── taskbar.png │ │ │ │ │ │ ├── taskbar_control.png │ │ │ │ │ │ ├── taskbar_icon.png │ │ │ │ │ │ └── toggleSidebar.png │ │ │ │ │ ├── login_bg.png │ │ │ │ │ ├── login_content_bg.png │ │ │ │ │ ├── login_header_bg.png │ │ │ │ │ ├── login_list.png │ │ │ │ │ ├── menu │ │ │ │ │ │ └── menu.png │ │ │ │ │ ├── pageHeader_bg.png │ │ │ │ │ ├── panel │ │ │ │ │ │ ├── panel.png │ │ │ │ │ │ └── panel_icon.png │ │ │ │ │ ├── progressBar │ │ │ │ │ │ ├── progressBar_l.gif │ │ │ │ │ │ ├── progressBar_m.gif │ │ │ │ │ │ └── progressBar_s.gif │ │ │ │ │ ├── shadow │ │ │ │ │ │ ├── shadow_c_c.png │ │ │ │ │ │ ├── shadow_c_l.png │ │ │ │ │ │ ├── shadow_c_r.png │ │ │ │ │ │ ├── shadow_f_c.png │ │ │ │ │ │ ├── shadow_f_l.png │ │ │ │ │ │ ├── shadow_f_r.png │ │ │ │ │ │ ├── shadow_h_c.png │ │ │ │ │ │ ├── shadow_h_l.png │ │ │ │ │ │ └── shadow_h_r.png │ │ │ │ │ ├── tabs │ │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ │ ├── tabspage.png │ │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ │ └── tabspanel.png │ │ │ │ │ └── tree │ │ │ │ │ │ ├── check.png │ │ │ │ │ │ ├── folder.png │ │ │ │ │ │ └── tree.png │ │ │ │ └── style.css │ │ │ └── silver │ │ │ │ ├── images │ │ │ │ ├── accordion │ │ │ │ │ └── accordion.png │ │ │ │ ├── account_info_bg.png │ │ │ │ ├── alert │ │ │ │ │ ├── alertpanel.png │ │ │ │ │ └── alertpanel_icon.png │ │ │ │ ├── button │ │ │ │ │ └── button_s.png │ │ │ │ ├── dialog │ │ │ │ │ ├── dialogpanel.png │ │ │ │ │ └── dialogpanel_icon.png │ │ │ │ ├── form │ │ │ │ │ ├── input_bg.png │ │ │ │ │ └── input_bt.png │ │ │ │ ├── grid │ │ │ │ │ ├── grid.png │ │ │ │ │ ├── resizeCol.png │ │ │ │ │ └── tableth.png │ │ │ │ ├── header_bg.png │ │ │ │ ├── layout │ │ │ │ │ ├── taskbar.png │ │ │ │ │ ├── taskbar_control.png │ │ │ │ │ ├── taskbar_icon.png │ │ │ │ │ └── toggleSidebar.png │ │ │ │ ├── listLine.png │ │ │ │ ├── menu │ │ │ │ │ └── menu.png │ │ │ │ ├── pageHeader_bg.png │ │ │ │ ├── panel │ │ │ │ │ ├── panel.png │ │ │ │ │ └── panel_icon.png │ │ │ │ ├── progressBar │ │ │ │ │ ├── progressBar_l.gif │ │ │ │ │ ├── progressBar_m.gif │ │ │ │ │ └── progressBar_s.gif │ │ │ │ ├── shadow │ │ │ │ │ ├── shadow_c_c.png │ │ │ │ │ ├── shadow_c_l.png │ │ │ │ │ ├── shadow_c_r.png │ │ │ │ │ ├── shadow_f_c.png │ │ │ │ │ ├── shadow_f_l.png │ │ │ │ │ ├── shadow_f_r.png │ │ │ │ │ ├── shadow_h_c.png │ │ │ │ │ ├── shadow_h_l.png │ │ │ │ │ └── shadow_h_r.png │ │ │ │ ├── tabs │ │ │ │ │ ├── tabscontrol.png │ │ │ │ │ ├── tabspage.png │ │ │ │ │ ├── tabspage_icon.png │ │ │ │ │ └── tabspanel.png │ │ │ │ └── tree │ │ │ │ │ ├── check.png │ │ │ │ │ ├── folder.png │ │ │ │ │ └── tree.png │ │ │ │ └── style.css │ │ ├── uploadify │ │ │ ├── cancel.png │ │ │ ├── css │ │ │ │ └── uploadify.css │ │ │ └── scripts │ │ │ │ ├── expressInstall.swf │ │ │ │ ├── jquery.uploadify.v2.1.0.js │ │ │ │ ├── swfobject.js │ │ │ │ └── uploadify.swf │ │ └── xheditor │ │ │ ├── xheditor-1.1.14-en.min.js │ │ │ ├── xheditor-1.1.14-zh-cn.min.js │ │ │ ├── xheditor-1.1.14-zh-tw.min.js │ │ │ ├── xheditor_emot │ │ │ ├── default │ │ │ │ ├── angry.gif │ │ │ │ ├── awkward.gif │ │ │ │ ├── bye.gif │ │ │ │ ├── config.txt │ │ │ │ ├── crazy.gif │ │ │ │ ├── cry.gif │ │ │ │ ├── curse.gif │ │ │ │ ├── cute.gif │ │ │ │ ├── despise.gif │ │ │ │ ├── doubt.gif │ │ │ │ ├── envy.gif │ │ │ │ ├── fastcry.gif │ │ │ │ ├── knock.gif │ │ │ │ ├── laugh.gif │ │ │ │ ├── mad.gif │ │ │ │ ├── ohmy.gif │ │ │ │ ├── panic.gif │ │ │ │ ├── proud.gif │ │ │ │ ├── quiet.gif │ │ │ │ ├── sad.gif │ │ │ │ ├── shutup.gif │ │ │ │ ├── shy.gif │ │ │ │ ├── sleep.gif │ │ │ │ ├── smile.gif │ │ │ │ ├── struggle.gif │ │ │ │ ├── titter.gif │ │ │ │ ├── tongue.gif │ │ │ │ ├── wail.gif │ │ │ │ └── wronged.gif │ │ │ ├── ipb │ │ │ │ ├── alien.gif │ │ │ │ ├── angel.gif │ │ │ │ ├── angry.gif │ │ │ │ ├── bandit.gif │ │ │ │ ├── biglaugh.gif │ │ │ │ ├── blink.gif │ │ │ │ ├── blush.gif │ │ │ │ ├── config.txt │ │ │ │ ├── cool.gif │ │ │ │ ├── cry.gif │ │ │ │ ├── depres.gif │ │ │ │ ├── devil.gif │ │ │ │ ├── glare.gif │ │ │ │ ├── heart.gif │ │ │ │ ├── joyful.gif │ │ │ │ ├── kiss.gif │ │ │ │ ├── laugh.gif │ │ │ │ ├── magician.gif │ │ │ │ ├── ninja.gif │ │ │ │ ├── pinch.gif │ │ │ │ ├── police.gif │ │ │ │ ├── sad.gif │ │ │ │ ├── sick.gif │ │ │ │ ├── sideways.gif │ │ │ │ ├── sleep.gif │ │ │ │ ├── smile.gif │ │ │ │ ├── surprised.gif │ │ │ │ ├── tongue.gif │ │ │ │ ├── unsure.gif │ │ │ │ ├── w00t.gif │ │ │ │ ├── whistling.gif │ │ │ │ ├── wondering.gif │ │ │ │ └── wub.gif │ │ │ ├── msn │ │ │ │ ├── 1.gif │ │ │ │ ├── 10.gif │ │ │ │ ├── 11.gif │ │ │ │ ├── 12.gif │ │ │ │ ├── 13.gif │ │ │ │ ├── 14.gif │ │ │ │ ├── 15.gif │ │ │ │ ├── 16.gif │ │ │ │ ├── 17.gif │ │ │ │ ├── 18.gif │ │ │ │ ├── 19.gif │ │ │ │ ├── 2.gif │ │ │ │ ├── 20.gif │ │ │ │ ├── 21.gif │ │ │ │ ├── 22.gif │ │ │ │ ├── 23.gif │ │ │ │ ├── 24.gif │ │ │ │ ├── 25.gif │ │ │ │ ├── 26.gif │ │ │ │ ├── 27.gif │ │ │ │ ├── 28.gif │ │ │ │ ├── 29.gif │ │ │ │ ├── 3.gif │ │ │ │ ├── 30.gif │ │ │ │ ├── 31.gif │ │ │ │ ├── 32.gif │ │ │ │ ├── 33.gif │ │ │ │ ├── 34.gif │ │ │ │ ├── 35.gif │ │ │ │ ├── 36.gif │ │ │ │ ├── 37.gif │ │ │ │ ├── 38.gif │ │ │ │ ├── 39.gif │ │ │ │ ├── 4.gif │ │ │ │ ├── 40.gif │ │ │ │ ├── 5.gif │ │ │ │ ├── 6.gif │ │ │ │ ├── 7.gif │ │ │ │ ├── 8.gif │ │ │ │ └── 9.gif │ │ │ └── pidgin │ │ │ │ ├── angry.gif │ │ │ │ ├── bad.gif │ │ │ │ ├── blush.gif │ │ │ │ ├── brokenheart.gif │ │ │ │ ├── bye.gif │ │ │ │ ├── coffee.gif │ │ │ │ ├── config.txt │ │ │ │ ├── cool.gif │ │ │ │ ├── cry.gif │ │ │ │ ├── curse.gif │ │ │ │ ├── cute.gif │ │ │ │ ├── devil.gif │ │ │ │ ├── envy.gif │ │ │ │ ├── gift.gif │ │ │ │ ├── good.gif │ │ │ │ ├── kiss.gif │ │ │ │ ├── laugh.gif │ │ │ │ ├── love.gif │ │ │ │ ├── music.gif │ │ │ │ ├── question.gif │ │ │ │ ├── rose.gif │ │ │ │ ├── sad.gif │ │ │ │ ├── shocked.gif │ │ │ │ ├── shout.gif │ │ │ │ ├── sick.gif │ │ │ │ ├── sleepy.gif │ │ │ │ ├── smile.gif │ │ │ │ ├── soccer.gif │ │ │ │ ├── sweat.gif │ │ │ │ ├── tired.gif │ │ │ │ ├── tongue.gif │ │ │ │ ├── victory.gif │ │ │ │ └── wink.gif │ │ │ ├── xheditor_plugins │ │ │ ├── multiupload │ │ │ │ ├── img │ │ │ │ │ ├── add.gif │ │ │ │ │ ├── bg1.gif │ │ │ │ │ ├── bg2.gif │ │ │ │ │ ├── btnbg.gif │ │ │ │ │ ├── btnbgr.gif │ │ │ │ │ ├── clear.gif │ │ │ │ │ ├── progressbg.gif │ │ │ │ │ └── start.gif │ │ │ │ ├── multiupload.css │ │ │ │ ├── multiupload.html │ │ │ │ ├── multiupload.js │ │ │ │ └── swfupload │ │ │ │ │ ├── swfupload.js │ │ │ │ │ └── swfupload.swf │ │ │ └── ubb.min.js │ │ │ └── xheditor_skin │ │ │ ├── blank.gif │ │ │ ├── default │ │ │ ├── iframe.css │ │ │ ├── img │ │ │ │ ├── anchor.gif │ │ │ │ ├── close.gif │ │ │ │ ├── flash.gif │ │ │ │ ├── icons.gif │ │ │ │ ├── loading.gif │ │ │ │ ├── progress.gif │ │ │ │ ├── progressbg.gif │ │ │ │ ├── tag-address.gif │ │ │ │ ├── tag-div.gif │ │ │ │ ├── tag-h1.gif │ │ │ │ ├── tag-h2.gif │ │ │ │ ├── tag-h3.gif │ │ │ │ ├── tag-h4.gif │ │ │ │ ├── tag-h5.gif │ │ │ │ ├── tag-h6.gif │ │ │ │ ├── tag-p.gif │ │ │ │ ├── tag-pre.gif │ │ │ │ ├── waiting.gif │ │ │ │ ├── wmp.gif │ │ │ │ └── wordimg.gif │ │ │ └── ui.css │ │ │ ├── nostyle │ │ │ ├── iframe.css │ │ │ ├── img │ │ │ │ ├── anchor.gif │ │ │ │ ├── close.gif │ │ │ │ ├── flash.gif │ │ │ │ ├── icons.gif │ │ │ │ ├── loading.gif │ │ │ │ ├── progress.gif │ │ │ │ ├── progressbg.gif │ │ │ │ ├── tag-address.gif │ │ │ │ ├── tag-div.gif │ │ │ │ ├── tag-h1.gif │ │ │ │ ├── tag-h2.gif │ │ │ │ ├── tag-h3.gif │ │ │ │ ├── tag-h4.gif │ │ │ │ ├── tag-h5.gif │ │ │ │ ├── tag-h6.gif │ │ │ │ ├── tag-p.gif │ │ │ │ ├── tag-pre.gif │ │ │ │ ├── waiting.gif │ │ │ │ ├── wmp.gif │ │ │ │ └── wordimg.gif │ │ │ └── ui.css │ │ │ ├── o2007blue │ │ │ ├── iframe.css │ │ │ ├── img │ │ │ │ ├── anchor.gif │ │ │ │ ├── buttonbg.gif │ │ │ │ ├── close.gif │ │ │ │ ├── flash.gif │ │ │ │ ├── icons.gif │ │ │ │ ├── loading.gif │ │ │ │ ├── progress.gif │ │ │ │ ├── progressbg.gif │ │ │ │ ├── tag-address.gif │ │ │ │ ├── tag-div.gif │ │ │ │ ├── tag-h1.gif │ │ │ │ ├── tag-h2.gif │ │ │ │ ├── tag-h3.gif │ │ │ │ ├── tag-h4.gif │ │ │ │ ├── tag-h5.gif │ │ │ │ ├── tag-h6.gif │ │ │ │ ├── tag-p.gif │ │ │ │ ├── tag-pre.gif │ │ │ │ ├── waiting.gif │ │ │ │ ├── wmp.gif │ │ │ │ └── wordimg.gif │ │ │ └── ui.css │ │ │ ├── o2007silver │ │ │ ├── iframe.css │ │ │ ├── img │ │ │ │ ├── anchor.gif │ │ │ │ ├── buttonbg.gif │ │ │ │ ├── close.gif │ │ │ │ ├── flash.gif │ │ │ │ ├── icons.gif │ │ │ │ ├── loading.gif │ │ │ │ ├── progress.gif │ │ │ │ ├── progressbg.gif │ │ │ │ ├── tag-address.gif │ │ │ │ ├── tag-div.gif │ │ │ │ ├── tag-h1.gif │ │ │ │ ├── tag-h2.gif │ │ │ │ ├── tag-h3.gif │ │ │ │ ├── tag-h4.gif │ │ │ │ ├── tag-h5.gif │ │ │ │ ├── tag-h6.gif │ │ │ │ ├── tag-p.gif │ │ │ │ ├── tag-pre.gif │ │ │ │ ├── waiting.gif │ │ │ │ ├── wmp.gif │ │ │ │ └── wordimg.gif │ │ │ └── ui.css │ │ │ └── vista │ │ │ ├── iframe.css │ │ │ ├── img │ │ │ ├── anchor.gif │ │ │ ├── buttonbg.gif │ │ │ ├── close.gif │ │ │ ├── flash.gif │ │ │ ├── icons.gif │ │ │ ├── loading.gif │ │ │ ├── progress.gif │ │ │ ├── progressbg.gif │ │ │ ├── tag-address.gif │ │ │ ├── tag-div.gif │ │ │ ├── tag-h1.gif │ │ │ ├── tag-h2.gif │ │ │ ├── tag-h3.gif │ │ │ ├── tag-h4.gif │ │ │ ├── tag-h5.gif │ │ │ ├── tag-h6.gif │ │ │ ├── tag-p.gif │ │ │ ├── tag-pre.gif │ │ │ ├── titlebg.gif │ │ │ ├── waiting.gif │ │ │ ├── wmp.gif │ │ │ └── wordimg.gif │ │ │ └── ui.css │ ├── highcharts │ │ ├── highcharts.js │ │ └── modules │ │ │ └── exporting.js │ └── js │ │ └── nrights.js └── templates │ ├── dwz_base.html │ └── query.html ├── README.md ├── conf └── nginx.conf ├── config ├── json_bson.h ├── libs ├── json-c.tar.gz └── mongo-c-driver-0.98.0.tar.gz ├── mongo_op_cache.cpp ├── mongo_op_cache.h ├── ngx_http_req_stat_module.c ├── ngx_http_req_stat_module.h └── ngx_http_req_stat_var.c /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | 4 | # Custom for Visual Studio 5 | *.cs diff=csharp 6 | *.sln merge=union 7 | *.csproj merge=union 8 | *.vbproj merge=union 9 | *.fsproj merge=union 10 | *.dbproj merge=union 11 | 12 | # Standard to msysgit 13 | *.doc diff=astextplain 14 | *.DOC diff=astextplain 15 | *.docx diff=astextplain 16 | *.DOCX diff=astextplain 17 | *.dot diff=astextplain 18 | *.DOT diff=astextplain 19 | *.pdf diff=astextplain 20 | *.PDF diff=astextplain 21 | *.rtf diff=astextplain 22 | *.RTF diff=astextplain 23 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig 3 | 4 | LDFLAGS= `pkg-config --libs libmongoc-1.0` 5 | CFLAGS=`pkg-config --cflags libmongoc-1.0` -DMONGO_HAVE_STDINT 6 | 7 | all: json_merge 8 | 9 | mongo_test: mongo_test.c mongo_c_pool.h ../BaseLib/ConnPool.h ../BaseLib/ConnPool.c 10 | gcc -std=c99 -g $^ -o $@ $(CFLAGS) $(LDFLAGS) 11 | 12 | 13 | json_merge: mongo_op_cache.cpp 14 | g++ -g $^ -o $@ $(CFLAGS) $(LDFLAGS) -DCACHE_TEST 15 | 16 | clean: 17 | rm -f mongo_test json_merge 18 | 19 | -------------------------------------------------------------------------------- /NgxStatMgr/py/__init__.py: -------------------------------------------------------------------------------- 1 | # coding=utf8 2 | import hashlib, urllib2, simplejson as json 3 | 4 | from flask import request 5 | from functools import wraps 6 | 7 | import settings 8 | 9 | # **args navTabId="",rel="",forwardUrl="",callbackType="closeCurrent" 10 | def ConsDwzRsp(status, msg, **args): 11 | rsp = { 12 | "statusCode":status, 13 | "message": msg, 14 | "callbackType":args.get('callbackType', ''), 15 | "navTabId":args.get('navTabId',''), 16 | "rel":args.get('rel',''), 17 | "forwardUrl":args.get('forwardUrl', '')} 18 | 19 | return json.dumps(rsp) -------------------------------------------------------------------------------- /NgxStatMgr/py/settings.py: -------------------------------------------------------------------------------- 1 | # coding=utf8 2 | 3 | DEBUG = True 4 | 5 | SERVER_HOST = '0.0.0.0' 6 | SERVER_PORT = 83 7 | 8 | URL_PREFIX='/ngxstatmgr' 9 | 10 | LOG_PATH='/tmp' 11 | LOG_FILE='mgr_simple.log' 12 | 13 | servers = { 14 | u'nginx': '127.0.0.1:27017', 15 | } 16 | -------------------------------------------------------------------------------- /NgxStatMgr/py/stat_db_clean.py: -------------------------------------------------------------------------------- 1 | from NgxStatMgrSimple.py.ngx_stat_dao import (mongo_get_lt_10_totals,mongo_clr_lt_10_totals) 2 | from NgxStatMgrSimple.py import settings 3 | import sys 4 | 5 | 6 | if __name__ == '__main__': 7 | if len(sys.argv) < 2: 8 | print "Usage: python %s func" % sys.argv[0] 9 | print "python %s show --- show all 'count' < 10 records!" % sys.argv[0] 10 | print "python %s clean --- clean all 'count' < 10 records!" % sys.argv[0] 11 | 12 | sys.exit(1) 13 | 14 | func = sys.argv[1] 15 | if func == 'show': 16 | mongo_get_lt_10_totals(settings.servers) 17 | elif func == 'clean': 18 | mongo_clr_lt_10_totals(settings.servers) 19 | else: 20 | print "func [%s] invalid!" % func -------------------------------------------------------------------------------- /NgxStatMgr/static/NginxStatMgr.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/NginxStatMgr.png -------------------------------------------------------------------------------- /NgxStatMgr/static/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/__init__.py -------------------------------------------------------------------------------- /NgxStatMgr/static/contextMenu/css/ContextMenu.css: -------------------------------------------------------------------------------- 1 | /* Generic context menu styles */ 2 | .contextMenu { 3 | position: absolute; 4 | width: 120px; 5 | z-index: 99999; 6 | border: solid 1px #CCC; 7 | background: #EEE; 8 | padding: 0px; 9 | margin: 0px; 10 | font-family: Verdana, Arial, Helvetica, sans-serif; 11 | font-size: 13px; 12 | display: none; 13 | cursor:default; 14 | } 15 | 16 | .contextMenu LI { 17 | list-style: none; 18 | padding: 0px; 19 | margin: 0px; 20 | } 21 | 22 | .contextMenu A { 23 | color: #333; 24 | text-decoration: none; 25 | display: block; 26 | line-height: 20px; 27 | height: 20px; 28 | background-position: 6px center; 29 | background-repeat: no-repeat; 30 | outline: none; 31 | padding: 1px 5px; 32 | padding-left: 28px; 33 | border: 1px #EEE solid; 34 | } 35 | 36 | .contextMenu LI:hover A { 37 | background-color: #D2E6FF; 38 | color: black; 39 | border: 1px #84ACDD solid; 40 | opacity: 0.8; 41 | filter: alpha(opacity = 80); 42 | } 43 | 44 | .contextMenu LI.disabled A { 45 | color: #AAA; 46 | cursor: default; 47 | } 48 | 49 | .contextMenu LI.disabled :hover A { 50 | color: #FFF; 51 | background-color: transparent; 52 | } 53 | 54 | .contextMenu LI.separator { 55 | border-top: solid 1px #CCC; 56 | } 57 | 58 | /* 59 | Adding Icons 60 | 61 | You can add icons to the context menu by adding 62 | classes to the respective LI element(s) 63 | */ 64 | .contextMenu LI.edit A { 65 | background-image: url(../images/page_white_edit.png); 66 | } 67 | 68 | .contextMenu LI.cut A { 69 | background-image: url(../images/cut.png); 70 | } 71 | 72 | .contextMenu LI.copy A { 73 | background-image: url(../images/page_white_copy.png); 74 | } 75 | 76 | .contextMenu LI.paste A { 77 | background-image: url(../images/page_white_paste.png); 78 | } 79 | 80 | .contextMenu LI.delete A { 81 | background-image: url(../images/page_white_delete.png); 82 | } 83 | 84 | .contextMenu LI.quit A { 85 | background-image: url(../images/door.png); 86 | } -------------------------------------------------------------------------------- /NgxStatMgr/static/contextMenu/images/cut.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/contextMenu/images/cut.png -------------------------------------------------------------------------------- /NgxStatMgr/static/contextMenu/images/door.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/contextMenu/images/door.png -------------------------------------------------------------------------------- /NgxStatMgr/static/contextMenu/images/page_white_copy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/contextMenu/images/page_white_copy.png -------------------------------------------------------------------------------- /NgxStatMgr/static/contextMenu/images/page_white_delete.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/contextMenu/images/page_white_delete.png -------------------------------------------------------------------------------- /NgxStatMgr/static/contextMenu/images/page_white_edit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/contextMenu/images/page_white_edit.png -------------------------------------------------------------------------------- /NgxStatMgr/static/contextMenu/images/page_white_paste.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/contextMenu/images/page_white_paste.png -------------------------------------------------------------------------------- /NgxStatMgr/static/css/main.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/css/main.css -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/chart/test/barchart.html: -------------------------------------------------------------------------------- 1 | 2 | 40 | 41 |
-------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/chart/test/hbarchart.html: -------------------------------------------------------------------------------- 1 | 2 | 40 | 41 |
-------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/chart/test/linechart.html: -------------------------------------------------------------------------------- 1 | 33 | 34 |
35 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/chart/test/piechart.html: -------------------------------------------------------------------------------- 1 | 2 | 52 | 53 |
54 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/combox/area_all.html: -------------------------------------------------------------------------------- 1 | [ 2 | ["", "请选择城市"] 3 | ] -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/combox/area_bj.html: -------------------------------------------------------------------------------- 1 | [ 2 | ["东城", "东城"], 3 | ["西城", "西城"], 4 | ["崇文", "崇文"], 5 | ["宣武", "宣武"], 6 | ["朝阳", "朝阳"], 7 | ["丰台", "丰台"], 8 | ["石景山", "石景山"], 9 | ["海淀", "海淀"], 10 | ["门头沟", "门头沟"], 11 | ["房山", "房山"], 12 | ["通州", "通州"], 13 | ["顺义", "顺义"], 14 | ["昌平", "昌平"], 15 | ["大兴", "大兴"], 16 | ["平谷", "平谷"], 17 | ["怀柔", "怀柔"], 18 | ["密云", "密云"], 19 | ["延庆", "延庆"] 20 | ] -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/combox/area_sh.html: -------------------------------------------------------------------------------- 1 | [ 2 | ["崇明", "崇明"], 3 | ["黄浦", "黄浦"], 4 | ["卢湾", "卢湾"], 5 | ["徐汇", "徐汇"], 6 | ["长宁", "长宁"], 7 | ["静安", "静安"], 8 | ["普陀", "普陀"], 9 | ["闸北", "闸北"], 10 | ["虹口", "虹口"], 11 | ["杨浦", "杨浦"], 12 | ["闵行", "闵行"], 13 | ["宝山", "宝山"], 14 | ["嘉定", "嘉定"], 15 | ["浦东", "浦东"], 16 | ["金山", "金山"], 17 | ["松江", "松江"], 18 | ["青浦", "青浦"], 19 | ["南汇", "南汇"], 20 | ["奉贤", "奉贤"], 21 | ["朱家角", "朱家角"] 22 | ] -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/combox/city_all.html: -------------------------------------------------------------------------------- 1 | [ 2 | ["all", "请选择省份"] 3 | ] -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/combox/city_bj.html: -------------------------------------------------------------------------------- 1 | [ 2 | ["all", "所有城市"], 3 | ["bj", "北京市"] 4 | ] -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/combox/city_sh.html: -------------------------------------------------------------------------------- 1 | [ 2 | ["all", "所有城市"], 3 | ["sh", "上海市"] 4 | ] -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/common/ajaxDone.html: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode":"200", 3 | "message":"\u64cd\u4f5c\u6210\u529f", 4 | "navTabId":"", 5 | "rel":"", 6 | "callbackType":"", 7 | "forwardUrl":"", 8 | "confirmMsg":"" 9 | } 10 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/common/ajaxDone.json: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode":"200", 3 | "message":"\u64cd\u4f5c\u6210\u529f", 4 | "navTabId":"", 5 | "rel":"", 6 | "callbackType":"", 7 | "forwardUrl":"", 8 | "confirmMsg":"" 9 | } 10 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/common/ajaxTimeout.html: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode":"301", 3 | "message":"\u4f1a\u8bdd\u8d85\u65f6\uff0c\u8bf7\u91cd\u65b0\u767b\u5f55\u3002", 4 | "navTabId":"", 5 | "callbackType":"", 6 | "forwardUrl":"" 7 | } 8 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/common/dwz-team.xls: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/dwz/demo/common/dwz-team.xls -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/database/db_attachmentBrightBack.html: -------------------------------------------------------------------------------- 1 | { 2 | "id":"1000", 3 | "fileName":"测试文件.txt", 4 | "attachmentPath":"/upload/测试文件.txt", 5 | "attachmentSize":"1024" 6 | } -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/database/db_attachmentLookup.html: -------------------------------------------------------------------------------- 1 | 2 |

请选择需要上传的附件

3 | 4 |
5 | 6 |
7 |
8 |
9 |
附件:
10 |
11 |
12 |
13 |
    14 |
  • 15 |
  • 16 |
17 |
18 |
19 |
-------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/database/db_lookupSuggest.html: -------------------------------------------------------------------------------- 1 | [ 2 | {"id":"1", "orgName":"技术部", "orgNum":"1001"}, 3 | {"id":"2", "orgName":"人事部", "orgNum":"1002"}, 4 | {"id":"3", "orgName":"销售部", "orgNum":"1003"}, 5 | {"id":"4", "orgName":"售后部", "orgNum":"1004"} 6 | ] -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/database/db_select.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/database/treeBringBack.html: -------------------------------------------------------------------------------- 1 |

tree查找带回

2 | 3 |
4 |
5 | 6 |
7 |
8 |
城市:
9 |
10 | 11 |
12 |
13 | 14 |
15 |
区县:
16 |
17 | 18 | 19 | 查找带回 20 |
21 |
22 |
23 |
24 |
    25 |
  • 26 |
  • 27 |
28 |
29 |
30 |
-------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/database/treeLookup.html: -------------------------------------------------------------------------------- 1 | 2 |
3 |
4 | 18 |
19 | 20 |
21 | 24 |
25 |
-------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/pagination/ajaxDone1.html: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode":"200", 3 | "message":"\u64cd\u4f5c\u6210\u529f", 4 | "navTabId":"pagination", 5 | "rel":"", 6 | "callbackType":"closeCurrent", 7 | "forwardUrl":"", 8 | "confirmMsg":"" 9 | } 10 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/pagination/ajaxDone2.html: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode":"200", 3 | "message":"\u64cd\u4f5c\u6210\u529f", 4 | "navTabId":"", 5 | "rel":"jbsxBox", 6 | "callbackType":"closeCurrent", 7 | "forwardUrl":"", 8 | "confirmMsg":"" 9 | } 10 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/pagination/ajaxDone3.html: -------------------------------------------------------------------------------- 1 | { 2 | "statusCode":"200", 3 | "message":"\u64cd\u4f5c\u6210\u529f", 4 | "navTabId":"", 5 | "rel":"jbsxBox", 6 | "callbackType":"", 7 | "forwardUrl":"", 8 | "confirmMsg":"" 9 | } 10 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/pagination/dialog1.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | 7 |
8 | 9 | 10 |
11 |
12 | 13 | 14 |
15 | 16 |
17 |
18 |
    19 |
  • 20 |
  • 21 |
22 |
23 |
24 | 25 |
26 | 27 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/pagination/dialog2.html: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |
5 |
6 | 7 |
8 | 9 | 10 |
11 |
12 | 13 | 14 |
15 | 16 |
17 |
18 |
    19 |
  • 20 |
  • 21 |
22 |
23 |
24 | 25 |
26 | 27 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/pagination/layout2.html: -------------------------------------------------------------------------------- 1 |
2 |
3 | 4 |
5 | 6 |
7 | 8 |
9 | 10 |
11 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/sortDrag/1.html: -------------------------------------------------------------------------------- 1 |

单个sortDrag示例

2 | 3 |
4 | 5 |
A1
6 |
A2
7 |
A3
8 |
A4
9 |
A5
10 | 11 |
-------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/demo/sortDrag/2.html: -------------------------------------------------------------------------------- 1 |

多个sortDrag示例

2 | 3 |
4 | 5 |
6 |
A1
7 |
A2
8 |
A3
9 |
A4
10 |
A5
11 |
12 | 13 |
14 |
B1
15 |
B2
16 |
B3
17 |
B4
18 |
B5
19 |
20 | 21 |
-------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/doc/dwz-user-guide.chm: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jie123108/ngx_req_stat/446bc35c86acca8cb7c377e7e413bb83ec246ae5/NgxStatMgr/static/dwz/doc/dwz-user-guide.chm -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.checkbox.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author ZhangHuihua@msn.com 3 | */ 4 | (function($){ 5 | $.fn.extend({ 6 | 7 | checkboxCtrl: function(parent){ 8 | return this.each(function(){ 9 | var $trigger = $(this); 10 | $trigger.click(function(){ 11 | var group = $trigger.attr("group"); 12 | if ($trigger.is(":checkbox")) { 13 | var type = $trigger.is(":checked") ? "all" : "none"; 14 | if (group) $.checkbox.select(group, type, parent); 15 | } else { 16 | if (group) $.checkbox.select(group, $trigger.attr("selectType") || "all", parent); 17 | } 18 | 19 | }); 20 | }); 21 | } 22 | }); 23 | 24 | $.checkbox = { 25 | selectAll: function(_name, _parent){ 26 | this.select(_name, "all", _parent); 27 | }, 28 | unSelectAll: function(_name, _parent){ 29 | this.select(_name, "none", _parent); 30 | }, 31 | selectInvert: function(_name, _parent){ 32 | this.select(_name, "invert", _parent); 33 | }, 34 | select: function(_name, _type, _parent){ 35 | $parent = $(_parent || document); 36 | $checkboxLi = $parent.find(":checkbox[name='"+_name+"']"); 37 | switch(_type){ 38 | case "invert": 39 | $checkboxLi.each(function(){ 40 | $checkbox = $(this); 41 | $checkbox.attr('checked', !$checkbox.is(":checked")); 42 | }); 43 | break; 44 | case "none": 45 | $checkboxLi.attr('checked', false); 46 | break; 47 | default: 48 | $checkboxLi.attr('checked', true); 49 | break; 50 | } 51 | } 52 | }; 53 | })(jQuery); 54 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.contextmenu.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author zhanghuihua@msn.com 3 | */ 4 | 5 | (function($){ 6 | var menu, shadow, hash; 7 | $.fn.extend({ 8 | contextMenu: function(id, options){ 9 | var op = $.extend({ 10 | shadow : true, 11 | bindings:{}, 12 | ctrSub:null 13 | }, options 14 | ); 15 | 16 | if (!menu) { 17 | menu = $('
').appendTo('body').hide(); 18 | } 19 | if (!shadow) { 20 | shadow = $('
').appendTo('body').hide(); 21 | } 22 | 23 | hash = hash || []; 24 | hash.push({ 25 | id : id, 26 | shadow: op.shadow, 27 | bindings: op.bindings || {}, 28 | ctrSub: op.ctrSub 29 | }); 30 | 31 | var index = hash.length - 1; 32 | $(this).bind('contextmenu', function(e) { 33 | display(index, this, e, op); 34 | return false; 35 | }); 36 | return this; 37 | } 38 | }); 39 | 40 | function display(index, trigger, e, options) { 41 | var cur = hash[index]; 42 | 43 | var content = $(DWZ.frag[cur.id]); 44 | content.find('li').hoverClass(); 45 | 46 | // Send the content to the menu 47 | menu.html(content); 48 | 49 | $.each(cur.bindings, function(id, func) { 50 | $("[rel='"+id+"']", menu).bind('click', function(e) { 51 | hide(); 52 | func($(trigger), $("#"+cur.id)); 53 | }); 54 | }); 55 | 56 | var posX = e.pageX; 57 | var posY = e.pageY; 58 | if ($(window).width() < posX + menu.width()) posX -= menu.width(); 59 | if ($(window).height() < posY + menu.height()) posY -= menu.height(); 60 | 61 | menu.css({'left':posX,'top':posY}).show(); 62 | if (cur.shadow) shadow.css({width:menu.width(),height:menu.height(),left:posX+3,top:posY+3}).show(); 63 | $(document).one('click', hide); 64 | 65 | if ($.isFunction(cur.ctrSub)) {cur.ctrSub($(trigger), $("#"+cur.id));} 66 | } 67 | 68 | function hide() { 69 | menu.hide(); 70 | shadow.hide(); 71 | } 72 | })(jQuery); 73 | 74 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.cssTable.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Theme Plugins 3 | * @author ZhangHuihua@msn.com 4 | */ 5 | (function($){ 6 | $.fn.extend({ 7 | cssTable: function(options){ 8 | 9 | return this.each(function(){ 10 | var $this = $(this); 11 | var $trs = $this.find('tbody>tr'); 12 | var $grid = $this.parent(); // table 13 | var nowrap = $this.hasClass("nowrap"); 14 | 15 | $trs.hoverClass("hover").each(function(index){ 16 | var $tr = $(this); 17 | if (!nowrap && index % 2 == 1) $tr.addClass("trbg"); 18 | 19 | $tr.click(function(){ 20 | $trs.filter(".selected").removeClass("selected"); 21 | $tr.addClass("selected"); 22 | var sTarget = $tr.attr("target"); 23 | if (sTarget) { 24 | if ($("#"+sTarget, $grid).size() == 0) { 25 | $grid.prepend(''); 26 | } 27 | $("#"+sTarget, $grid).val($tr.attr("rel")); 28 | } 29 | }); 30 | 31 | }); 32 | 33 | $this.find("thead [orderField]").orderBy({ 34 | targetType: $this.attr("targetType"), 35 | rel:$this.attr("rel"), 36 | asc: $this.attr("asc") || "asc", 37 | desc: $this.attr("desc") || "desc" 38 | }); 39 | }); 40 | } 41 | }); 42 | })(jQuery); 43 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.dialogDrag.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Roger Wu 3 | */ 4 | (function($){ 5 | $.fn.dialogDrag = function(options){ 6 | if (typeof options == 'string') { 7 | if (options == 'destroy') 8 | return this.each(function() { 9 | var dialog = this; 10 | $("div.dialogHeader", dialog).unbind("mousedown"); 11 | }); 12 | } 13 | return this.each(function(){ 14 | var dialog = $(this); 15 | $("div.dialogHeader", dialog).mousedown(function(e){ 16 | $.pdialog.switchDialog(dialog); 17 | dialog.data("task",true); 18 | setTimeout(function(){ 19 | if(dialog.data("task"))$.dialogDrag.start(dialog,e); 20 | },100); 21 | return false; 22 | }).mouseup(function(e){ 23 | dialog.data("task",false); 24 | return false; 25 | }); 26 | }); 27 | }; 28 | $.dialogDrag = { 29 | currId:null, 30 | _init:function(dialog) { 31 | this.currId = new Date().getTime(); 32 | var shadow = $("#dialogProxy"); 33 | if (!shadow.size()) { 34 | shadow = $(DWZ.frag["dialogProxy"]); 35 | $("body").append(shadow); 36 | } 37 | $("h1", shadow).html($(".dialogHeader h1", dialog).text()); 38 | }, 39 | start:function(dialog,event){ 40 | this._init(dialog); 41 | var sh = $("#dialogProxy"); 42 | sh.css({ 43 | left: dialog.css("left"), 44 | top: dialog.css("top"), 45 | height: dialog.css("height"), 46 | width: dialog.css("width"), 47 | zIndex:parseInt(dialog.css("zIndex")) + 1 48 | }).show(); 49 | $("div.dialogContent",sh).css("height",$("div.dialogContent",dialog).css("height")); 50 | sh.data("dialog",dialog); 51 | dialog.css({left:"-10000px",top:"-10000px"}); 52 | $(".shadow").hide(); 53 | $(sh).jDrag({ 54 | selector:".dialogHeader", 55 | stop: this.stop, 56 | event:event 57 | }); 58 | return false; 59 | }, 60 | stop:function(){ 61 | var sh = $(arguments[0]); 62 | var dialog = sh.data("dialog"); 63 | $(dialog).css({left:$(sh).css("left"),top:$(sh).css("top")}); 64 | $.pdialog.attachShadow(dialog); 65 | $(sh).hide(); 66 | } 67 | } 68 | })(jQuery); -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.panel.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author Roger Wu 3 | * @version 1.0 4 | */ 5 | (function($){ 6 | $.extend($.fn, { 7 | jPanel:function(options){ 8 | var op = $.extend({header:"panelHeader", headerC:"panelHeaderContent", content:"panelContent", coll:"collapsable", exp:"expandable", footer:"panelFooter", footerC:"panelFooterContent"}, options); 9 | return this.each(function(){ 10 | var $panel = $(this); 11 | var close = $panel.hasClass("close"); 12 | var collapse = $panel.hasClass("collapse"); 13 | 14 | var $content = $(">div", $panel).addClass(op.content); 15 | var title = $(">h1",$panel).wrap('
'); 16 | if(collapse)$("").addClass(close?op.exp:op.coll).insertAfter(title); 17 | 18 | var header = $(">div:first", $panel); 19 | var footer = $('
').appendTo($panel); 20 | 21 | var defaultH = $panel.attr("defH")?$panel.attr("defH"):0; 22 | var minH = $panel.attr("minH")?$panel.attr("minH"):0; 23 | if (close) 24 | $content.css({ 25 | height: "0px", 26 | display: "none" 27 | }); 28 | else { 29 | if (defaultH > 0) 30 | $content.height(defaultH + "px"); 31 | else if(minH > 0){ 32 | $content.css("minHeight", minH+"px"); 33 | } 34 | } 35 | if(!collapse) return; 36 | var $pucker = $("a", header); 37 | var inH = $content.innerHeight() - 6; 38 | if(minH > 0 && minH >= inH) defaultH = minH; 39 | else defaultH = inH; 40 | $pucker.click(function(){ 41 | if($pucker.hasClass(op.exp)){ 42 | $content.jBlindDown({to:defaultH,call:function(){ 43 | $pucker.removeClass(op.exp).addClass(op.coll); 44 | if(minH > 0) $content.css("minHeight",minH+"px"); 45 | }}); 46 | } else { 47 | if(minH > 0) $content.css("minHeight",""); 48 | if(minH >= inH) $content.css("height", minH+"px"); 49 | $content.jBlindUp({call:function(){ 50 | $pucker.removeClass(op.coll).addClass(op.exp); 51 | }}); 52 | } 53 | return false; 54 | }); 55 | }); 56 | } 57 | }); 58 | })(jQuery); 59 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.print.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author ZhangHuihua@msn.com 3 | * 4 | */ 5 | (function($){ 6 | $.printBox = function(rel){ 7 | var _printBoxId = 'printBox'; 8 | var $contentBox = rel ? $('#'+rel) : $("body"), 9 | $printBox = $('#'+_printBoxId); 10 | 11 | if ($printBox.size()==0){ 12 | $printBox = $('
').appendTo("body"); 13 | } 14 | 15 | $printBox.html($contentBox.html()).find("[layoutH]").height("auto"); 16 | window.print(); 17 | 18 | } 19 | 20 | })(jQuery); 21 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.regional.zh.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author ZhangHuihua@msn.com 3 | */ 4 | (function($){ 5 | // jQuery validate 6 | $.extend($.validator.messages, { 7 | required: "必填字段", 8 | remote: "请修正该字段", 9 | email: "请输入正确格式的电子邮件", 10 | url: "请输入合法的网址", 11 | date: "请输入合法的日期", 12 | dateISO: "请输入合法的日期 (ISO).", 13 | number: "请输入合法的数字", 14 | digits: "只能输入整数", 15 | creditcard: "请输入合法的信用卡号", 16 | equalTo: "请再次输入相同的值", 17 | accept: "请输入拥有合法后缀名的字符串", 18 | maxlength: $.validator.format("长度最多是 {0} 的字符串"), 19 | minlength: $.validator.format("长度最少是 {0} 的字符串"), 20 | rangelength: $.validator.format("长度介于 {0} 和 {1} 之间的字符串"), 21 | range: $.validator.format("请输入一个介于 {0} 和 {1} 之间的值"), 22 | max: $.validator.format("请输入一个最大为 {0} 的值"), 23 | min: $.validator.format("请输入一个最小为 {0} 的值"), 24 | 25 | alphanumeric: "字母、数字、下划线", 26 | lettersonly: "必须是字母", 27 | phone: "数字、空格、括号" 28 | }); 29 | 30 | // DWZ regional 31 | $.setRegional("datepicker", { 32 | dayNames: ['日', '一', '二', '三', '四', '五', '六'], 33 | monthNames: ['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月'] 34 | }); 35 | $.setRegional("alertMsg", { 36 | title:{error:"错误", info:"提示", warn:"警告", correct:"成功", confirm:"确认提示"}, 37 | butMsg:{ok:"确定", yes:"是", no:"否", cancel:"取消"} 38 | }); 39 | })(jQuery); -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.switchEnv.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @author zhanghuihua@msn.com 3 | */ 4 | (function($){ 5 | $.fn.navMenu = function(){ 6 | return this.each(function(){ 7 | var $box = $(this); 8 | $box.find("li>a").click(function(){ 9 | var $a = $(this); 10 | $.post($a.attr("href"), {}, function(html){ 11 | $("#sidebar").find(".accordion").remove().end().append(html).initUI(); 12 | $box.find("li").removeClass("selected"); 13 | $a.parent().addClass("selected"); 14 | navTab.closeAllTab(); 15 | }); 16 | return false; 17 | }); 18 | }); 19 | } 20 | 21 | $.fn.switchEnv = function(){ 22 | var op = {cities$:">ul>li", boxTitle$:">a>span"}; 23 | return this.each(function(){ 24 | var $this = $(this); 25 | $this.click(function(){ 26 | if ($this.hasClass("selected")){ 27 | _hide($this); 28 | } else { 29 | _show($this); 30 | } 31 | return false; 32 | }); 33 | 34 | $this.find(op.cities$).click(function(){ 35 | var $li = $(this); 36 | 37 | $.post($li.find(">a").attr("href"), {}, function(html){ 38 | _hide($this); 39 | $this.find(op.boxTitle$).html($li.find(">a").html()); 40 | navTab.closeAllTab(); 41 | $("#sidebar").find(".accordion").remove().end().append(html).initUI(); 42 | }); 43 | return false; 44 | }); 45 | }); 46 | } 47 | 48 | function _show($box){ 49 | $box.addClass("selected"); 50 | $(document).bind("click",{box:$box}, _handler); 51 | } 52 | function _hide($box){ 53 | $box.removeClass("selected"); 54 | $(document).unbind("click", _handler); 55 | } 56 | 57 | function _handler(event){ 58 | _hide(event.data.box); 59 | } 60 | })(jQuery); 61 | 62 | 63 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.theme.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Theme Plugins 3 | * @author ZhangHuihua@msn.com 4 | */ 5 | (function($){ 6 | $.fn.extend({ 7 | theme: function(options){ 8 | var op = $.extend({themeBase:"themes"}, options); 9 | var _themeHref = op.themeBase + "/#theme#/style.css"; 10 | return this.each(function(){ 11 | var jThemeLi = $(this).find(">li[theme]"); 12 | var setTheme = function(themeName){ 13 | $("head").find("link[href$='style.css']").attr("href", _themeHref.replace("#theme#", themeName)); 14 | jThemeLi.find(">div").removeClass("selected"); 15 | jThemeLi.filter("[theme="+themeName+"]").find(">div").addClass("selected"); 16 | 17 | if ($.isFunction($.cookie)) $.cookie("dwz_theme", themeName); 18 | } 19 | 20 | jThemeLi.each(function(index){ 21 | var $this = $(this); 22 | var themeName = $this.attr("theme"); 23 | $this.addClass(themeName).click(function(){ 24 | setTheme(themeName); 25 | }); 26 | }); 27 | 28 | if ($.isFunction($.cookie)){ 29 | var themeName = $.cookie("dwz_theme"); 30 | if (themeName) { 31 | setTheme(themeName); 32 | } 33 | } 34 | 35 | }); 36 | } 37 | }); 38 | })(jQuery); 39 | -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/dwz.validate.method.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @requires jquery.validate.js 3 | * @author ZhangHuihua@msn.com 4 | */ 5 | (function($){ 6 | if ($.validator) { 7 | $.validator.addMethod("alphanumeric", function(value, element) { 8 | return this.optional(element) || /^\w+$/i.test(value); 9 | }, "Letters, numbers or underscores only please"); 10 | 11 | $.validator.addMethod("lettersonly", function(value, element) { 12 | return this.optional(element) || /^[a-z]+$/i.test(value); 13 | }, "Letters only please"); 14 | 15 | $.validator.addMethod("phone", function(value, element) { 16 | return this.optional(element) || /^[0-9 \(\)]{7,30}$/.test(value); 17 | }, "Please specify a valid phone number"); 18 | 19 | $.validator.addMethod("postcode", function(value, element) { 20 | return this.optional(element) || /^[0-9 A-Za-z]{5,20}$/.test(value); 21 | }, "Please specify a valid postcode"); 22 | 23 | $.validator.addMethod("date", function(value, element) { 24 | value = value.replace(/\s+/g, ""); 25 | if (String.prototype.parseDate){ 26 | var $input = $(element); 27 | var pattern = $input.attr('dateFmt') || 'yyyy-MM-dd'; 28 | 29 | return !$input.val() || $input.val().parseDate(pattern); 30 | } else { 31 | return this.optional(element) || value.match(/^\d{4}[\/-]\d{1,2}[\/-]\d{1,2}$/); 32 | } 33 | }, "Please enter a valid date."); 34 | 35 | /*自定义js函数验证 36 | * 37 | */ 38 | $.validator.addMethod("customvalid", function(value, element, params) { 39 | try{ 40 | return eval('(' + params + ')'); 41 | }catch(e){ 42 | return false; 43 | } 44 | }, "Please fix this field."); 45 | 46 | $.validator.addClassRules({ 47 | date: {date: true}, 48 | alphanumeric: { alphanumeric: true }, 49 | lettersonly: { lettersonly: true }, 50 | phone: { phone: true }, 51 | postcode: {postcode: true} 52 | }); 53 | $.validator.setDefaults({errorElement:"span"}); 54 | $.validator.autoCreateRanges = true; 55 | 56 | } 57 | 58 | })(jQuery); -------------------------------------------------------------------------------- /NgxStatMgr/static/dwz/js/jquery.bgiframe.js: -------------------------------------------------------------------------------- 1 | /*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) 2 | * Licensed under the MIT License (LICENSE.txt). 3 | * 4 | * Version 2.1.3-pre 5 | */ 6 | 7 | (function($){ 8 | 9 | $.fn.bgiframe = ($.browser.msie && /msie 6\.0/i.test(navigator.userAgent) ? function(s) { 10 | s = $.extend({ 11 | top : 'auto', // auto == .currentStyle.borderTopWidth 12 | left : 'auto', // auto == .currentStyle.borderLeftWidth 13 | width : 'auto', // auto == offsetWidth 14 | height : 'auto', // auto == offsetHeight 15 | opacity : true, 16 | src : 'javascript:false;' 17 | }, s); 18 | var html = '