├── .gitignore
├── LICENSE
├── README.md
├── images
├── 001.png
├── 002.png
├── 003.png
├── 004.png
├── 005.png
├── 006.png
├── 007.png
└── 008.png
├── logSystem
├── .idea
│ ├── logSystem.iml
│ ├── misc.xml
│ ├── modules.xml
│ └── workspace.xml
├── conf
│ ├── config.go
│ └── logagent.conf
├── kafka
│ └── kafka.go
├── logs
│ ├── log.go
│ ├── log_transfer.log
│ └── logagent.log
├── logtransfer
│ ├── conf
│ │ └── log_transfer.conf
│ ├── config.go
│ ├── es.go
│ ├── kafka.go
│ ├── logs.go
│ ├── main.go
│ └── run.go
├── main
│ ├── etcd.go
│ ├── ip.go
│ ├── main.go
│ └── server.go
├── tailf
│ └── tail.go
└── utils
│ └── setconf
│ └── etcdconfig.go
└── web_logger
├── .idea
├── misc.xml
├── modules.xml
├── web_logger.iml
└── workspace.xml
├── conf
└── app.conf
├── controller
├── appcontroller
│ └── app.go
└── logcontroller
│ └── log.go
├── main
└── main.go
├── model
├── app.go
└── log.go
├── router
└── router.go
├── static
├── css
│ ├── DT_bootstrap.css
│ ├── about-us.css
│ ├── animate.css
│ ├── blog.css
│ ├── blue.css
│ ├── bootstrap-fileupload.css
│ ├── bootstrap-modal.css
│ ├── bootstrap-responsive.min.css
│ ├── bootstrap-responsive1.min.css
│ ├── bootstrap-tag.css
│ ├── bootstrap-toggle-buttons.css
│ ├── bootstrap-tree.css
│ ├── bootstrap-wysihtml5.css
│ ├── bootstrap.min.css
│ ├── brown.css
│ ├── chosen.css
│ ├── clockface.css
│ ├── colorpicker.css
│ ├── coming-soon.css
│ ├── datepicker.css
│ ├── daterangepicker.css
│ ├── datetimepicker.css
│ ├── default.css
│ ├── dropzone.css
│ ├── email.css
│ ├── error.css
│ ├── font-awesome.css
│ ├── font-awesome.min.css
│ ├── fullcalendar.css
│ ├── glyphicons.css
│ ├── grey.css
│ ├── halflings.css
│ ├── inbox.css
│ ├── invoice.css
│ ├── jquery-ui-1.10.1.custom.min.css
│ ├── jquery.easy-pie-chart.css
│ ├── jquery.fancybox.css
│ ├── jquery.fileupload-ui.css
│ ├── jquery.gritter.css
│ ├── jquery.nestable.css
│ ├── jquery.tagsinput.css
│ ├── jquery.ui.slider.css
│ ├── jqvmap.css
│ ├── light.css
│ ├── lock.css
│ ├── login-soft.css
│ ├── login.css
│ ├── multi-select-metro.css
│ ├── news.css
│ ├── pricing-tables.css
│ ├── print.css
│ ├── profile.css
│ ├── promo.css
│ ├── purple.css
│ ├── search.css
│ ├── select2_metro.css
│ ├── style-metro.css
│ ├── style-non-responsive.css
│ ├── style-responsive.css
│ ├── style.css
│ ├── timeline.css
│ ├── timepicker.css
│ └── uniform.default.css
├── image
│ ├── 1.jpg
│ ├── 10.jpg
│ ├── 11.jpg
│ ├── 2.jpg
│ ├── 3.jpg
│ ├── 4.jpg
│ ├── 5.jpg
│ ├── 6.jpg
│ ├── 7.jpg
│ ├── 8.jpg
│ ├── 9.jpg
│ ├── KwPYo.jpg
│ ├── alpha.png
│ ├── amazon.png
│ ├── animated-overlay.gif
│ ├── avatar.png
│ ├── avatar1.jpg
│ ├── avatar1_small.jpg
│ ├── avatar2.jpg
│ ├── avatar3.jpg
│ ├── behance.png
│ ├── bg-input-focus.png
│ ├── bg-input.png
│ ├── bg-opacity.png
│ ├── bg-white-lock.png
│ ├── bg
│ │ ├── 1.jpg
│ │ ├── 2.jpg
│ │ ├── 3.jpg
│ │ └── 4.jpg
│ ├── blank.gif
│ ├── blogger.png
│ ├── bstree-halflings.png
│ ├── chosen-sprite.png
│ ├── css
│ ├── datatable-row-openclose.png
│ ├── deviantart.png
│ ├── dribbble.png
│ ├── dropbox.png
│ ├── earth.jpg
│ ├── evernote.png
│ ├── facebook.png
│ ├── fancybox_loading.gif
│ ├── fancybox_overlay.png
│ ├── fancybox_sprite.png
│ ├── favicon.ico
│ ├── fontawesome-webfont.eot
│ ├── fontawesome-webfont.svg
│ ├── fontawesome-webfont.ttf
│ ├── fontawesome-webfont.woff
│ ├── forrst.png
│ ├── github.png
│ ├── glyphicons-halflings-white.png
│ ├── glyphicons-halflings.png
│ ├── glyphicons-regular.eot
│ ├── glyphicons-regular.svg
│ ├── glyphicons-regular.ttf
│ ├── glyphicons-regular.woff
│ ├── glyphicons-white.png
│ ├── glyphicons-white.svg
│ ├── glyphicons.png
│ ├── glyphicons_halflings-white.png
│ ├── glyphicons_halflings-white.svg
│ ├── glyphicons_halflings.png
│ ├── glyphicons_halflings.svg
│ ├── glyphiconshalflings-regular.eot
│ ├── glyphiconshalflings-regular.svg
│ ├── glyphiconshalflings-regular.ttf
│ ├── glyphiconshalflings-regular.woff
│ ├── googleplus.png
│ ├── gritter-light.png
│ ├── gritter.png
│ ├── hor-menu-search-close-white.png
│ ├── hor-menu-search-close.png
│ ├── hor-menu-search.png
│ ├── hue.png
│ ├── icon-color-close.png
│ ├── icon-color.png
│ ├── icon-img-down.png
│ ├── icon-img-up.png
│ ├── ie-spacer.gif
│ ├── image1.jpg
│ ├── image2.jpg
│ ├── image3.jpg
│ ├── image4.jpg
│ ├── image5.jpg
│ ├── img1.png
│ ├── img1_2.png
│ ├── img2.png
│ ├── img3.png
│ ├── img4.png
│ ├── inbox-nav-arrow-blue.png
│ ├── instagram.png
│ ├── iphone.png
│ ├── item_img.jpg
│ ├── item_img1.jpg
│ ├── jolicloud.png
│ ├── js
│ ├── last-fm.png
│ ├── linkedin.png
│ ├── loading.gif
│ ├── logo-big.png
│ ├── logo.png
│ ├── logo_azteca.jpg
│ ├── logo_conquer.jpg
│ ├── logo_metronic.jpg
│ ├── menu-toggler.png
│ ├── overlay-icon.png
│ ├── photo1.jpg
│ ├── photo2.jpg
│ ├── photo3.jpg
│ ├── photo4.jpg
│ ├── photo5.jpg
│ ├── photo6.jpg
│ ├── picasa.png
│ ├── pintrest.png
│ ├── portlet-collapse-icon-white.png
│ ├── portlet-collapse-icon.png
│ ├── portlet-config-icon-white.png
│ ├── portlet-config-icon.png
│ ├── portlet-expand-icon-white.png
│ ├── portlet-expand-icon.png
│ ├── portlet-reload-icon-white.png
│ ├── portlet-reload-icon.png
│ ├── portlet-remove-icon-white.png
│ ├── portlet-remove-icon.png
│ ├── preview_02.png
│ ├── preview_03.png
│ ├── preview_04.png
│ ├── preview_05.png
│ ├── preview_06.png
│ ├── preview_07.png
│ ├── preview_08.png
│ ├── preview_09.png
│ ├── preview_10.png
│ ├── preview_11.png
│ ├── preview_12.png
│ ├── preview_13.png
│ ├── preview_14.png
│ ├── preview_15.png
│ ├── preview_16.png
│ ├── preview_17.png
│ ├── profile-img.png
│ ├── profile.jpg
│ ├── progressbar.gif
│ ├── remove-icon-small.png
│ ├── rss.png
│ ├── saturation.png
│ ├── search-icon.png
│ ├── select2-spinner.gif
│ ├── select2.png
│ ├── select2x2.png
│ ├── sidebar-menu-arrow.png
│ ├── sidebar-search-close.png
│ ├── sidebar-toggler.jpg
│ ├── skype.png
│ ├── social_facebook.png
│ ├── social_googleplus.png
│ ├── social_linkedin.png
│ ├── social_rss.png
│ ├── social_twitter.png
│ ├── sort_asc.png
│ ├── sort_asc_disabled.png
│ ├── sort_both.png
│ ├── sort_desc.png
│ ├── sort_desc_disabled.png
│ ├── spotify.png
│ ├── sprite.png
│ ├── spritemap.png
│ ├── spritemap@2x.png
│ ├── stumbleupon.png
│ ├── switch.png
│ ├── syncfusion-icons-white.png
│ ├── syncfusion-icons.png
│ ├── tumblr.png
│ ├── twitter.png
│ ├── ui-bg_diagonals-thick_18_b81900_40x40.png
│ ├── ui-bg_diagonals-thick_20_666666_40x40.png
│ ├── ui-bg_flat_10_000000_40x100.png
│ ├── ui-bg_glass_100_f6f6f6_1x400.png
│ ├── ui-bg_glass_100_fdf5ce_1x400.png
│ ├── ui-bg_glass_65_ffffff_1x400.png
│ ├── ui-bg_gloss-wave_35_f6a828_500x100.png
│ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png
│ ├── ui-bg_highlight-soft_75_ffe45c_1x100.png
│ ├── ui-icons_222222_256x240.png
│ ├── ui-icons_228ef1_256x240.png
│ ├── ui-icons_888888_256x240.png
│ ├── ui-icons_ef8c08_256x240.png
│ ├── ui-icons_ffd27a_256x240.png
│ ├── ui-icons_ffffff_256x240.png
│ ├── vimeo.png
│ ├── vk.png
│ ├── walmart.png
│ ├── wordpress.png
│ ├── xing.png
│ ├── yahoo.png
│ └── youtube.png
└── js
│ ├── DT_bootstrap.js
│ ├── additional-methods.min.js
│ ├── app.js
│ ├── bootstrap-colorpicker.js
│ ├── bootstrap-datepicker.js
│ ├── bootstrap-datetimepicker.js
│ ├── bootstrap-fileupload.js
│ ├── bootstrap-modal.js
│ ├── bootstrap-modalmanager.js
│ ├── bootstrap-rtl.min.js
│ ├── bootstrap-tag.js
│ ├── bootstrap-timepicker.js
│ ├── bootstrap-tree.js
│ ├── bootstrap-wysihtml5.js
│ ├── bootstrap.min.js
│ ├── breakpoints.js
│ ├── breakpoints.min.js
│ ├── calendar.js
│ ├── canvas-to-blob.min.js
│ ├── charts.js
│ ├── chosen.jquery.min.js
│ ├── ckeditor.js
│ ├── clockface.js
│ ├── coming-soon.js
│ ├── contact-us.js
│ ├── date.js
│ ├── daterangepicker.js
│ ├── dropzone.js
│ ├── excanvas.js
│ ├── excanvas.min.js
│ ├── form-components.js
│ ├── form-fileupload.js
│ ├── form-samples.js
│ ├── form-validation.js
│ ├── form-wizard.js
│ ├── fullcalendar.min.js
│ ├── gallery.js
│ ├── gmaps.js
│ ├── inbox.js
│ ├── index.js
│ ├── jquery-1.10.1.min.js
│ ├── jquery-1.8.3.min.js
│ ├── jquery-migrate-1.2.1.min.js
│ ├── jquery-ui-1.10.1.custom.min.js
│ ├── jquery.backstretch.min.js
│ ├── jquery.blockui.min.js
│ ├── jquery.bootpag.min.js
│ ├── jquery.bootstrap.wizard.min.js
│ ├── jquery.cookie.min.js
│ ├── jquery.countdown.js
│ ├── jquery.dataTables.js
│ ├── jquery.dataTables.min.js
│ ├── jquery.easy-pie-chart.js
│ ├── jquery.fancybox.pack.js
│ ├── jquery.fileupload-fp.js
│ ├── jquery.fileupload-ui.js
│ ├── jquery.fileupload.js
│ ├── jquery.flot.crosshair.js
│ ├── jquery.flot.js
│ ├── jquery.flot.pie.js
│ ├── jquery.flot.resize.js
│ ├── jquery.flot.stack.js
│ ├── jquery.gritter.js
│ ├── jquery.iframe-transport.js
│ ├── jquery.input-ip-address-control-1.0.min.js
│ ├── jquery.inputmask.bundle.min.js
│ ├── jquery.knob.js
│ ├── jquery.multi-select.js
│ ├── jquery.nestable.js
│ ├── jquery.pulsate.min.js
│ ├── jquery.slimscroll.min.js
│ ├── jquery.sparkline.min.js
│ ├── jquery.tagsinput.min.js
│ ├── jquery.toggle.buttons.js
│ ├── jquery.ui.widget.js
│ ├── jquery.uniform.min.js
│ ├── jquery.validate.min.js
│ ├── jquery.vmap.europe.js
│ ├── jquery.vmap.germany.js
│ ├── jquery.vmap.js
│ ├── jquery.vmap.russia.js
│ ├── jquery.vmap.sampledata.js
│ ├── jquery.vmap.usa.js
│ ├── jquery.vmap.world.js
│ ├── jquery.xdr-transport.js
│ ├── load-image.min.js
│ ├── lock.js
│ ├── login-soft.js
│ ├── login.js
│ ├── maps-google.js
│ ├── maps-vector.js
│ ├── portlet-draggable.js
│ ├── respond.js
│ ├── respond.min.js
│ ├── search.js
│ ├── select2.min.js
│ ├── table-advanced.js
│ ├── table-editable.js
│ ├── table-managed.js
│ ├── tmpl.min.js
│ ├── ui-general.js
│ ├── ui-jqueryui.js
│ ├── ui-modals.js
│ ├── ui-nestable.js
│ ├── ui-sliders.js
│ ├── ui-tree.js
│ └── wysihtml5-0.3.0.js
└── views
├── app
├── apply.html
├── error.html
└── index.html
├── layout
└── layout.html
└── log
├── apply.html
├── error.html
└── index.html
/.gitignore:
--------------------------------------------------------------------------------
1 | # Binaries for programs and plugins
2 | *.exe
3 | *.exe~
4 | *.dll
5 | *.so
6 | *.dylib
7 |
8 | # Test binary, build with `go test -c`
9 | *.test
10 |
11 | # Output of the go coverage tool, specifically when used with LiteIDE
12 | *.out
13 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 日志收集系统
2 |
3 | #### 1.项目背景
4 |
5 | * 每个系统都有日志,当系统出现问题时,需要通过日志解决问题
6 | * 当系统机器比较少时,登录到服务器上查看即可满足
7 | * 当系统机器规模巨大,登录到机器上查看几乎不显示
8 | * 数据挖掘分析
9 |
10 | #### 2.解决方案
11 |
12 | * 把机器上的日志实时收集,统一存储到中心系统
13 | * 然后再对这些日志建立索引,通过搜索找到对应日志
14 | * 通过提供友好的web页面,通过web即可完成日志搜索
15 |
16 | #### 3.面临的问题
17 |
18 | * 实时日志量非常大, 每天几十亿条
19 | * 日志准时收集, 延迟控制在分钟级别
20 | * 能够水平扩展
21 |
22 |
23 | #### 4.ELK方案缺点
24 |
25 | * 运维成本高,每增加一个日志搜集,都需要手动需要修改配置
26 | * 监控缺失,无法准确获取logstash的状态
27 | * 无法做定制化开发及维护
28 |
29 | #### 5.日志搜集系统设计
30 |
31 | * 布在每一台业务机器上去, 客户端根据配置去读要搜集的每一个日志
32 |
33 |

34 |
35 | * 组件介绍
36 | * LogAgent: 日志搜集客户端,用来收集服务器上的日志
37 | * Kafka: 高吞吐量分布式队列,linkin开发,apache顶级开源项目
38 | * elasticsearch: 开源的搜索引擎,提供基于http restfuld的web接口
39 | * hadoop: 分布式计算框架,能够对大量数据进行分布式处理的平台
40 | * strom: 实时计算框架
41 |
42 | #### 6.kafka应用场景
43 |
44 | * 1).异步处理,把非关键流程异步化,提高系统的响应时间和健壮性
45 |
46 | 
47 |
48 | * 2).通过消息队列应用解耦
49 |
50 | 
51 |
52 | * 3).流量削峰
53 |
54 | 
55 |
56 | #### 7.zookeeper应用场景
57 |
58 | * 1).服务注册&服务发现
59 |
60 | 
61 |
62 | * 2).作为"配置中心"使用
63 | * web平台管理所有业务配置写入到zookeeper,业务应用A、B、C与zookeeper保持长连接,如果配置有变动,zookeeper节点会通知到业务应用
64 | *
65 | 
66 |
67 | * 3).分布式锁
68 | * zookeeper是强一致的
69 | * 多个客户端同时在zookeeper上创建相同的node,只有一个创建成功
70 |
71 |
72 |
73 | #### 8.etcd介绍与使用
74 |
75 | * 概念:高可用的分布式key-value存储,可以用于配置共享和服务发现
76 | * 类似项目:zookeeper和consul
77 | * 开发语言:Go
78 | * 接口:提供restful的http接口,使用简单
79 | * 实现算法:基于raft算法的强一致性,高可用的服务存储目录
80 |
81 | #### 9.etcd应用场景
82 |
83 | * 服务发现与服务注册
84 | * 配置中心
85 | * 分布式锁
86 | * master选举
87 |
88 | #### 10.LogSystem初始设计
89 |
90 | * config:配置模块(日志路径,文件名).程序运行后,需要读取哪些日志,从config中获取
91 | * tailf:需要读取的日志,使用tailf的实例不断的拿到日志之后,放到channel里面
92 | * kafka:kafka的goroutine从channel里面拿数据,写到kafca里面
93 |
94 | 
95 |
96 | #### 11.LogSystem最终设计
97 |
98 | * 1.webLogger管理所有日志的配置,把配置写到etcd里面,
99 | * 2.LogSystem监听etcd的变化获取最新的配置,并且生效.
100 | * 3.按照etcd配置收集相关日志后,发到kafka里面
101 | * 4.logtransfer消费kafka里的数据,把数据写到es里面,通过kibana做数据的展示
102 |
103 | 
104 |
105 | #### 12.使用说明
106 |
107 | * 所需工具:
108 | * mysql
109 | * kafka
110 | * zookeeper
111 | * etcd
112 | * elasticsearch
113 | * kibana
114 |
115 |
116 | * 依赖的库
117 |
118 | ```
119 | go get github.com/coreos/etcd/clientv3
120 | go get github.com/Shopify/sarama
121 | go get gopkg.in/olivere/elastic.v5
122 | go get github.com/coreos/etcd/mvcc/mvccpb
123 | go get github.com/hpcloud/tail
124 | go get github.com/jmoiron/sqlx
125 | go get github.com/astaxie/beego
126 | // go get github.com/astaxie/beego/logs
127 | // go get github.com/astaxie/beego/config
128 | ```
129 |
130 | * 启用服务
131 | * zookeeper&kafka: **zookeeper-server-start /usr/local/etc/kafka/zookeeper.properties & kafka-server-start /usr/local/etc/kafka/server.properties**
132 | * etcd: **可直接执行对应文件夹etcd**
133 | * elasticsearch: **docker run -d -p 9200:9200 elasticsearch**
134 | * kibana: **docker run --name mykibana -e ELASTICSEARCH_URL=http://172.17.0.1:9200 -p 5601:5601 -d kibana**(kibana容器的运行需要指定elasticsearch的ur, http://172.17.0.1:9200)
135 |
136 | * 运行说明
137 | * Logsystem/main/ logsystem客户端收集
138 | * Logsystem/logtransfer 数据转发
139 | * web_logger etcd配置管理平台(127.0.0.1:9090)
--------------------------------------------------------------------------------
/images/001.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/images/001.png
--------------------------------------------------------------------------------
/images/002.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/images/002.png
--------------------------------------------------------------------------------
/images/003.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/images/003.png
--------------------------------------------------------------------------------
/images/004.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/images/004.png
--------------------------------------------------------------------------------
/images/005.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/images/005.png
--------------------------------------------------------------------------------
/images/006.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/images/006.png
--------------------------------------------------------------------------------
/images/007.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/images/007.png
--------------------------------------------------------------------------------
/images/008.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/images/008.png
--------------------------------------------------------------------------------
/logSystem/.idea/logSystem.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/logSystem/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/logSystem/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/logSystem/conf/config.go:
--------------------------------------------------------------------------------
1 | package conf
2 |
3 | import (
4 | "github.com/astaxie/beego/config"
5 | "fmt"
6 | "errors"
7 | )
8 |
9 | var (
10 | AppConfig *Config
11 | )
12 |
13 | type Config struct {
14 | LogLevel string
15 | LogPath string
16 | CollectConf []CollectConf
17 | ChanSize int
18 | KafkaAddr string
19 | EtcdAddr string
20 | EtcdKey string
21 | }
22 |
23 | type CollectConf struct {
24 | LogPath string `json:"log_path"`
25 | Topic string `json:"topic"`
26 | }
27 |
28 | func loadCollectConf(conf config.Configer) (err error) {
29 | var cc CollectConf
30 | cc.LogPath = conf.String("collect::log_path")
31 | if len(cc.LogPath) == 0 {
32 | err = errors.New("invalid collect::log_path")
33 | return
34 | }
35 | cc.Topic = conf.String("collect::topic")
36 | if len(cc.Topic) == 0 {
37 | err = errors.New("invalid collect::topic")
38 | return
39 | }
40 | AppConfig.CollectConf = append(AppConfig.CollectConf, cc)
41 | return
42 | }
43 |
44 | func InitConfig(confType, fileName string) (err error) {
45 |
46 | // 初始化配置库
47 | conf, err := config.NewConfig(confType, fileName)
48 | if err != nil {
49 | fmt.Println("new config failed,err :", err)
50 | return
51 | }
52 |
53 | // 读取 写日志 配置项
54 | AppConfig = &Config{
55 | LogLevel: conf.String("logs::log_level"),
56 | LogPath: conf.String("logs::log_path"),
57 | }
58 |
59 | AppConfig.ChanSize, err = conf.Int("collect::chan_size")
60 | if err != nil {
61 | AppConfig.ChanSize = 100
62 | }
63 |
64 | if len(AppConfig.LogLevel) == 0 {
65 | AppConfig.LogLevel = "debug"
66 | }
67 | if len(AppConfig.LogPath) == 0 {
68 | AppConfig.LogPath = "./logs"
69 | }
70 |
71 | AppConfig.KafkaAddr = conf.String("kafka::server_addr")
72 | if len(AppConfig.KafkaAddr) == 0 {
73 | err = fmt.Errorf("invalid kafka addr")
74 | return
75 | }
76 |
77 | AppConfig.EtcdAddr = conf.String("etcd::etcd_addr")
78 | if len(AppConfig.EtcdAddr) == 0 {
79 | err = fmt.Errorf("invalid etcd addr")
80 | return
81 | }
82 |
83 | AppConfig.EtcdKey = conf.String("etcd::config_key")
84 | if len(AppConfig.EtcdKey) == 0 {
85 | err = fmt.Errorf("invalid etcd Key")
86 | return
87 | }
88 |
89 | // 读取 收集日志 配置项
90 | err = loadCollectConf(conf)
91 | if err != nil {
92 | fmt.Printf("load collect conf failed, err:%v\n", err)
93 | return
94 | }
95 |
96 | return
97 | }
98 |
--------------------------------------------------------------------------------
/logSystem/conf/logagent.conf:
--------------------------------------------------------------------------------
1 |
2 | [logs]
3 | log_level=debug
4 | log_path=./logs/logagent.log
5 |
6 | [collect]
7 | log_path = ./logs/logagent.log
8 | topic=nginx_log
9 | chan_size=100
10 |
11 | [kafka]
12 | server_addr=localhost:9092
13 |
14 | [etcd]
15 | etcd_addr=localhost:2379
16 | config_key="/Users/cyhe/go/src/logSystem/conf"
17 |
--------------------------------------------------------------------------------
/logSystem/kafka/kafka.go:
--------------------------------------------------------------------------------
1 | package kafka
2 |
3 | import (
4 | "github.com/Shopify/sarama"
5 | "github.com/astaxie/beego/logs"
6 | )
7 |
8 | var (
9 | client sarama.SyncProducer
10 | )
11 |
12 | func InitKafka(addr string) (err error) {
13 | // 实例化配置config
14 | config := sarama.NewConfig()
15 | // 确认收到后,会回复到ack中,确保信息安全到达
16 | // 发给kafka放到内存里,
17 | config.Producer.RequiredAcks = sarama.WaitForAll
18 | // 随机分区,kafka分区, topic是分布式的, 可以理解为一个队列,
19 | config.Producer.Partitioner = sarama.NewRandomPartitioner
20 | config.Producer.Return.Successes = true
21 |
22 | // 实例化生产者,指定端口
23 | client, err = sarama.NewSyncProducer([]string{addr}, config)
24 | if err != nil {
25 | logs.Error("init kafka producer failed,err:", err)
26 | return
27 | }
28 |
29 | logs.Debug("init kafka succ")
30 |
31 | return
32 | }
33 |
34 | func SendToKafka(data, topic string) (err error) {
35 | msg := &sarama.ProducerMessage{
36 | Topic: topic,
37 | Value: sarama.StringEncoder(data),
38 | }
39 |
40 |
41 | // pid:分区id, offset:分区里的偏移量
42 | _, _, err = client.SendMessage(msg)
43 | if err != nil {
44 | logs.Error("send message failed, err:%v data:%v topic:%v", err, data, topic)
45 |
46 | return
47 | }
48 |
49 | //logs.Debug("send succ, pid:%v, offset:%v, topic:%v", pid, offset, topic)
50 |
51 |
52 | //// pid:分区id, offset:分区里的偏移量
53 | //pid, offset, err := client.SendMessage(msg)
54 | //if err != nil {
55 | // logs.Error("send message failed, err:%v data:%v topic:%v", err, data, topic)
56 | //
57 | // return
58 | //}
59 | //
60 | //logs.Debug("send succ, pid:%v, offset:%v, topic:%v", pid, offset, topic)
61 | return
62 | }
63 |
--------------------------------------------------------------------------------
/logSystem/logs/log.go:
--------------------------------------------------------------------------------
1 | package logs
2 |
3 | import (
4 | "github.com/astaxie/beego/logs"
5 | "encoding/json"
6 | "fmt"
7 | "logSystem/conf"
8 | )
9 |
10 | func convertLogLevel(level string) int {
11 | switch level {
12 | case "debug":
13 | return logs.LevelDebug
14 | case "warn":
15 | return logs.LevelWarn
16 | case "trace":
17 | return logs.LevelTrace
18 | case "info":
19 | return logs.LevelInformational
20 | default:
21 | return logs.LevelDebug
22 | }
23 | }
24 |
25 | func InitLogger() (err error) {
26 | // 配置log组件
27 | config := make(map[string]interface{})
28 | // 日志的路径,文件名
29 | config["filename"] = conf.AppConfig.LogPath
30 | // 日志级别(开发环境)
31 | config["level"] = convertLogLevel(conf.AppConfig.LogLevel)
32 |
33 | configStr, err := json.Marshal(config)
34 | if err != nil {
35 | fmt.Println("init logger failed, Marshal, err:", err)
36 | return
37 | }
38 |
39 | logs.SetLogger(logs.AdapterFile, string(configStr))
40 | return
41 | }
42 |
--------------------------------------------------------------------------------
/logSystem/logs/log_transfer.log:
--------------------------------------------------------------------------------
1 | 2018/07/18 14:16:04.084 [D] init logger succ
2 | 2018/07/18 14:16:04.094 [D] init kafka succ
3 | 2018/07/18 14:16:04.174 [D] init es succ
4 | 2018/07/18 14:25:41.814 [D] init logger succ
5 | 2018/07/18 14:25:41.824 [D] init kafka succ
6 | 2018/07/18 14:25:41.841 [D] init es succ
7 | 2018/07/18 15:18:16.104 [D] init logger succ
8 | 2018/07/18 15:18:16.125 [D] init kafka succ
9 | 2018/07/18 15:18:16.137 [D] init es succ
10 |
--------------------------------------------------------------------------------
/logSystem/logs/logagent.log:
--------------------------------------------------------------------------------
1 | 2018/07/18 14:15:39.209 [D] init logger succ
2 | 2018/07/18 14:15:39.217 [D] resp from etcd:[key:"/Users/esirnus/go/src/logSystem/conf/192.168.31.62" create_revision:12 mod_revision:25 version:14 value:"[{\"log_path\":\"/Users/esirnus/go/src/logSystem/logs/logagent.log\",\"topic\":\"nginx_log\"},{\"log_path\":\"/Users/esirnus/Documents/logs/error.log\",\"topic\":\"nginx_log_err\"}]" ]
3 | 2018/07/18 14:15:39.218 [D] log congig is [{/Users/esirnus/go/src/logSystem/logs/logagent.log nginx_log} {/Users/esirnus/Documents/logs/error.log nginx_log_err}]
4 | 2018/07/18 14:15:39.218 [D] init etcd succ
5 | 2018/07/18 14:15:39.218 [D] init tailf succ
6 | 2018/07/18 14:15:39.218 [D] begin watch etcdkey : /Users/esirnus/go/src/logSystem/conf/192.168.31.62
7 | 2018/07/18 14:15:39.245 [D] init kafka succ
8 | 2018/07/18 14:15:39.245 [D] init kafka succ
9 | 2018/07/18 14:15:39.245 [D] initalize all succ
10 | 2018/07/18 14:20:26.039 [D] PUT "/Users/esirnus/go/src/logSystem/conf/192.168.31.62" : "[{\"log_path\":\"/usr/local/var/log/nginx/access.log\",\"topic\":\"nginx_log\"},{\"log_path\":\"/Users/esirnus/Documents/logs/error.log\",\"topic\":\"nginx_log_err\"}]"
11 |
12 | 2018/07/18 14:20:26.039 [W] tail obj will exited, conf:{/Users/esirnus/go/src/logSystem/logs/logagent.log nginx_log}
13 | 2018/07/18 14:25:32.702 [D] init logger succ
14 | 2018/07/18 14:25:32.714 [D] resp from etcd:[key:"/Users/esirnus/go/src/logSystem/conf/192.168.31.62" create_revision:12 mod_revision:27 version:15 value:"[{\"log_path\":\"/usr/local/var/log/nginx/access.log\",\"topic\":\"nginx_log\"},{\"log_path\":\"/Users/esirnus/Documents/logs/error.log\",\"topic\":\"nginx_log_err\"}]" ]
15 | 2018/07/18 14:25:32.714 [D] log congig is [{/usr/local/var/log/nginx/access.log nginx_log} {/Users/esirnus/Documents/logs/error.log nginx_log_err}]
16 | 2018/07/18 14:25:32.715 [D] init etcd succ
17 | 2018/07/18 14:25:32.715 [D] init tailf succ
18 | 2018/07/18 14:25:32.715 [D] begin watch etcdkey : /Users/esirnus/go/src/logSystem/conf/192.168.31.62
19 | 2018/07/18 14:25:32.732 [D] init kafka succ
20 | 2018/07/18 14:25:32.732 [D] init kafka succ
21 | 2018/07/18 14:25:32.732 [D] initalize all succ
22 |
--------------------------------------------------------------------------------
/logSystem/logtransfer/conf/log_transfer.conf:
--------------------------------------------------------------------------------
1 |
2 | [logs]
3 | log_level=debug
4 | log_path=./logs/log_transfer.log
5 |
6 |
7 | [kafka]
8 | server_addr=localhost:9092
9 | ;topic应该是可以配置的,暂时写死
10 | topic=nginx_log
11 |
12 | [es]
13 | es_addr=http://localhost:9200
--------------------------------------------------------------------------------
/logSystem/logtransfer/config.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/astaxie/beego/config"
5 | "fmt"
6 | )
7 |
8 | type LogConfig struct {
9 | KafkaAddr string
10 | ESAddr string
11 | LogPath string
12 | LogLevel string
13 | KafkaTopic string
14 | }
15 |
16 | var logConfig *LogConfig
17 |
18 | func initConfig(confType string, filename string) (err error) {
19 | conf, err := config.NewConfig(confType, filename)
20 | if err != nil {
21 | fmt.Println("new config failed, err:", err)
22 | return
23 | }
24 |
25 | logConfig = &LogConfig{}
26 | logConfig.LogLevel = conf.String("logs::log_level")
27 | if len(logConfig.LogLevel) == 0 {
28 | logConfig.LogLevel = "debug"
29 | }
30 |
31 | logConfig.LogPath = conf.String("logs::log_path")
32 | if len(logConfig.LogPath) == 0 {
33 | logConfig.LogPath = "./logs"
34 | }
35 |
36 | logConfig.KafkaAddr = conf.String("kafka::server_addr")
37 | if len(logConfig.KafkaAddr) == 0 {
38 | err = fmt.Errorf("invalid kafka addr")
39 | return
40 | }
41 |
42 | logConfig.ESAddr = conf.String("es::es_addr")
43 | if len(logConfig.ESAddr) == 0 {
44 | err = fmt.Errorf("invalid es es_addr")
45 | return
46 | }
47 |
48 | logConfig.KafkaTopic = conf.String("kafka::topic")
49 | if len(logConfig.KafkaTopic) == 0 {
50 | err = fmt.Errorf("invalid kafka topic")
51 | return
52 | }
53 | return
54 | }
55 |
--------------------------------------------------------------------------------
/logSystem/logtransfer/es.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "gopkg.in/olivere/elastic.v5"
5 | "fmt"
6 | "context"
7 | )
8 |
9 | type LogMessage struct {
10 | App string // 属于哪个项目的
11 | Message string // 消息内容
12 | Topic string // 属于哪个topic的
13 | }
14 |
15 | var (
16 | client *elastic.Client
17 | )
18 |
19 | func initES(addr string) (err error) {
20 | client, err = elastic.NewClient(elastic.SetSniff(false), elastic.SetURL(addr))
21 | if err != nil {
22 | fmt.Println("connect elasticsearch error", err)
23 | }
24 |
25 | return
26 | }
27 |
28 | func sendToES(topic string, data []byte) (err error) {
29 |
30 | msg := LogMessage{}
31 | msg.Topic = topic
32 | msg.Message = string(data)
33 |
34 | _, err = client.Index().Index(topic).Type(topic).BodyJson(msg).Do(context.Background())
35 | if err != nil {
36 | panic(err)
37 | return
38 | }
39 |
40 | return
41 | }
42 |
--------------------------------------------------------------------------------
/logSystem/logtransfer/kafka.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/Shopify/sarama"
5 | "strings"
6 | "sync"
7 | "github.com/astaxie/beego/logs"
8 | )
9 |
10 | type KafkaClient struct {
11 | client sarama.Consumer
12 | addr string
13 | topic string
14 | wg sync.WaitGroup
15 | }
16 |
17 | var (
18 | kafkaClient *KafkaClient
19 | )
20 |
21 | func initKafka(addr, topic string) (err error) {
22 |
23 | kafkaClient = &KafkaClient{}
24 |
25 | consumer, err := sarama.NewConsumer(strings.Split(addr, ","), nil)
26 | if err != nil {
27 | logs.Error("init kafka failed, err:%v", err)
28 | return
29 | }
30 |
31 | kafkaClient.client = consumer
32 | kafkaClient.addr = addr
33 | kafkaClient.topic = topic
34 | return
35 | }
36 |
--------------------------------------------------------------------------------
/logSystem/logtransfer/logs.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/astaxie/beego/logs"
5 | "encoding/json"
6 | "fmt"
7 | )
8 |
9 | func convertLogLevel(level string) int {
10 | switch level {
11 | case "debug":
12 | return logs.LevelDebug
13 | case "warn":
14 | return logs.LevelWarn
15 | case "trace":
16 | return logs.LevelTrace
17 | case "info":
18 | return logs.LevelInformational
19 | default:
20 | return logs.LevelDebug
21 | }
22 | }
23 |
24 |
25 | func initLogger(logPath string, logLevel string) (err error) {
26 | // 配置log组件
27 | config := make(map[string]interface{})
28 | // 日志的路径,文件名
29 | config["filename"] = logPath
30 | // 日志级别(开发环境)
31 | config["level"] = convertLogLevel(logLevel)
32 |
33 | configStr, err := json.Marshal(config)
34 | if err != nil {
35 | fmt.Println("init logger failed, Marshal, err:", err)
36 | return
37 | }
38 |
39 | logs.SetLogger(logs.AdapterFile, string(configStr))
40 | return
41 | }
42 |
--------------------------------------------------------------------------------
/logSystem/logtransfer/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "github.com/astaxie/beego/logs"
6 | )
7 |
8 | func main() {
9 | // 初始化配置文件
10 | err := initConfig("ini", "./logtransfer/conf/log_transfer.conf")
11 | if err != nil {
12 | panic(err)
13 | return
14 | }
15 | fmt.Println(logConfig)
16 |
17 | // 初始化logger
18 | err = initLogger(logConfig.LogPath, logConfig.LogLevel)
19 | if err != nil {
20 | panic(err)
21 | return
22 | }
23 | logs.Debug("init logger succ")
24 |
25 | // 初始化kafka消费
26 | err = initKafka(logConfig.KafkaAddr, logConfig.KafkaTopic)
27 | if err != nil {
28 | logs.Error("init kafka failed, err:%v", err)
29 | return
30 | }
31 |
32 | logs.Debug("init kafka succ")
33 |
34 | // 初始化elasticsearch
35 | err = initES(logConfig.ESAddr)
36 | if err != nil {
37 | logs.Error("init elasticsearch failed, err:%v", err)
38 | return
39 | }
40 | logs.Debug("init es succ")
41 |
42 | fmt.Println("sdfsdfdsfd")
43 | // 初始化配置文件
44 | err = run()
45 | if err != nil {
46 | logs.Error("server run failed, err:", err)
47 | return
48 | }
49 |
50 | logs.Warn("program exited")
51 | }
52 |
--------------------------------------------------------------------------------
/logSystem/logtransfer/run.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "github.com/Shopify/sarama"
6 | "github.com/astaxie/beego/logs"
7 | "time"
8 | )
9 |
10 | func run() (err error) {
11 | // 获取topic分区数量
12 | partitionList, err := kafkaClient.client.Partitions(kafkaClient.topic)
13 | if err != nil {
14 | logs.Error("Failed to get the list of partitions: ", err)
15 | return
16 | }
17 |
18 | fmt.Println(partitionList)
19 |
20 | // 遍历分区
21 | for partition := range partitionList {
22 | //sarama.OffsetNewest 每次从最新的位置消费
23 | pc, errRet := kafkaClient.client.ConsumePartition(kafkaClient.topic, int32(partition), sarama.OffsetNewest)
24 | if errRet != nil {
25 | err = errRet
26 | logs.Error("failed to start consumer for partition %d: %s\n", partition, err)
27 |
28 | }
29 | defer pc.AsyncClose()
30 |
31 | // 每一个分区启一个goruntine去消费
32 | go func(pc sarama.PartitionConsumer) {
33 |
34 | //kafkaClient.wg.Add(1)
35 |
36 | for msg := range pc.Messages() {
37 | // 两种方式给es
38 | // 1. 从协程里面取了数据,扔到另外一个channel里面,es的goroutine去取
39 | // 2. 直接写到es里面
40 | //logs.Debug("partition:%d, offset:%d, key:%s, value:%s\n",
41 | //msg.Partition, msg.Offset, string(msg.Key), string(msg.Value))
42 |
43 | err := sendToES(kafkaClient.topic, msg.Value)
44 | if err != nil {
45 | logs.Warn("send to es faile , err: %v", err)
46 | }
47 |
48 | }
49 | //kafkaClient.wg.Done()
50 | }(pc)
51 | }
52 |
53 | time.Sleep(time.Hour)
54 | //kafkaClient.wg.Wait()
55 |
56 | return
57 | }
58 |
--------------------------------------------------------------------------------
/logSystem/main/etcd.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "time"
5 | "fmt"
6 | etcd_client "github.com/coreos/etcd/clientv3"
7 | "github.com/astaxie/beego/logs"
8 | "context"
9 | "strings"
10 | "encoding/json"
11 | "logSystem/conf"
12 | "github.com/coreos/etcd/mvcc/mvccpb"
13 | "logSystem/tailf"
14 | )
15 |
16 | type EtcdClient struct {
17 | client *etcd_client.Client
18 | keys []string
19 | }
20 |
21 | var (
22 | etcdClient *EtcdClient
23 | )
24 |
25 | func InitEtcd(addr string, key string) (collectConf []conf.CollectConf, err error) {
26 | client, err := etcd_client.New(etcd_client.Config{
27 | Endpoints: []string{"localhost:2379", "localhost:2379", "localhost:2379"},
28 | DialTimeout: 5 * time.Second,
29 | })
30 | if err != nil {
31 | logs.Error("connect etcd failed, err:", err)
32 | return
33 | }
34 | fmt.Printf("connect etcd succ")
35 |
36 | etcdClient = &EtcdClient{
37 | client: client,
38 | }
39 |
40 | // 从etcd获取配置
41 |
42 | if strings.HasSuffix(key, "/") == false {
43 | key = key + "/"
44 | }
45 |
46 | for _, ip := range localIPArray {
47 | etcdkey := fmt.Sprintf("%s%s", key, ip)
48 | etcdClient.keys = append(etcdClient.keys, etcdkey)
49 | ctx, cancel := context.WithTimeout(context.Background(), time.Second)
50 | resp, err := client.Get(ctx, etcdkey)
51 | if err != nil {
52 | logs.Error("client get from etcd failed, err:", err)
53 | continue
54 | }
55 | cancel()
56 | logs.Debug("resp from etcd:%v", resp.Kvs)
57 | for _, v := range resp.Kvs {
58 | if string(v.Key) == etcdkey {
59 | err := json.Unmarshal(v.Value, &collectConf)
60 | if err != nil {
61 | logs.Error("unmarshal failed, err:%v", err)
62 | continue
63 | }
64 | logs.Debug("log congig is %v", collectConf)
65 | }
66 | }
67 | }
68 |
69 | initEtcdWatch()
70 |
71 | return
72 | }
73 |
74 | /*
75 | 监听配置的节点有没有变化
76 | */
77 | func initEtcdWatch() {
78 | for _, key := range etcdClient.keys {
79 | go watchKey(key)
80 | }
81 | }
82 |
83 | func watchKey(key string) {
84 | client, err := etcd_client.New(etcd_client.Config{
85 | Endpoints: []string{"localhost:2379", "localhost:2379", "localhost:2379"},
86 | DialTimeout: 5 * time.Second,
87 | })
88 |
89 | if err != nil {
90 | logs.Error("connect etcd failed, err:", err)
91 | return
92 | }
93 |
94 | logs.Debug("begin watch etcdkey : %s", key)
95 |
96 | for {
97 | rch := client.Watch(context.Background(), key)
98 | // 最新的配置
99 | var collectConf []conf.CollectConf
100 | var getConfSucc = true
101 | for wresp := range rch {
102 | for _, ev := range wresp.Events {
103 |
104 | if ev.Type == mvccpb.DELETE { //delete
105 | logs.Warn("key[%s] `s config deleted", key)
106 | continue
107 | }
108 | if ev.Type == mvccpb.PUT && string(ev.Kv.Key) == key {
109 | err = json.Unmarshal(ev.Kv.Value, &collectConf)
110 | if err != nil {
111 | logs.Error("key [%s ], unmarshal[%s], err:%v", err)
112 | getConfSucc = false
113 | continue
114 | }
115 | }
116 | logs.Debug("%s %q : %q\n", ev.Type, ev.Kv.Key, ev.Kv.Value)
117 | }
118 | if getConfSucc {
119 | // 把最新的配置给tailf
120 | tailf.UpdateConfig(collectConf)
121 | }
122 | }
123 |
124 | }
125 | }
126 |
--------------------------------------------------------------------------------
/logSystem/main/ip.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "net"
5 | "fmt"
6 | )
7 |
8 | var (
9 | localIPArray []string
10 | )
11 |
12 | func init() {
13 | addrs, err := net.InterfaceAddrs()
14 | if err != nil {
15 | panic(fmt.Sprintf("get addrs failed, err:%v", err))
16 |
17 | }
18 | for _, addr := range addrs {
19 | if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
20 | if ipnet.IP.To4() != nil {
21 | localIPArray = append(localIPArray,ipnet.IP.String())
22 | }
23 | }
24 | }
25 | fmt.Println(localIPArray)
26 | }
27 |
--------------------------------------------------------------------------------
/logSystem/main/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "github.com/astaxie/beego/logs"
6 | "logSystem/tailf"
7 | "logSystem/conf"
8 | lsLogs "logSystem/logs"
9 | "logSystem/kafka"
10 | )
11 |
12 | func main() {
13 |
14 | // 初始化配置文件
15 | fileName := "./conf/logagent.conf"
16 | err := conf.InitConfig("ini", fileName)
17 | if err != nil {
18 | fmt.Printf("load conf failed, err:%v\n", err)
19 | panic("load conf failed")
20 | return
21 | }
22 |
23 | logs.Debug("init config succ")
24 |
25 | // 初始化日志文件
26 | err = lsLogs.InitLogger()
27 | if err != nil {
28 | fmt.Printf("init logger failed,err:%v\n", err)
29 | panic("init logger failed")
30 | return
31 | }
32 | logs.Debug("init logger succ")
33 |
34 | // 初始化etcd 获取配置
35 | c, err := InitEtcd(conf.AppConfig.EtcdAddr, conf.AppConfig.EtcdKey)
36 | if err != nil {
37 | logs.Error("init etcd failed,err:", err)
38 | }
39 | logs.Debug("init etcd succ")
40 |
41 | // 初始化tail组件
42 | err = tailf.InitTail(c, conf.AppConfig.ChanSize)
43 | if err != nil {
44 | logs.Error("init tail failed, err:", err)
45 | return
46 | }
47 | logs.Debug("init tailf succ")
48 |
49 | // 初始化kafka
50 | err = kafka.InitKafka(conf.AppConfig.KafkaAddr)
51 | if err != nil {
52 | logs.Error("init kafka failed, err:", err)
53 | return
54 | }
55 |
56 | logs.Debug("init kafka succ")
57 |
58 | logs.Debug("initalize all succ")
59 |
60 | //go func() {
61 | // var count int
62 | // for {
63 | // count++
64 | // logs.Debug("test for logger %d", count)
65 | // time.Sleep(time.Millisecond * 1000)
66 | // }
67 | //}()
68 |
69 | // 启动服务
70 | serverRun()
71 | if err != nil {
72 | logs.Error("server run failed, err:", err)
73 | }
74 |
75 | logs.Info("program exited")
76 |
77 | }
78 |
--------------------------------------------------------------------------------
/logSystem/main/server.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "logSystem/tailf"
5 | "github.com/astaxie/beego/logs"
6 | "time"
7 | "logSystem/kafka"
8 | "fmt"
9 | )
10 |
11 | func serverRun() (err error) {
12 |
13 | for {
14 | msg := tailf.GetSingleTail()
15 | err = sendToKafka(msg)
16 | if err != nil {
17 | logs.Error("send message failed:%v", err)
18 | time.Sleep(time.Second)
19 | continue
20 | }
21 | }
22 |
23 | return
24 | }
25 |
26 | func sendToKafka(msg *tailf.TextMsg) (err error) {
27 | fmt.Printf("read msg : %s, read topic:%s\n",msg.Msg,msg.Topic)
28 | err = kafka.SendToKafka(msg.Msg, msg.Topic)
29 | return
30 | }
31 |
--------------------------------------------------------------------------------
/logSystem/utils/setconf/etcdconfig.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "fmt"
5 | "time"
6 | "encoding/json"
7 | etcd_client "github.com/coreos/etcd/clientv3"
8 | "context"
9 | "logSystem/conf"
10 | )
11 |
12 | // 获取ip可以搞一个基础库,
13 | // 或者 web管理页面,也不需要获取ip,实际情况下, 日志搜集web页面,可以调用运维的系统,从中获取ip(运维应该有这个系统)
14 | const (
15 | etcdKey = "/Users/cyhe/go/src/logSystem/conf/192.168.31.62"
16 | )
17 |
18 | //// 来描述一个配置
19 | //type LogConf struct {
20 | // Path string `json:"path"` // 文件路径
21 | // Topic string `json:"topic"` // 所属topic
22 | // //sendQps int // 1秒发多少个,高峰期可以发少点,低峰期发少一点
23 | //}
24 |
25 |
26 | func SetLogConfToEtcd() {
27 | client, err := etcd_client.New(etcd_client.Config{
28 | Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"},
29 | DialTimeout: 5 * time.Second,
30 | })
31 | if err != nil {
32 | fmt.Println("connect faied,err:", err)
33 | return
34 | }
35 | fmt.Println("connect succ \n")
36 | defer client.Close()
37 |
38 | var logConArr []conf.CollectConf
39 |
40 | logConArr = append(
41 | logConArr,
42 | conf.CollectConf{
43 | LogPath: "/usr/local/var/log/nginx/access.log",
44 | Topic: "nginx_log",
45 | },
46 | )
47 |
48 | logConArr = append(
49 | logConArr,
50 | conf.CollectConf{
51 | LogPath: "/Users/esirnus/Documents/logs/error.log",
52 | Topic: "nginx_log_err",
53 | },
54 | )
55 |
56 | data, err := json.Marshal(logConArr)
57 | if err != nil {
58 | fmt.Println("json failed, err:", err)
59 | return
60 | }
61 |
62 | ctx, cancel := context.WithTimeout(context.Background(), time.Second)
63 | _, err = client.Put(ctx,etcdKey,string(data))
64 |
65 | cancel()
66 |
67 | if err != nil {
68 | fmt.Println("put failed, err", err)
69 | return
70 | }
71 |
72 | ctx, cancel = context.WithTimeout(context.Background(), time.Second)
73 | resp, err := client.Get(ctx, etcdKey)
74 | cancel()
75 | if err != nil {
76 | fmt.Println("get failed, err", err)
77 | }
78 |
79 | for _, ev := range resp.Kvs {
80 | fmt.Printf("%s : %s \n", ev.Key, ev.Value)
81 | }
82 | }
83 |
84 | func main() {
85 | SetLogConfToEtcd()
86 | }
--------------------------------------------------------------------------------
/web_logger/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/web_logger/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/web_logger/.idea/web_logger.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/web_logger/conf/app.conf:
--------------------------------------------------------------------------------
1 | appname = log
2 | httpaddr = "127.0.0.1"
3 | httpport = 9090
4 | runmode ="dev"
5 | recoverpanic = false
--------------------------------------------------------------------------------
/web_logger/controller/appcontroller/app.go:
--------------------------------------------------------------------------------
1 | package appcontroller
2 |
3 | import (
4 | "github.com/astaxie/beego"
5 | "fmt"
6 | "github.com/astaxie/beego/logs"
7 | "web_logger/model"
8 | "strings"
9 | )
10 |
11 | type AppController struct {
12 | beego.Controller
13 | }
14 |
15 | func (p *AppController) AppList() {
16 |
17 | p.Layout = "layout/layout.html"
18 |
19 | applist, err := model.GetAllAppInfo()
20 | if err != nil {
21 | p.Data["Error"] = fmt.Sprintf("服务器繁忙")
22 | p.TplName = "app/error.html"
23 | logs.Warn("get app list failed, err:%v",err)
24 | return
25 | }
26 |
27 | logs.Debug("get app list succ, data:%v",applist)
28 | p.Data["applist"] = applist
29 |
30 | p.TplName = "app/index.html"
31 | }
32 |
33 | func (p *AppController) AppApply() {
34 | p.Layout = "layout/layout.html"
35 | p.TplName = "app/apply.html"
36 | }
37 |
38 | func (p *AppController) AppCreate() {
39 | appName := p.GetString("app_name")
40 | appTyoe := p.GetString("app_type")
41 | devLogPath := p.GetString("develop_path")
42 | ipstr := p.GetString("iplist")
43 |
44 | p.Layout = "layout/layout.html"
45 |
46 | if len(appName) == 0 || len(appTyoe) == 0 || len(devLogPath) == 0 || len(ipstr) == 0 {
47 | p.Data["Error"] = fmt.Sprintf("非法参数")
48 | p.TplName = "app/error.html"
49 | logs.Warn("invalid parameter")
50 | return
51 | }
52 |
53 | appinfo := &model.AppInfo{
54 | AppName: appName,
55 | AppType: appTyoe,
56 | DevelopPath: devLogPath,
57 | IP: strings.Split(ipstr, ","),
58 | }
59 |
60 | err := model.CreateApp(appinfo)
61 | if err != nil {
62 | p.Data["Error"] = fmt.Sprintf("项目创建失败,数据库繁忙")
63 | p.TplName = "app/error.html"
64 | logs.Warn("invalid parameter")
65 | return
66 | }
67 |
68 | p.Layout = "layout/layout.html"
69 |
70 | p.Redirect("/app/list", 302)
71 | }
72 |
--------------------------------------------------------------------------------
/web_logger/controller/logcontroller/log.go:
--------------------------------------------------------------------------------
1 | package logcontroller
2 |
3 | import (
4 | "github.com/astaxie/beego"
5 | "github.com/astaxie/beego/logs"
6 | "web_logger/model"
7 | "fmt"
8 |
9 | etcdclient "github.com/coreos/etcd/clientv3"
10 | )
11 |
12 | type LogController struct {
13 | beego.Controller
14 |
15 | }
16 |
17 |
18 |
19 | var (
20 | etcdClient *etcdclient.Client
21 | )
22 |
23 | func InitEtcd(client *etcdclient.Client) {
24 | etcdClient = client
25 | }
26 |
27 | func (p *LogController) LogList() {
28 |
29 | logs.Debug("enter index controller")
30 |
31 | p.Layout = "layout/layout.html"
32 | logList, err := model.GetAllLogInfo()
33 | if err != nil {
34 | p.Data["Error"] = fmt.Sprintf("服务器繁忙")
35 | p.TplName = "app/error.html"
36 |
37 | logs.Warn("get app list failed, err:%v", err)
38 | return
39 | }
40 |
41 | logs.Debug("get app list succ, data:%v", logList)
42 | p.Data["loglist"] = logList
43 |
44 | p.TplName = "log/index.html"
45 | }
46 |
47 | func (p *LogController) LogApply() {
48 |
49 | logs.Debug("enter index controller")
50 | p.Layout = "layout/layout.html"
51 | p.TplName = "log/apply.html"
52 | }
53 |
54 | func (p *LogController) LogCreate() {
55 |
56 | logs.Debug("enter index controller")
57 | appName := p.GetString("app_name")
58 | logPath := p.GetString("log_path")
59 | topic := p.GetString("topic")
60 |
61 | p.Layout = "layout/layout.html"
62 | if len(appName) == 0 || len(logPath) == 0 || len(topic) == 0 {
63 | p.Data["Error"] = fmt.Sprintf("非法参数")
64 | p.TplName = "log/error.html"
65 |
66 | logs.Warn("invalid parameter")
67 | return
68 | }
69 |
70 | logInfo := &model.LogInfo{}
71 | logInfo.AppName = appName
72 | logInfo.LogPath = logPath
73 | logInfo.Topic = topic
74 |
75 | err := model.CreateLog(logInfo)
76 | if err != nil {
77 | p.Data["Error"] = fmt.Sprintf("创建项目失败,数据库繁忙")
78 | p.TplName = "log/error.html"
79 |
80 | logs.Warn("invalid parameter")
81 | return
82 | }
83 |
84 | iplist, err := model.GetIPInfoByName(appName)
85 | if err != nil {
86 | p.Data["Error"] = fmt.Sprintf("获取项目ip失败,数据库繁忙")
87 | p.TplName = "log/error.html"
88 |
89 | logs.Warn("invalid parameter")
90 | return
91 | }
92 | keyFormat := "/Users/cyhe/logagent/config/%s"
93 |
94 | for _, ip := range iplist {
95 | key := fmt.Sprintf(keyFormat, ip)
96 | err = model.SetLogConfToEtcd(key, logInfo)
97 | if err != nil {
98 | logs.Warn("Set log conf to etcd failed, err:%v", err)
99 | continue
100 | }
101 | }
102 | p.Redirect("/log/list", 302)
103 | }
104 |
--------------------------------------------------------------------------------
/web_logger/main/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/astaxie/beego"
5 | _ "web_logger/router"
6 | "github.com/astaxie/beego/logs"
7 | "github.com/jmoiron/sqlx"
8 | _ "github.com/go-sql-driver/mysql"
9 | "web_logger/model"
10 | "time"
11 | etvd_client "github.com/coreos/etcd/clientv3"
12 | )
13 |
14 | func initDb() (err error) {
15 |
16 | database, err := sqlx.Open("mysql", "root:12345678@tcp(localhost:3306)/web_logger")
17 | if err != nil {
18 | logs.Warn("open mysql failed,", err)
19 | }
20 |
21 | // 传给model
22 | model.InitDb(database)
23 |
24 | return
25 | }
26 |
27 | func initEtcd() (err error) {
28 | cli, err := etvd_client.New(etvd_client.Config{
29 | Endpoints: []string{"localhost:2379", "localhost:22379", "localhost:32379"},
30 | DialTimeout: 5 * time.Second,
31 | })
32 | if err != nil {
33 | logs.Warn("conn etcd failed,", err)
34 | return
35 | }
36 | //传给model
37 | model.InitEtcd(cli)
38 | return
39 | }
40 |
41 | func main() {
42 |
43 | err := initDb()
44 | if err != nil {
45 | logs.Warn("init db failed, err:%v", err)
46 | return
47 | }
48 |
49 | err = initEtcd()
50 | if err != nil {
51 | logs.Warn("init etcd failed, err:%v", err)
52 | return
53 | }
54 |
55 | beego.Run()
56 | }
57 |
--------------------------------------------------------------------------------
/web_logger/model/app.go:
--------------------------------------------------------------------------------
1 | package model
2 |
3 | import (
4 | "github.com/jmoiron/sqlx"
5 | "github.com/astaxie/beego/logs"
6 | )
7 |
8 | type AppInfo struct {
9 | AppId int `db:"app_id"`
10 | AppName string `db:"app_name"`
11 | AppType string `db:"app_type"`
12 | CreateTime string `db:"create_time"`
13 | DevelopPath string `db:"develop_path"`
14 | IP []string
15 | }
16 |
17 | var (
18 | DB *sqlx.DB
19 | )
20 |
21 | func InitDb(db *sqlx.DB) {
22 | DB = db
23 | }
24 |
25 | func GetAllAppInfo() (appinfoList []AppInfo, err error) {
26 |
27 | err = DB.Select(&appinfoList, "select app_id, app_name,app_type,create_time,develop_path from tbl_app_info")
28 | if err != nil {
29 | logs.Warn("Get All App Info failed, err:%v", err)
30 | }
31 | return
32 | }
33 |
34 | func GetIPInfoById(appId int) (iplist []string, err error) {
35 | err = DB.Select(&iplist, "select ip from tbl_app_ip where app_id=?", appId)
36 | if err != nil {
37 | logs.Warn("Get All App Info failed, err:%v", err)
38 | return
39 | }
40 | return
41 | }
42 |
43 | func GetIPInfoByName(appName string) (iplist []string, err error) {
44 |
45 | var appId []int
46 | err = DB.Select(&appId, "select app_id from tbl_app_info where app_name=?", appName)
47 | if err != nil || len(appId) == 0 {
48 | logs.Warn("select app_id failed, Db.Exec error:%v", err)
49 | return
50 | }
51 |
52 | err = DB.Select(&iplist, "select ip from tbl_app_ip where app_id=?", appId[0])
53 | if err != nil {
54 | logs.Warn("Get All App Info failed, err:%v", err)
55 | return
56 | }
57 | return
58 | }
59 |
60 | func CreateApp(info *AppInfo) (err error) {
61 |
62 | conn, err := DB.Begin()
63 | if err != nil {
64 | logs.Warn("CreateApp failed, DB.Begin error:%v", err)
65 | return
66 | }
67 |
68 | defer func() {
69 | if err != nil {
70 | conn.Rollback()
71 | return
72 | }
73 | conn.Commit()
74 | }()
75 |
76 | r, err := conn.Exec("insert into tbl_app_info(app_name,app_type,develop_path)values (?,?,?)",
77 | info.AppName, info.AppType, info.DevelopPath)
78 | if err != nil {
79 | logs.Warn("CreateApp insert failed, DB.Exec error:%v", err)
80 | return
81 | }
82 |
83 | id, err := r.LastInsertId()
84 | if err != nil {
85 | logs.Warn("CreateApp GetLastInsertId failed, DB.LastInsertId error:%v", err)
86 | return
87 | }
88 |
89 | for _, ip := range info.IP {
90 | _, err = conn.Exec("insert into tbl_app_ip(app_id,ip)values (?,?)", id, ip)
91 | if err != nil {
92 | logs.Warn("CreateApp IP failed, DB.Exec error:%v", err)
93 | return
94 | }
95 | }
96 | return
97 | }
98 |
--------------------------------------------------------------------------------
/web_logger/model/log.go:
--------------------------------------------------------------------------------
1 | package model
2 |
3 | import (
4 | "github.com/astaxie/beego/logs"
5 | etcdclient "github.com/coreos/etcd/clientv3"
6 | "fmt"
7 | "encoding/json"
8 | "time"
9 | "context"
10 | )
11 |
12 | var (
13 | etcdClient *etcdclient.Client
14 | )
15 |
16 |
17 | type CollectConf struct {
18 | LogPath string `json:"log_path"`
19 | Topic string `json:"topic"`
20 | }
21 |
22 | type LogInfo struct {
23 | AppId int `db:"app_id"`
24 | AppName string `db:"app_name"`
25 | LogId int `db:"log_id"`
26 | Status int `db:"status"`
27 | CreateTime string `db:"create_time"`
28 | LogPath string `db:"log_path"`
29 | Topic string `db:"topic"`
30 | }
31 |
32 | func InitEtcd(client *etcdclient.Client) {
33 | etcdClient = client
34 | }
35 |
36 | func GetAllLogInfo() (loglist []LogInfo, err error) {
37 | err = DB.Select(&loglist,
38 | "select a.app_id, b.app_name, a.create_time, a.topic, a.log_id, a.status, a.log_path from tbl_log_info a, tbl_app_info b where a.app_id=b.app_id")
39 | if err != nil {
40 | logs.Warn("Get All App Info failed, err:%v", err)
41 | return
42 | }
43 | return
44 | }
45 |
46 | func CreateLog(info *LogInfo) (err error) {
47 |
48 | conn, err := DB.Begin()
49 | if err != nil {
50 | logs.Warn("CreateApp failed, Db.Begin error:%v", err)
51 | return
52 | }
53 |
54 | defer func() {
55 | if err != nil {
56 | conn.Rollback()
57 | return
58 | }
59 |
60 | conn.Commit()
61 | }()
62 |
63 | var appId []int
64 | err = DB.Select(&appId, "select app_id from tbl_app_info where app_name=?", info.AppName)
65 | if err != nil || len(appId) == 0 {
66 | logs.Warn("select app_id failed, Db.Exec error:%v", err)
67 | return
68 | }
69 |
70 | info.AppId = appId[0]
71 | r, err := conn.Exec("insert into tbl_log_info(app_id, log_path, topic)values(?, ?, ?)",
72 | info.AppId, info.LogPath, info.Topic)
73 |
74 | if err != nil {
75 | logs.Warn("CreateApp failed, Db.Exec error:%v", err)
76 | return
77 | }
78 |
79 | sd, err := r.LastInsertId()
80 | if err != nil {
81 | logs.Warn("CreateApp failed, Db.LastInsertId error:%v", err)
82 | return
83 | }
84 |
85 | fmt.Printf("sunccess : %d",sd)
86 |
87 | return
88 | }
89 |
90 | func SetLogConfToEtcd(etcdKey string, info *LogInfo) (err error) {
91 |
92 | var logConfArr []CollectConf
93 | logConfArr = append(
94 | logConfArr,
95 | CollectConf{
96 | LogPath: info.LogPath,
97 | Topic: info.Topic,
98 | },
99 | )
100 |
101 | data, err := json.Marshal(logConfArr)
102 | if err != nil {
103 | logs.Warn("marshal failed, err:%v", err)
104 | return
105 | }
106 |
107 |
108 | ctx, cancel := context.WithTimeout(context.Background(), time.Second)
109 | //cli.Delete(ctx, EtcdKey)
110 | //return
111 | _, err = etcdClient.Put(ctx, etcdKey, string(data))
112 | cancel()
113 | if err != nil {
114 | logs.Warn("Put failed, err:%v", err)
115 | return
116 | }
117 |
118 | logs.Debug("put etcd succ, data:%v", string(data))
119 | return
120 | }
121 |
--------------------------------------------------------------------------------
/web_logger/router/router.go:
--------------------------------------------------------------------------------
1 | package router
2 |
3 | import (
4 | "github.com/astaxie/beego"
5 | "web_logger/controller/appcontroller"
6 | "web_logger/controller/logcontroller"
7 |
8 | )
9 |
10 | func init() {
11 | beego.Router("/index", &appcontroller.AppController{}, `*:AppList`)
12 | beego.Router("/app/list", &appcontroller.AppController{}, `*:AppList`)
13 | beego.Router("/app/apply", &appcontroller.AppController{}, `*:AppApply`)
14 | beego.Router("/app/create", &appcontroller.AppController{}, `*:AppCreate`)
15 |
16 |
17 |
18 |
19 |
20 | beego.Router("/log/apply", &logcontroller.LogController{},`*:LogApply`)
21 | beego.Router("/log/list", &logcontroller.LogController{}, `*:LogList`)
22 | beego.Router("/log/create", &logcontroller.LogController{}, `*:LogCreate`)
23 | }
24 |
--------------------------------------------------------------------------------
/web_logger/static/css/about-us.css:
--------------------------------------------------------------------------------
1 | /***
2 | Anout Us Page
3 | ***/
4 |
5 | .meet-our-team h3 {
6 | margin-bottom: 0;
7 | padding: 0 10px 10px;
8 | background: #fcfcfc;
9 | }
10 |
11 | .meet-our-team small {
12 | display:block;
13 | font-size:12px;
14 | }
15 |
16 | .meet-our-team .team-info {
17 | padding: 10px;
18 | overflow: hidden;
19 | background: #fafafa;
20 | }
--------------------------------------------------------------------------------
/web_logger/static/css/blog.css:
--------------------------------------------------------------------------------
1 | /***
2 | Blog Page
3 | ***/
4 |
5 | /*--Block Article--*/
6 | .blog-page {
7 | padding-bottom: 20px;
8 | }
9 |
10 | .blog-page h1 {
11 | margin-bottom: 20px;
12 | }
13 |
14 | .blog-page h2 a {
15 | color: #000;
16 | }
17 |
18 | .blog-page h2 a:hover {
19 | color: #0d638f;
20 | text-decoration: none;
21 | }
22 |
23 | .blog-page hr {
24 | margin-top: 30px !important;
25 | }
26 |
27 | .blog-page .article-block {
28 | padding-bottom: 20px;
29 | }
30 |
31 | .blog-page .news-img img {
32 | margin-top: 9px;
33 | }
34 |
35 | .blog-page .blog-tag-data ul {
36 | margin-bottom: 5px;
37 | }
38 |
39 | .blog-page .blog-tag-data li {
40 | padding: 0;
41 | }
42 |
43 | .blog-page .blog-tag-data li i {
44 | color: #78cff8;
45 | }
46 |
47 | .blog-page .blog-tag-data li a {
48 | padding: 0;
49 | color: #555;
50 | margin-right: 8px;
51 | }
52 |
53 | .blog-page .blog-tag-data {
54 | margin-bottom: 10px;
55 | }
56 |
57 | .blog-page .blog-tag-data ul.blog-tags a {
58 | background: #eee;
59 | padding: 1px 4px;
60 | margin: 0 4px 4px 0;
61 | display: inline-block;
62 | }
63 |
64 | .blog-page .blog-tag-data ul.blog-tags a:hover {
65 | background: #ddd;
66 | text-decoration: none;
67 | }
68 |
69 | .blog-page .blog-tag-data .blog-tag-data-inner {
70 | text-align: right;
71 | }
72 |
73 | .blog-page .blog-tag-data img {
74 | margin-bottom: 12px;
75 | }
76 |
77 | .blog-page .blog-article {
78 | padding-bottom: 20px;
79 | }
80 |
81 | .blog-page .blog-article h2 {
82 | margin-top: 0;
83 | }
84 |
85 | /*--Block Sidebar--*/
86 | .blog-sidebar h2 {
87 | font-size: 38.5px;
88 | margin-bottom: 20px;
89 | }
90 |
91 | /*Twitter block*/
92 | .blog-twitter-block {
93 | padding: 5px;
94 | position: relative;
95 | margin-bottom: 10px;
96 | border-right: solid 2px #ddd;
97 | }
98 |
99 | .blog-twitter-block:hover {
100 | background: #fafafa;
101 | border-color: #35aa47;
102 | }
103 |
104 | .blog-twitter-block a {
105 | color: #4d90fe;
106 | }
107 |
108 | .blog-twitter-block p {
109 | margin-bottom: 0;
110 | }
111 |
112 | .blog-twitter-block span {
113 | color: #555;
114 | display: block;
115 | font-size: 12px;
116 | }
117 |
118 | .blog-twitter-block i.blog-twiiter-icon {
119 | color: #eee;
120 | right: 10px;
121 | bottom: 10px;
122 | font-size: 30px;
123 | position: absolute;
124 | }
125 |
126 | /***
127 | Blog & News Item Page
128 | ***/
129 | /*--Media Object--*/
130 | .blog-page .media img {
131 | height: 54px;
132 | position: relative;
133 | top: 3px;
134 | width: 54px;
135 | }
136 |
137 | .blog-page h4.media-heading {
138 | position: relative;
139 | }
140 |
141 | .blog-page h4.media-heading span {
142 | color: #777777;
143 | font-size: 12px;
144 | position: absolute;
145 | right: 0;
146 | top: 3px;
147 | }
148 |
149 | .blog-page h4.media-heading span a {
150 | color: #78cff8;
151 | }
152 |
153 | /*Post Comment*/
154 | .blog-page .post-comment .color-red {
155 | color: #f00;
156 | }
157 |
158 | /*For Responsive*/
159 | @media (max-width: 768px) {
160 | .blog-page .blog-tag-data .blog-tag-data-inner {
161 | text-align: left;
162 | }
163 | }
--------------------------------------------------------------------------------
/web_logger/static/css/bootstrap-fileupload.css:
--------------------------------------------------------------------------------
1 | .btn-file {
2 | position: relative;
3 | overflow: hidden;
4 | vertical-align: middle;
5 | }
6 |
7 | .btn-file > input {
8 | position: absolute;
9 | top: 0;
10 | right: 0;
11 | margin: 0;
12 | font-size: 23px;
13 | cursor: pointer;
14 | opacity: 0;
15 | filter: alpha(opacity=0);
16 | transform: translate(-300px, 0) scale(4);
17 | direction: ltr;
18 | }
19 |
20 | .fileupload {
21 | margin-bottom: 9px;
22 | }
23 |
24 | .fileupload .uneditable-input {
25 | display: inline-block;
26 | margin-bottom: 0;
27 | vertical-align: middle;
28 | cursor: text;
29 | }
30 |
31 | .fileupload .thumbnail {
32 | display: inline-block;
33 | margin-bottom: 5px;
34 | overflow: hidden;
35 | text-align: center;
36 | vertical-align: middle;
37 | }
38 |
39 | .fileupload .thumbnail > img {
40 | display: inline-block;
41 | max-height: 100%;
42 | vertical-align: middle;
43 | }
44 |
45 | .fileupload .btn {
46 | vertical-align: middle;
47 | }
48 |
49 | .fileupload-exists .fileupload-new,
50 | .fileupload-new .fileupload-exists {
51 | display: none;
52 | }
53 |
54 | .fileupload-inline .fileupload-controls {
55 | display: inline;
56 | }
57 |
58 | .fileupload-new .input-append .btn-file {
59 | -webkit-border-radius: 0 3px 3px 0;
60 | -moz-border-radius: 0 3px 3px 0;
61 | border-radius: 0 3px 3px 0;
62 | }
63 |
64 | .thumbnail-borderless .thumbnail {
65 | padding: 0;
66 | border: none;
67 | -webkit-border-radius: 0;
68 | -moz-border-radius: 0;
69 | border-radius: 0;
70 | -webkit-box-shadow: none;
71 | -moz-box-shadow: none;
72 | box-shadow: none;
73 | }
74 |
75 | .fileupload-new.thumbnail-borderless .thumbnail {
76 | border: 1px solid #ddd;
77 | }
78 |
79 | .control-group.warning .fileupload .uneditable-input {
80 | color: #a47e3c;
81 | border-color: #a47e3c;
82 | }
83 |
84 | .control-group.warning .fileupload .fileupload-preview {
85 | color: #a47e3c;
86 | }
87 |
88 | .control-group.warning .fileupload .thumbnail {
89 | border-color: #a47e3c;
90 | }
91 |
92 | .control-group.error .fileupload .uneditable-input {
93 | color: #b94a48;
94 | border-color: #b94a48;
95 | }
96 |
97 | .control-group.error .fileupload .fileupload-preview {
98 | color: #b94a48;
99 | }
100 |
101 | .control-group.error .fileupload .thumbnail {
102 | border-color: #b94a48;
103 | }
104 |
105 | .control-group.success .fileupload .uneditable-input {
106 | color: #468847;
107 | border-color: #468847;
108 | }
109 |
110 | .control-group.success .fileupload .fileupload-preview {
111 | color: #468847;
112 | }
113 |
114 | .control-group.success .fileupload .thumbnail {
115 | border-color: #468847;
116 | }
117 |
--------------------------------------------------------------------------------
/web_logger/static/css/bootstrap-responsive1.min.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/css/bootstrap-responsive1.min.css
--------------------------------------------------------------------------------
/web_logger/static/css/bootstrap-tag.css:
--------------------------------------------------------------------------------
1 | .tags {
2 | display: inline-block;
3 | padding: 4px 6px;
4 | margin-bottom: 10px;
5 | color: #555555;
6 | vertical-align: middle;
7 | -webkit-border-radius: 4px;
8 | -moz-border-radius: 4px;
9 | border-radius: 4px;
10 | background-color: #ffffff;
11 | border: 1px solid #cccccc;
12 | -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
13 | -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
14 | box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);
15 | -webkit-transition: border linear .2s, box-shadow linear .2s;
16 | -moz-transition: border linear .2s, box-shadow linear .2s;
17 | -o-transition: border linear .2s, box-shadow linear .2s;
18 | transition: border linear .2s, box-shadow linear .2s;
19 | width: 206px;
20 | }
21 | .tags-hover {
22 | border-color: rgba(82, 168, 236, 0.8);
23 | outline: 0;
24 | outline: thin dotted \9;
25 | /* IE6-9 */
26 |
27 | -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
28 | -moz-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
29 | box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(82,168,236,.6);
30 | }
31 | .tags[class*="span"] {
32 | float: none;
33 | margin-left: 0;
34 | }
35 | .tags input[type="text"],
36 | .tags input[type="text"]:focus {
37 | border: none;
38 | display: inline;
39 | outline: 0;
40 | margin: 0;
41 | padding: 0;
42 | font-size: 11.844px;
43 | line-height: 14px;
44 | -webkit-box-shadow: none;
45 | -moz-box-shadow: none;
46 | box-shadow: none;
47 | width: 100%;
48 | }
49 | .tag {
50 | display: inline-block;
51 | padding: 2px 4px;
52 | font-size: 11.844px;
53 | font-weight: bold;
54 | line-height: 14px;
55 | color: #ffffff;
56 | vertical-align: baseline;
57 | white-space: nowrap;
58 | text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
59 | background-color: #999999;
60 | padding-left: 9px;
61 | padding-right: 9px;
62 | -webkit-border-radius: 9px;
63 | -moz-border-radius: 9px;
64 | border-radius: 9px;
65 | margin-bottom: 5px;
66 | margin-right: 5px;
67 | -webkit-transition: all 0.2s;
68 | -moz-transition: all 0.2s;
69 | -o-transition: all 0.2s;
70 | transition: all 0.2s;
71 | }
72 | .tag:empty {
73 | display: none;
74 | }
75 | .tag-important {
76 | background-color: #953b39;
77 | }
78 | .tag-warning {
79 | background-color: #c67605;
80 | }
81 | .tag-success {
82 | background-color: #356635;
83 | }
84 | .tag-info {
85 | background-color: #2d6987;
86 | }
87 | .tag-inverse {
88 | background-color: #1a1a1a;
89 | }
90 | .tag .close {
91 | font-size: 14px;
92 | line-height: 14px;
93 | margin-left: 7px;
94 | }
95 |
--------------------------------------------------------------------------------
/web_logger/static/css/bootstrap-tree.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap Tree v0.3
3 | *
4 | * Copyright 2012 Cutters Crossing
5 | * Bootstrap is Copyright 2012 Twitter, Inc.
6 | * Licensed under the Apache License v2.0
7 | * http://www.apache.org/licenses/LICENSE-2.0
8 | *
9 | * Designed and built with all the love in the world by @cutterbl.
10 | */
11 |
12 | .tree,
13 | .branch {
14 | list-style: none outside none;
15 | }
16 | .branch {
17 | postion: relative;
18 | height: 0;
19 | margin: 0 0 0 15px;
20 | overflow: hidden;
21 | }
22 | .branch.in {
23 | height: auto;
24 | }
25 |
26 | a:link,
27 | a:visited,
28 | a:hover,
29 | a:active {
30 | color: #000;
31 | text-decoration: none;
32 | }
33 |
34 | a:hover {
35 | text-decoration: underline;
36 | cursor: pointer;
37 | }
38 | /* Work in progress */
39 | a.tree-toggle-icon-only {
40 | height: 16px;
41 | width: 20px;
42 | line-height: 16px;
43 | vertical-align: middle;
44 | display: inline-block;
45 | background: url("../image/bstree-halflings.png") no-repeat;
46 | background-position: 0 -22px;
47 | }
48 |
49 | a.tree-toggle {
50 | height: 16px;
51 | padding-left: 20px;
52 | line-height: 16px;
53 | vertical-align: middle;
54 | display: inline-block;
55 | background: url("../image/bstree-halflings.png") no-repeat;
56 | background-position: 0 -22px;
57 | }
58 | a.tree-toggle.closed, a.tree-toggle-icon-only.closed {
59 | background-position: 0 1px;
60 | }
--------------------------------------------------------------------------------
/web_logger/static/css/bootstrap-wysihtml5.css:
--------------------------------------------------------------------------------
1 | ul.wysihtml5-toolbar {
2 | margin: 0;
3 | padding: 0;
4 | display: block;
5 | }
6 |
7 | ul.wysihtml5-toolbar::after {
8 | clear: both;
9 | display: table;
10 | content: "";
11 | }
12 |
13 | ul.wysihtml5-toolbar > li {
14 | float: left;
15 | display: list-item;
16 | list-style: none;
17 | margin: 0 5px 10px 0;
18 | }
19 |
20 | ul.wysihtml5-toolbar a[data-wysihtml5-command=bold] {
21 | font-weight: bold;
22 | }
23 |
24 | ul.wysihtml5-toolbar a[data-wysihtml5-command=italic] {
25 | font-style: italic;
26 | }
27 |
28 | ul.wysihtml5-toolbar a[data-wysihtml5-command=underline] {
29 | text-decoration: underline;
30 | }
31 |
32 | ul.wysihtml5-toolbar a.btn.wysihtml5-command-active {
33 | background-image: none;
34 | -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
35 | -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
36 | box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);
37 | background-color: #E6E6E6;
38 | background-color: #D9D9D9;
39 | outline: 0;
40 | }
41 |
42 | ul.wysihtml5-commands-disabled .dropdown-menu {
43 | display: none !important;
44 | }
45 |
46 | ul.wysihtml5-toolbar div.wysihtml5-colors {
47 | display:block;
48 | width: 50px;
49 | height: 20px;
50 | margin-top: 2px;
51 | margin-left: 5px;
52 | position: absolute;
53 | pointer-events: none;
54 | }
55 |
56 | ul.wysihtml5-toolbar a.wysihtml5-colors-title {
57 | padding-left: 70px;
58 | }
59 |
60 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="black"] {
61 | background: black !important;
62 | }
63 |
64 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="silver"] {
65 | background: silver !important;
66 | }
67 |
68 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="gray"] {
69 | background: gray !important;
70 | }
71 |
72 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="maroon"] {
73 | background: maroon !important;
74 | }
75 |
76 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="red"] {
77 | background: red !important;
78 | }
79 |
80 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="purple"] {
81 | background: purple !important;
82 | }
83 |
84 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="green"] {
85 | background: green !important;
86 | }
87 |
88 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="olive"] {
89 | background: olive !important;
90 | }
91 |
92 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="navy"] {
93 | background: navy !important;
94 | }
95 |
96 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="blue"] {
97 | background: blue !important;
98 | }
99 |
100 | ul.wysihtml5-toolbar div[data-wysihtml5-command-value="orange"] {
101 | background: orange !important;
102 | }
103 |
--------------------------------------------------------------------------------
/web_logger/static/css/colorpicker.css:
--------------------------------------------------------------------------------
1 | /*
2 | Colorpicker for Bootstrap
3 | Copyright 2012 Stefan Petre
4 | Licensed under the Apache License v2.0
5 | http://www.apache.org/licenses/LICENSE-2.0
6 | */
7 | .colorpicker-saturation { width: 100px; height: 100px; background-image: url(../image/saturation.png); cursor: crosshair; float: left; } .colorpicker-saturation i { display: block; height: 5px; width: 5px; border: 1px solid #000; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; position: absolute; top: 0; left: 0; margin: -4px 0 0 -4px; } .colorpicker-saturation i b { display: block; height: 5px; width: 5px; border: 1px solid #fff; -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } .colorpicker-hue, .colorpicker-alpha { width: 15px; height: 100px; float: left; cursor: row-resize; margin-left: 4px; margin-bottom: 4px; } .colorpicker-hue i, .colorpicker-alpha i { display: block; height: 1px; background: #000; border-top: 1px solid #fff; position: absolute; top: 0; left: 0; width: 100%; margin-top: -1px; } .colorpicker-hue { background-image: url(../image/hue.png); } .colorpicker-alpha { background-image: url(../image/alpha.png); display: none; } .colorpicker { *zoom: 1; top: 0; left: 0; padding: 4px; min-width: 120px; margin-top: 1px; -webkit-border-radius: 4px; -moz-border-radius: 4px; border-radius: 4px; } .colorpicker:before, .colorpicker:after { display: table; content: ""; } .colorpicker:after { clear: both; } .colorpicker:before { content: ''; display: inline-block; border-left: 7px solid transparent; border-right: 7px solid transparent; border-bottom: 7px solid #ccc; border-bottom-color: rgba(0, 0, 0, 0.2); position: absolute; top: -7px; left: 6px; } .colorpicker:after { content: ''; display: inline-block; border-left: 6px solid transparent; border-right: 6px solid transparent; border-bottom: 6px solid #ffffff; position: absolute; top: -6px; left: 7px; } .colorpicker div { position: relative; } .colorpicker.alpha { min-width: 140px; } .colorpicker.alpha .colorpicker-alpha { display: block; } .colorpicker-color { height: 10px; margin-top: 5px; clear: both; background-image: url(../image/alpha.png); background-position: 0 100%; } .colorpicker-color div { height: 10px; } .input-append.color .add-on i, .input-prepend.color .add-on i { display: block; cursor: pointer; width: 16px; height: 16px; }
--------------------------------------------------------------------------------
/web_logger/static/css/coming-soon.css:
--------------------------------------------------------------------------------
1 | /***
2 | Coming Soon Page
3 | ***/
4 | body {
5 | background-color: #ddd;
6 | padding: 0;
7 | margin: 0;
8 | }
9 |
10 | .coming-soon-header {
11 | padding: 20px;
12 | margin-top: 80px;
13 | }
14 |
15 | .coming-soon-content {
16 | padding: 20px;
17 | margin-top: 10px;
18 | }
19 |
20 | .coming-soon-countdown {
21 | padding: 20px;
22 | }
23 |
24 | .coming-soon-content h1,
25 | .coming-soon-content p {
26 | color: #fff;
27 | }
28 |
29 | .coming-soon-content h1 {
30 | font-size: 42px;
31 | line-height: 50px;
32 | margin-bottom: 15px;
33 | font-weight: 300;
34 | }
35 |
36 | .coming-soon-content p {
37 | font-size: 13px;
38 | }
39 |
40 |
41 | .coming-soon-content input {
42 | background: #fff !important;
43 | }
44 |
45 | .coming-soon-footer {
46 | text-align: left !important;
47 | font-size: 12px;
48 | color: #333;
49 | padding: 20px 20px 20px 20px;
50 | }
51 |
52 | /*Countdown*/
53 | #defaultCountdown {
54 | width: 100%;
55 | margin: 10px 0;
56 | overflow: hidden;
57 | }
58 |
59 | #defaultCountdown span.countdown_row {
60 | overflow: hidden;
61 | }
62 |
63 | #defaultCountdown span.countdown_row span {
64 | font-size: 16px;
65 | font-weight: 300;
66 | line-height: 20px;
67 | margin-right: 2px;
68 | }
69 |
70 | #defaultCountdown span.countdown_row > span {
71 | float: left;
72 | }
73 |
74 | #defaultCountdown span.countdown_section {
75 | color: #fff;
76 | padding: 7px 15px !important;
77 | margin-bottom: 2px;
78 | font-weight: 300;
79 | background: url(../image/bg-white.png) repeat;
80 | text-align: center;
81 | }
82 |
83 | #defaultCountdown span.countdown_amount {
84 | display: inline-block;
85 | font-size: 38px !important;
86 | padding: 15px !important;
87 | font-weight: 300;
88 | }
89 |
90 | /*Responsive*/
91 | @media (max-width: 1024px) {
92 | #defaultCountdown span.countdown_amount {
93 | padding: 10px;
94 | }
95 | }
96 |
97 | @media (max-width: 767px) {
98 |
99 | .coming-soon-header,
100 | .coming-soon-countdown,
101 | .coming-soon-content,
102 | .coming-soon-footer {
103 | margin-top: 0px;
104 | padding: 10px;
105 | }
106 | }
107 |
108 | @media (max-width: 320px) {
109 |
110 | .coming-soon-content .btn-subscribe span {
111 | display: none;
112 | }
113 |
114 | }
--------------------------------------------------------------------------------
/web_logger/static/css/email.css:
--------------------------------------------------------------------------------
1 | /***
2 | Email Template Page
3 | ***/
4 | .mail-template ul {
5 | padding:0px;
6 | margin: 0px;
7 | list-style:none;
8 | }
9 |
10 | .mail-template li {
11 | margin:0 5px;
12 | cursor:pointer;
13 | list-style:none;
14 | border:solid 2px #fff;
15 | }
16 |
17 | .mail-template li:hover {
18 | border:solid 2px #aaa;
19 | }
20 |
21 | .mail-template li a{
22 | display:block;
23 | padding:25px;
24 | }
25 |
26 | .mail-template li a:hover {
27 | text-decoration: none;
28 | }
29 |
30 | .mail-template li.color-black {
31 | background:#1f1f1f;
32 | }
33 |
34 | .mail-template li.color-darkblue {
35 | background:#1570a6;
36 | }
37 |
38 | .mail-template li.color-lightblue {
39 | background:#4aabf9;
40 | }
41 |
42 | .mail-template li.color-red {
43 | background:#eb4d41;
44 | }
45 |
46 | .mail-template li.color-green {
47 | background:#28b779;
48 | }
--------------------------------------------------------------------------------
/web_logger/static/css/error.css:
--------------------------------------------------------------------------------
1 | /***
2 | Error Pages
3 | ***/
4 |
5 | /* 404 page option #1 */
6 |
7 | .page-404 {
8 | text-align: center;
9 | }
10 |
11 | .page-404 .number {
12 | display: inline-block;
13 | letter-spacing: -10px;
14 | margin-top: 0px;
15 | line-height: 128px;
16 | font-size: 158px;
17 | font-weight: 300;
18 | color: #7bbbd6;
19 | text-align: right;
20 | }
21 |
22 | .page-404 .details {
23 | margin-left: 40px;
24 | display: inline-block;
25 | padding-top: 0px;
26 | text-align: left;
27 | }
28 |
29 | /* 500 page option #1 */
30 | .page-500 {
31 | text-align: center;
32 | }
33 |
34 | .page-500 .number {
35 | display: inline-block;
36 | letter-spacing: -10px;
37 | line-height: 128px;
38 | font-size: 158px;
39 | font-weight: 300;
40 | color: #ec8c8c;
41 | text-align: right;
42 | }
43 |
44 | .page-500 .details {
45 | margin-left: 40px;
46 | display: inline-block;
47 | text-align: left;
48 | }
49 |
50 | /* 404 page option #2*/
51 | .page-404-full-page {
52 | padding: 20px;
53 | background-color: #fafafa !important;
54 | }
55 |
56 | .page-404-full-page .details input {
57 | background-color: #ffffff;
58 | }
59 |
60 | .page-404-full-page .page-404 {
61 | margin-top: 100px;
62 | }
63 |
64 | /* 500 page option #2*/
65 | .page-500-full-page {
66 | padding: 20px;
67 | background-color: #fafafa !important;
68 | }
69 |
70 | .page-500-full-page .details input {
71 | background-color: #ffffff;
72 | }
73 |
74 | .page-500-full-page .page-500 {
75 | margin-top: 100px;
76 | }
77 |
78 | /* 404 page option #3*/
79 |
80 | .page-404-3 {
81 | background: #000 !important ;
82 | }
83 |
84 | .page-404-3 .page-inner img {
85 | right: 0;
86 | bottom: 0;
87 | z-index: -1;
88 | position: absolute;
89 | }
90 |
91 | .page-404-3 .error-404 {
92 | color: #fff;
93 | text-align: left;
94 | padding: 70px 20px 0;
95 | }
96 |
97 | .page-404-3 h1 {
98 | color: #fff;
99 | font-size: 130px;
100 | line-height: 160px;
101 | }
102 |
103 | .page-404-3 h2 {
104 | color: #fff;
105 | font-size: 30px;
106 | margin-bottom: 30px;
107 | }
108 |
109 | .page-404-3 p {
110 | color: #fff;
111 | font-size: 16px;
112 | }
113 |
114 |
115 | @media (max-width: 480px) {
116 |
117 | .page-404 .number,
118 | .page-500 .number,
119 | .page-404 .details,
120 | .page-500 .details {
121 | text-align: center;
122 | margin-left: 0px;
123 | }
124 |
125 | .page-404-full-page .page-404 {
126 | margin-top: 30px;
127 | }
128 |
129 | .page-404-3 .error-404 {
130 | text-align: left;
131 | padding-top: 10px;
132 | }
133 |
134 | .page-404-3 .page-inner img {
135 | right: 0;
136 | bottom: 0;
137 | z-index: -1;
138 | position: fixed;
139 | }
140 |
141 | }
--------------------------------------------------------------------------------
/web_logger/static/css/invoice.css:
--------------------------------------------------------------------------------
1 | /***
2 | Invoice page
3 | ***/
4 | .invoice table {
5 | margin:30px 0 30px;
6 | }
7 |
8 | .invoice .invoice-logo {
9 | margin-bottom:20px;
10 | }
11 |
12 | .invoice .invoice-logo p {
13 | padding:5px 0;
14 | font-size:26px;
15 | line-height:28px;
16 | text-align:right;
17 | }
18 |
19 | .invoice .invoice-logo p span {
20 | display:block;
21 | font-size:14px;
22 | }
23 |
24 | .invoice .invoice-logo-space {
25 | margin-bottom:15px;
26 | }
27 |
28 | .invoice .invoice-payment strong {
29 | margin-right:5px;
30 | }
31 |
32 | .invoice .invoice-block {
33 | text-align:right;
34 | }
35 |
36 | .invoice .invoice-block .amounts {
37 | margin-top: 20px;
38 | font-size: 14px;
39 | }
--------------------------------------------------------------------------------
/web_logger/static/css/jquery-ui-1.10.1.custom.min.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/css/jquery-ui-1.10.1.custom.min.css
--------------------------------------------------------------------------------
/web_logger/static/css/jquery.easy-pie-chart.css:
--------------------------------------------------------------------------------
1 | .easyPieChart {
2 | position: relative;
3 | text-align: center;
4 | }
5 |
6 | .easyPieChart canvas {
7 | position: absolute;
8 | top: 0;
9 | left: 0;
10 | }
11 |
--------------------------------------------------------------------------------
/web_logger/static/css/jquery.fileupload-ui.css:
--------------------------------------------------------------------------------
1 | @charset "UTF-8";
2 | /*
3 | * jQuery File Upload UI Plugin CSS 6.10
4 | * https://github.com/blueimp/jQuery-File-Upload
5 | *
6 | * Copyright 2010, Sebastian Tschan
7 | * https://blueimp.net
8 | *
9 | * Licensed under the MIT license:
10 | * http://www.opensource.org/licenses/MIT
11 | */
12 |
13 | .fileinput-button {
14 | position: relative;
15 | overflow: hidden;
16 | float: left;
17 | margin-right: 4px;
18 | }
19 | .fileinput-button input {
20 | position: absolute;
21 | top: 0;
22 | right: 0;
23 | margin: 0;
24 | opacity: 0;
25 | filter: alpha(opacity=0);
26 | transform: translate(-300px, 0) scale(4);
27 | font-size: 23px;
28 | direction: ltr;
29 | cursor: pointer;
30 | }
31 | .fileupload-buttonbar .btn,
32 | .fileupload-buttonbar .toggle {
33 | margin-bottom: 5px;
34 | }
35 | .files .progress {
36 | width: 200px;
37 | }
38 | .progress-animated .bar {
39 | background: url(../image/progressbar.gif) !important;
40 | filter: none;
41 | }
42 | .fileupload-loading {
43 | position: absolute;
44 | left: 50%;
45 | width: 128px;
46 | height: 128px;
47 | background: url(../image/loading.gif) center no-repeat;
48 | display: none;
49 | }
50 | .fileupload-processing .fileupload-loading {
51 | display: block;
52 | }
53 |
54 | /* Fix for IE 6: */
55 | * html .fileinput-button {
56 | line-height: 24px;
57 | margin: 1px -3px 0 0;
58 | }
59 |
60 | /* Fix for IE 7: */
61 | * + html .fileinput-button {
62 | padding: 2px 15px;
63 | margin: 1px 0 0 0;
64 | }
65 |
66 | @media (max-width: 767px) {
67 | .files .btn span {
68 | display: none;
69 | }
70 | .files .preview * {
71 | width: 40px;
72 | }
73 | .files .name * {
74 | width: 80px;
75 | display: inline-block;
76 | word-wrap: break-word;
77 | }
78 | .files .progress {
79 | width: 20px;
80 | }
81 | .files .delete {
82 | width: 60px;
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/web_logger/static/css/jquery.gritter.css:
--------------------------------------------------------------------------------
1 | /* the norm */
2 | #gritter-notice-wrapper {
3 | position:fixed;
4 | top:20px;
5 | right:20px;
6 | width:301px;
7 | z-index:9999;
8 | }
9 | #gritter-notice-wrapper.top-left {
10 | left: 20px;
11 | right: auto;
12 | }
13 | #gritter-notice-wrapper.bottom-right {
14 | top: auto;
15 | left: auto;
16 | bottom: 20px;
17 | right: 20px;
18 | }
19 | #gritter-notice-wrapper.bottom-left {
20 | top: auto;
21 | right: auto;
22 | bottom: 20px;
23 | left: 20px;
24 | }
25 | .gritter-item-wrapper {
26 | position:relative;
27 | margin:0 0 10px 0;
28 | background:url('../image/ie-spacer.gif'); /* ie7/8 fix */
29 | }
30 | .gritter-top {
31 | background:url(../image/gritter.png) no-repeat left -30px;
32 | height:10px;
33 | }
34 | .hover .gritter-top {
35 | background-position:right -30px;
36 | }
37 | .gritter-bottom {
38 | background:url(../image/gritter.png) no-repeat left bottom;
39 | height:8px;
40 | margin:0;
41 | }
42 | .hover .gritter-bottom {
43 | background-position: bottom right;
44 | }
45 | .gritter-item {
46 | display:block;
47 | background:url(../image/gritter.png) no-repeat left -40px;
48 | color:#eee;
49 | padding:2px 11px 8px 11px;
50 | font-size: 11px;
51 | font-family:verdana;
52 | }
53 | .hover .gritter-item {
54 | background-position:right -40px;
55 | }
56 | .gritter-item p {
57 | padding:0;
58 | margin:0;
59 | word-wrap:break-word;
60 | }
61 | .gritter-close {
62 | display:none;
63 | position:absolute;
64 | top:5px;
65 | left:3px;
66 | background:url(../image/gritter.png) no-repeat left top;
67 | cursor:pointer;
68 | width:30px;
69 | height:30px;
70 | }
71 | .gritter-title {
72 | font-size:14px;
73 | font-weight:bold;
74 | padding:0 0 7px 0;
75 | display:block;
76 | text-shadow:1px 1px 0 #000; /* Not supported by IE :( */
77 | }
78 | .gritter-image {
79 | width:48px;
80 | height:48px;
81 | float:left;
82 | }
83 | .gritter-with-image,
84 | .gritter-without-image {
85 | padding:0;
86 | }
87 | .gritter-with-image {
88 | width:220px;
89 | float:right;
90 | }
91 | /* for the light (white) version of the gritter notice */
92 | .gritter-light .gritter-item,
93 | .gritter-light .gritter-bottom,
94 | .gritter-light .gritter-top,
95 | .gritter-light .gritter-close {
96 | background-image: url(../image/gritter-light.png);
97 | color: #222;
98 | }
99 | .gritter-light .gritter-title {
100 | text-shadow: none;
101 | }
102 |
--------------------------------------------------------------------------------
/web_logger/static/css/jquery.nestable.css:
--------------------------------------------------------------------------------
1 | /**
2 | * Nestable
3 | */
4 | .dd-list { display: block; position: relative; margin: 0; padding: 0; list-style: none; }
5 | .dd-list .dd-list { padding-left: 30px; }
6 | .dd-collapsed .dd-list { display: none; }
7 |
8 | .dd-item,
9 | .dd-empty,
10 | .dd-placeholder { display: block; position: relative; margin: 0; padding: 0; min-height: 20px; font-size: 13px; line-height: 20px; }
11 |
12 | .dd-handle { display: block; height: 30px; margin: 5px 0; cursor: move; padding: 5px 10px; color: #333; text-decoration: none; font-weight: 400; border: 1px solid #ccc;
13 | background: #fafafa;
14 | -webkit-border-radius: 3px;
15 | border-radius: 3px;
16 | box-sizing: border-box; -moz-box-sizing: border-box;
17 | }
18 | .dd-handle:hover { color: #2ea8e5; background: #fff; }
19 |
20 | .dd-item > button { display: block; position: relative; cursor: pointer; float: left; width: 25px; height: 20px; margin: 7px 0; padding: 0; text-indent: 100%; white-space: nowrap; overflow: hidden; border: 0; background: transparent; font-size: 10px; line-height: 1; text-align: center; font-weight: bold; }
21 | .dd-item > button:before { content: '\f067'; display: block; position: absolute; width: 100%; text-align: center; text-indent: 0; font-family: 'FontAwesome' }
22 | .dd-item > button[data-action="collapse"]:before { content: '\f068'; }
23 |
24 | .dd-placeholder,
25 | .dd-empty {
26 | margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf;
27 | box-sizing: border-box; -moz-box-sizing: border-box; }
28 | .dd-empty { border: 1px dashed #bbb; min-height: 100px; background-color: #e5e5e5;
29 | background-size: 60px 60px;
30 | background-position: 0 0, 30px 30px;
31 | }
32 |
33 | .dd-dragel { position: absolute; pointer-events: none; z-index: 9999; }
34 | .dd-dragel > .dd-item .dd-handle { margin-top: 0; }
35 | .dd-dragel .dd-handle {
36 | -webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);
37 | box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);
38 | }
39 |
40 | .dd-hover > .dd-handle { background: #2ea8e5 !important; }
41 |
42 | /**
43 | * Nestable Draggable Handles
44 | */
45 |
46 | .dd3-content { display: block; height: 30px; margin: 5px 0; padding: 5px 10px 5px 40px; color: #333; text-decoration: none; font-weight: 400; border: 1px solid #ccc;
47 | background: #fafafa;
48 | -webkit-border-radius: 3px;
49 | border-radius: 3px;
50 | box-sizing: border-box; -moz-box-sizing: border-box;
51 | }
52 | .dd3-content:hover { color: #2ea8e5; background: #fff; }
53 |
54 | .dd-dragel > .dd3-item > .dd3-content { margin: 0; }
55 |
56 | .dd3-item > button { margin-left: 30px; }
57 |
58 | .dd3-handle { position: absolute; margin: 0; left: 0; top: 0; cursor:move; width: 30px; text-indent: 100%; white-space: nowrap; overflow: hidden;
59 | border: 1px solid #aaa;
60 | background: #ddd;
61 | border-top-right-radius: 0;
62 | border-bottom-right-radius: 0;
63 | }
64 | .dd3-handle:before { content: '≡'; display: block; position: absolute; left: 0; top: 3px; width: 100%; text-align: center; text-indent: 0; color: #fff; font-size: 20px; font-weight: normal; }
65 | .dd3-handle:hover { background: #ddd; }
--------------------------------------------------------------------------------
/web_logger/static/css/jquery.tagsinput.css:
--------------------------------------------------------------------------------
1 | div.tagsinput { border:1px solid #CCC; background: #FFF; padding:5px; width:300px; height:100px; overflow-y: auto;}
2 | div.tagsinput span.tag { border: 1px solid #a5d24a; -moz-border-radius:2px; -webkit-border-radius:2px; display: block; float: left; padding: 5px; text-decoration:none; background: #cde69c; color: #638421; margin-right: 5px; margin-bottom:5px;font-family: helvetica; font-size:13px;}
3 | div.tagsinput span.tag a { font-weight: bold; color: #82ad2b; text-decoration:none; font-size: 11px; }
4 | div.tagsinput input { width:80px; margin:0px; font-family: helvetica; font-size: 13px; border:1px solid transparent; padding:5px; background: transparent; color: #000; outline:0px; margin-right:5px; margin-bottom:5px; }
5 | div.tagsinput div { display:block; float: left; }
6 | .tags_clear { clear: both; width: 100%; height: 0px; }
7 | .not_valid {background: #FBD8DB !important; color: #90111A !important;}
8 |
--------------------------------------------------------------------------------
/web_logger/static/css/jquery.ui.slider.css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/css/jquery.ui.slider.css
--------------------------------------------------------------------------------
/web_logger/static/css/jqvmap.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQVMap Version 1.0
3 | *
4 | * http://jqvmap.com
5 | *
6 | * Copyright 2012, Peter Schmalfeldt
7 | * Licensed under the MIT license.
8 | *
9 | * Fork Me @ https://github.com/manifestinteractive/jqvmap
10 | */
11 | .jqvmap-label
12 | {
13 | position: absolute;
14 | display: none;
15 | -webkit-border-radius: 3px;
16 | -moz-border-radius: 3px;
17 | border-radius: 3px;
18 | background: #292929;
19 | color: white;
20 | font-family: sans-serif, Verdana;
21 | font-size: smaller;
22 | padding: 3px;
23 | }
24 | .jqvmap-zoomin, .jqvmap-zoomout
25 | {
26 | position: absolute;
27 | left: 10px;
28 | -webkit-border-radius: 3px;
29 | -moz-border-radius: 3px;
30 | border-radius: 3px;
31 | background: #000000;
32 | padding: 3px;
33 | color: white;
34 | width: 10px;
35 | height: 10px;
36 | cursor: pointer;
37 | line-height: 10px;
38 | text-align: center;
39 | }
40 | .jqvmap-zoomin
41 | {
42 | top: 10px;
43 | }
44 | .jqvmap-zoomout
45 | {
46 | top: 30px;
47 | }
48 | .jqvmap-region
49 | {
50 | cursor: pointer;
51 | }
52 | .jqvmap-ajax_response
53 | {
54 | width: 100%;
55 | height: 500px;
56 | }
--------------------------------------------------------------------------------
/web_logger/static/css/lock.css:
--------------------------------------------------------------------------------
1 | /***
2 | Lock Page
3 | ***/
4 | body {
5 | background-color: #ddd;
6 | padding: 0;
7 | margin: 0;
8 | }
9 |
10 | .page-lock {
11 | top: 50%;
12 | left: 50%;
13 | position: absolute;
14 | margin-top: -140px;
15 | margin-left: -260px;
16 | }
17 |
18 | .page-lock .page-logo {
19 | margin-bottom: 15px;
20 | }
21 |
22 | .page-lock .page-body {
23 | width: 500px;
24 | padding: 10px;
25 | background: url(../image/bg-white-lock.png) repeat;
26 | }
27 |
28 | .page-lock .page-body:after,
29 | .page-lock .page-body:before {
30 | display: table;
31 | content: "";
32 | line-height: 0;
33 | }
34 |
35 | .page-lock .page-body:after {
36 | clear: both;
37 | }
38 |
39 | .page-lock .page-footer {
40 | margin-top: 10px;
41 | text-align: left !important;
42 | font-size: 12px;
43 | color: #333;
44 | }
45 |
46 | .page-lock img.page-lock-img {
47 | float: left;
48 | width: 200px;
49 | height: auto;
50 | }
51 |
52 | .page-lock .page-lock-info {
53 | float: right;
54 | width: 280px;
55 | }
56 |
57 | .page-lock .page-lock-info h1 {
58 | margin-top: -5px;
59 | font-weight: 300;
60 | color: #fff;
61 | font-size: 28px;
62 | line-height: 32px;
63 | }
64 |
65 | .page-lock .page-lock-info span {
66 | color: #eee;
67 | display: block;
68 | font-size: 14px;
69 | margin-top: -5px;
70 | margin-bottom: 10px;
71 | }
72 |
73 | .page-lock .page-lock-info span em {
74 | color: #333;
75 | font-size: 14px;
76 | font-style: normal;
77 | }
78 |
79 | .page-lock .page-lock-info form {
80 | margin: 28px 0;
81 | }
82 |
83 | .page-lock .page-lock-info input {
84 | background: #fff;
85 | }
86 |
87 | .page-lock .relogin {
88 | margin-top: 10px;
89 | }
90 |
91 | .page-lock .relogin a {
92 | color: #e1e1e1;
93 | }
94 |
95 | /*Responsive*/
96 | @media (max-width: 480px) {
97 | .page-lock {
98 | top:0px;
99 | width: 260px;
100 | margin-top: 20px;
101 | margin-left: -140px;
102 | }
103 |
104 | .page-lock .page-body {
105 | padding: 10px;
106 | text-align: center;
107 | width: 260px;
108 | }
109 |
110 | .page-lock img.page-lock-img {
111 | float: none !important;
112 | display: block;
113 | margin: 0 auto;
114 | text-align: center;
115 | margin-bottom: 15px;
116 | }
117 | .page-lock .page-lock-info {
118 | float: none !important;
119 | width: 260px;
120 | margin: 0 auto;
121 | }
122 | .page-lock .page-lock-info1 form {
123 | margin-bottom: 0;
124 | }
125 | }
--------------------------------------------------------------------------------
/web_logger/static/css/login-soft.css:
--------------------------------------------------------------------------------
1 | /***
2 | Login page
3 | ***/
4 |
5 | /* logo page */
6 | .login {
7 | background-color: #666 !important;
8 | }
9 |
10 | .login .logo {
11 | width: 247px;
12 | margin: 0 auto;
13 | margin-top:60px;
14 | padding: 15px;
15 | text-align: center;
16 | }
17 |
18 |
19 | .login .content {
20 | background: url(../image/bg-white-lock.png) repeat;
21 | width: 291px;
22 | margin: 0 auto;
23 | margin-bottom: 0px;
24 | padding: 30px;
25 | padding-top: 20px;
26 | padding-bottom: 15px;
27 | }
28 |
29 | .login .content h3 {
30 | color: #eee;
31 | }
32 | .login .content h4 {
33 | color: #eee;
34 | }
35 |
36 | .login .content p,
37 | .login .content label {
38 | color: #fff;
39 | }
40 |
41 | .login .content .login-form,
42 | .login .content .forget-form {
43 | padding: 0px;
44 | margin: 0px;
45 | }
46 |
47 | .login .content .m-wrap {
48 | width: 249px;
49 | background-color: #fff;
50 | }
51 |
52 |
53 | .login .content .control-group {
54 | margin-bottom: 20px !important;
55 | }
56 |
57 | .login .content .input-icon .m-wrap {
58 | margin: 0px !important;
59 | }
60 |
61 | .login .content .forget-form {
62 | display: none;
63 | }
64 |
65 | .login .content .register-form {
66 | display: none;
67 | }
68 |
69 | .login .content .form-title {
70 | font-weight: 300;
71 | margin-bottom: 25px;
72 | }
73 |
74 | .login .content .form-actions {
75 | background-color: transparent;
76 | clear: both;
77 | border: 0px;
78 | border-bottom1: 1px solid #999;
79 | padding: 0px 30px 25px 30px;
80 | margin-left: -30px;
81 | margin-right: -30px;
82 | }
83 |
84 | .login .content .forget-form .form-actions {
85 | border: 0;
86 | margin-bottom: 0;
87 | padding-bottom: 20px;
88 | }
89 |
90 | .login .content .register-form .form-actions {
91 | border: 0;
92 | margin-bottom: 0;
93 | padding-bottom: 0px;
94 | }
95 |
96 | .login .content .form-actions .checkbox {
97 | margin-top: 8px;
98 | display: inline-block;
99 | }
100 |
101 | .login .content .form-actions .btn {
102 | margin-top: 1px;
103 | }
104 |
105 | .login .content .forget-password {
106 | margin-top: 25px;
107 | }
108 |
109 | .login .content .create-account {
110 | border-top: 1px dotted #eee;
111 | padding-top: 10px;
112 | margin-top: 15px;
113 | }
114 |
115 | .login .content .create-account a {
116 | display: inline-block;
117 | margin-top: 5px;
118 | }
119 |
120 | .login .copyright {
121 | text-align: center;
122 | width: 270px;
123 | margin: 0 auto;
124 | padding: 10px 10px 0 10px;
125 | color: #eee;
126 | font-size: 12px;
127 | }
128 |
129 | @media (max-width: 480px) {
130 | /***
131 | Login page
132 | ***/
133 | .login .logo {
134 | margin-top:10px;
135 | }
136 |
137 | .login .content {
138 | padding: 30px;
139 | width: 222px;
140 | }
141 |
142 | .login .content h3 {
143 | font-size: 22px;
144 | }
145 |
146 | .login .content .m-wrap {
147 | width: 180px;
148 | }
149 |
150 | .login .checkbox {
151 | font-size: 13px;
152 | }
153 | }
--------------------------------------------------------------------------------
/web_logger/static/css/login.css:
--------------------------------------------------------------------------------
1 | /***
2 | Login page
3 | ***/
4 |
5 | /* logo page */
6 | .login {
7 | background-color: #444 !important;
8 | }
9 |
10 | .login .logo {
11 | width: 247px;
12 | margin: 0 auto;
13 | margin-top:60px;
14 | padding: 15px;
15 | text-align: center;
16 | }
17 |
18 | .login .content {
19 | background-color:#fff;
20 | width: 291px;
21 | margin: 0 auto;
22 | margin-bottom: 0px;
23 | padding: 30px;
24 | padding-top: 20px;
25 | padding-bottom: 15px;
26 | }
27 |
28 | .login .content h3 {
29 | color: #000;
30 | }
31 | .login .content h4 {
32 | color: #555;
33 | }
34 |
35 | .login .content p {
36 | color: #222;
37 | }
38 |
39 | .login .content .login-form,
40 | .login .content .forget-form {
41 | padding: 0px;
42 | margin: 0px;
43 | }
44 |
45 | .login .content .m-wrap {
46 | width: 249px;
47 | border-left: 0 !important;
48 | }
49 |
50 | .login .content .input-icon {
51 | border-left: 2px solid #35aa47 !important;
52 | }
53 |
54 | .login .content .control-group {
55 | margin-bottom: 20px !important;
56 | }
57 |
58 | .login .content .input-icon .m-wrap {
59 | margin: 0px !important;
60 | }
61 |
62 | .login .content .forget-form {
63 | display: none;
64 | }
65 |
66 | .login .content .register-form {
67 | display: none;
68 | }
69 |
70 | .login .content .form-title {
71 | font-weight: 300;
72 | margin-bottom: 25px;
73 | }
74 |
75 | .login .content .form-actions {
76 | background-color: #fff;
77 | clear: both;
78 | border: 0px;
79 | border-bottom: 1px solid #eee;
80 | padding: 0px 30px 25px 30px;
81 | margin-left: -30px;
82 | margin-right: -30px;
83 | }
84 |
85 | .login .content .forget-form .form-actions {
86 | border: 0;
87 | margin-bottom: 0;
88 | padding-bottom: 20px;
89 | }
90 |
91 | .login .content .register-form .form-actions {
92 | border: 0;
93 | margin-bottom: 0;
94 | padding-bottom: 0px;
95 | }
96 |
97 | .login .content .form-actions .checkbox {
98 | margin-top: 8px;
99 | display: inline-block;
100 | }
101 |
102 | .login .content .form-actions .btn {
103 | margin-top: 1px;
104 | }
105 |
106 | .login .content .forget-password {
107 | margin-top: 25px;
108 | }
109 |
110 | .login .content .create-account {
111 | border-top: 1px dotted #eee;
112 | padding-top: 10px;
113 | margin-top: 15px;
114 | }
115 |
116 | .login .content .create-account a {
117 | display: inline-block;
118 | margin-top: 5px;
119 | }
120 |
121 | .login .copyright {
122 | text-align: center;
123 | width: 250px;
124 | margin: 0 auto;
125 | padding: 10px 10px 0 10px;
126 | color: #999;
127 | font-size: 11px;
128 | }
129 |
130 | @media (max-width: 480px) {
131 | /***
132 | Login page
133 | ***/
134 | .login .logo {
135 | margin-top:10px;
136 | }
137 |
138 | .login .content {
139 | padding: 30px;
140 | width: 222px;
141 | }
142 |
143 | .login .content h3 {
144 | font-size: 22px;
145 | }
146 |
147 | .login .content .m-wrap {
148 | width: 180px;
149 | }
150 |
151 | .login .checkbox {
152 | font-size: 13px;
153 | }
154 | }
--------------------------------------------------------------------------------
/web_logger/static/css/multi-select-metro.css:
--------------------------------------------------------------------------------
1 | .ms-container{
2 | background: transparent url('../image/switch.png') no-repeat 170px 80px;
3 | display: inline-block;
4 | }
5 |
6 | .ms-container:after{
7 | content: "."; display: block; height: 0; line-height: 0; font-size: 0; clear: both; min-height: 0; visibility: hidden;
8 | }
9 |
10 | .ms-container .ms-selectable, .ms-container .ms-selection{
11 |
12 | background: #fff;
13 | color: #555555;
14 | float: left;
15 | }
16 |
17 | .ms-container .ms-list{
18 | -webkit-transition: border linear 0.2s, box-shadow linear 0.2s;
19 | -moz-transition: border linear 0.2s, box-shadow linear 0.2s;
20 | -ms-transition: border linear 0.2s, box-shadow linear 0.2s;
21 | -o-transition: border linear 0.2s, box-shadow linear 0.2s;
22 | transition: border linear 0.2s, box-shadow linear 0.2s;
23 | border: 1px solid #ccc;
24 | -webkit-border-radius: 3px;
25 | -moz-border-radius: 3px;
26 | border-radius: 3px;
27 | }
28 |
29 |
30 | .ms-selected{
31 | display:none;
32 | }
33 | .ms-container .ms-selectable{
34 | margin-right: 40px;
35 | }
36 |
37 | .ms-container .ms-list.ms-focus{
38 | border-color: rgba(82, 168, 236, 0.8);
39 | outline: 0;
40 | outline: thin dotted \9;
41 | }
42 |
43 | .ms-container ul{
44 | margin: 0;
45 | list-style-type: none;
46 | padding: 0;
47 | }
48 |
49 | .ms-container .ms-optgroup-container{
50 | width: 100%;
51 | }
52 |
53 | .ms-container ul.ms-list{
54 | width: 160px;
55 | height: 200px;
56 | padding: 0;
57 | overflow-y: auto;
58 | }
59 |
60 | .ms-container .ms-optgroup-label{
61 | margin: 0;
62 | padding: 5px 0px 0px 5px;
63 | cursor: pointer;
64 | font-size: 14px;
65 | color: #999;
66 | }
67 |
68 | .ms-container .ms-selectable li.ms-elem-selectable,
69 | .ms-container .ms-selection li.ms-elem-selection{
70 | border-bottom: 1px #eee solid;
71 | padding: 2px 10px;
72 | color: #555;
73 | font-size: 13px;
74 | }
75 |
76 | .ms-container .ms-selectable li.ms-hover,
77 | .ms-container .ms-selection li.ms-hover{
78 | cursor: pointer;
79 | color: #fff;
80 | text-decoration: none;
81 | background-color: #4b8df8;
82 | }
83 |
84 | .ms-container .ms-selectable li.disabled,
85 | .ms-container .ms-selection li.disabled{
86 | background-color: #eee;
87 | color: #aaa;
88 | cursor: text;
89 | }
90 |
--------------------------------------------------------------------------------
/web_logger/static/css/news.css:
--------------------------------------------------------------------------------
1 | /***
2 | News Page
3 | ***/
4 |
5 | .news-page {
6 | padding-bottom: 20px;
7 | }
8 |
9 | .news-page h1 {
10 | margin-bottom: 20px;
11 | }
12 |
13 | .news-page h2 {
14 | font-size: 38.5px;
15 | margin-bottom: 20px;
16 | }
17 |
18 | .news-page .top-news {
19 | margin-top: 0;
20 | }
21 |
22 | /*News Feeds*/
23 | .news-blocks {
24 | padding: 10px;
25 | margin-bottom: 10px;
26 | background: #faf6ea;
27 | border-top: solid 2px #faf6ea;
28 | }
29 |
30 | .news-blocks:hover {
31 | background: #fff;
32 | border-color: #78cff8;
33 | transition: all 0.4s ease-in-out 0s;
34 | -moz-transition: all 0.4s ease-in-out 0s;
35 | -webkit-transition: all 0.4s ease-in-out 0s;
36 | }
37 |
38 | .news-blocks h3 {
39 | margin: 0 0 5px 0;
40 | font-size: 23px;
41 | line-height: 32px;
42 | }
43 |
44 | .news-blocks h3 a {
45 | color: #000;
46 | }
47 |
48 | .news-blocks h3 a:hover {
49 | color: #78cff8;
50 | text-decoration: none;
51 | }
52 |
53 | .news-blocks p {
54 | overflow: hidden;
55 | }
56 |
57 | .news-blocks a.news-block-btn {
58 | color: #000;
59 | display: block;
60 | font-size: 14px;
61 | background: none;
62 | padding: 5px 10px 0;
63 | text-align: right;
64 | text-decoration: none;
65 | }
66 |
67 | .news-blocks a.news-block-btn i {
68 | margin-left: 3px;
69 | }
70 |
71 |
72 | .news-blocks a.news-block-btn:hover {
73 | text-decoration: none;
74 | }
75 |
76 | .news-blocks img.news-block-img {
77 | width: 70px;
78 | height: 70px;
79 | margin: 5px 10px 0 0;
80 | }
81 |
82 | .news-blocks .news-block-tags {
83 | margin-bottom: 8px;
84 | }
85 |
86 | .news-blocks .news-block-tags strong {
87 | margin-right: 10px;
88 | font-weight: 400;
89 | }
90 |
91 | .news-blocks .news-block-tags em {
92 | font-style: normal;
93 | }
94 |
95 | /*News Item Page*/
96 | .news-item-page {
97 | padding: 10px 0;
98 | }
99 |
100 | .blog-tag-data ul {
101 | margin-bottom: 5px;
102 | }
103 |
104 | .blog-tag-data li {
105 | padding: 0;
106 | }
107 |
108 | .blog-tag-data li i {
109 | color: #78cff8;
110 | }
111 |
112 | .blog-tag-data li a {
113 | padding: 0;
114 | color: #555;
115 | margin-right: 8px;
116 | }
117 |
118 | .blog-tag-data {
119 | margin-bottom: 10px;
120 | }
121 |
122 | .blog-tag-data img {
123 | margin-bottom: 12px;
124 | }
125 |
126 | .blog-tag-data ul.blog-tags a {
127 | background: #eee;
128 | padding: 1px 4px;
129 | margin: 0 4px 4px 0;
130 | display: inline-block;
131 | }
132 |
133 | .blog-tag-data ul.blog-tags a:hover {
134 | background: #ddd;
135 | text-decoration: none;
136 | }
137 |
138 | .blog-tag-data .blog-tag-data-inner {
139 | text-align: right;
140 | }
141 |
142 |
143 |
--------------------------------------------------------------------------------
/web_logger/static/css/print.css:
--------------------------------------------------------------------------------
1 | /***
2 | Import fonts
3 | ***/
4 | .header {
5 | display: none;
6 | }
7 |
8 | .page-sidebar {
9 | display: none;
10 | }
11 |
12 | .color-panel {
13 | display: none;
14 | }
15 |
16 | .hidden-print {
17 | display: none;
18 | }
19 |
20 | .footer {
21 | display: none;
22 | }
23 |
24 | .no-page-break {
25 | page-break-after: avoid;
26 | }
27 |
28 | .page-container {
29 | margin: 0px;
30 | padding: 0px;
31 | }
32 |
33 | .page-content {
34 | min-height: auto !important;
35 | }
--------------------------------------------------------------------------------
/web_logger/static/css/promo.css:
--------------------------------------------------------------------------------
1 | /***
2 | Promo Page
3 | ***/
4 |
5 | .promo-page {
6 | padding-left: 0;
7 | padding-right: 0;
8 | min-height: 650px;
9 | }
10 |
11 | .promo-page h1, .promo-page h2 {
12 | font-size: 50px;
13 | line-height: 60px;
14 | }
15 |
16 | .promo-page .btn.xlarge {
17 | font-size: 22px;
18 | padding: 7px 25px;
19 | margin: 5px 0;
20 | }
21 |
22 | .promo-page input.m-wrap {
23 | background: #fff;
24 | }
25 |
26 | /*page row options*/
27 |
28 | .promo-page .block-transparent {
29 | min-height: 350px;
30 | padding: 50px 20px 30px 20px;
31 | }
32 |
33 | .promo-page .block-grey {
34 | min-height: 350px;
35 | padding: 50px 20px 30px 20px;
36 | background: #eeedf2;
37 | }
38 |
39 | .promo-page .block-yellow {
40 | min-height: 350px;
41 | padding: 50px 20px 30px 20px;
42 | background: #ffd800;
43 | }
44 |
45 | .promo-page .block-footer {
46 | padding: 30px 20px 30px 20px;
47 | background: #eeedf2;
48 | }
49 |
50 |
--------------------------------------------------------------------------------
/web_logger/static/css/style-non-responsive.css:
--------------------------------------------------------------------------------
1 | /***
2 | Large notebooks and desktops
3 | ***/
4 |
5 | /***
6 | Page sidebar
7 | ***/
8 | .page-sidebar {
9 | position: absolute;
10 | width: 225px;
11 | }
12 |
13 | .page-sidebar-fixed .page-sidebar {
14 | position: fixed !important;
15 | top: 41px;
16 | }
17 |
18 | .page-sidebar-fixed ul.page-sidebar-menu > li.last {
19 | margin-bottom: 15px !important;
20 | }
21 |
22 | .page-sidebar-fixed.page-sidebar-hover-on .page-sidebar {
23 | z-index: 10000;
24 | width: 35px;
25 | }
26 |
27 | .page-sidebar-fixed.page-sidebar-hover-on .page-sidebar .selected {
28 | display: none;
29 | }
30 |
31 | .page-sidebar-fixed.page-sidebar-hover-on .page-content {
32 | margin-left: 35px;
33 | }
34 | .page-sidebar-fixed.page-sidebar-hover-on .footer {
35 | margin-left: 35px;
36 | }
37 |
38 | .page-sidebar-fixed .page-sidebar-closed .page-sidebar .sidebar-search .submit,
39 | .page-sidebar-fixed .page-sidebar .sidebar-toggler {
40 | -webkit-transition: all 0.2s ease;
41 | -moz-transition: all 0.2s ease;
42 | -o-transition: all 0.2s ease;
43 | transition: all 0.2s ease;
44 | }
45 |
46 | .page-sidebar-hovering {
47 | overflow: hidden !important;
48 | }
49 |
50 | .page-sidebar-hovering .sub-menu,
51 | .page-sidebar-hovering span.title,
52 | .page-sidebar-hovering span.arrow {
53 | display: none !important;
54 | }
55 |
56 | .page-sidebar-hovering .submit {
57 | opacity: 0;
58 | width: 0 !important;
59 | height: 0 !important;
60 | }
61 |
62 | /***
63 | Page content
64 | ***/
65 | .page-content {
66 | margin-left: 225px;
67 | margin-top: 0px;
68 | min-height: 760px;
69 | }
70 |
71 | .page-sidebar-fixed .page-content {
72 | min-height: 600px;
73 | }
74 |
75 | .page-content.no-min-height {
76 | min-height: auto;
77 | }
78 |
79 | /***
80 | Footer
81 | ***/
82 |
83 | /* fixed sidebar */
84 | .page-sidebar-fixed .footer {
85 | margin-left: 225px;
86 | background-color: #fff;
87 | }
88 |
89 | .page-sidebar-fixed .footer .footer-inner {
90 | color: #333;
91 | }
92 |
93 | .page-sidebar-fixed.page-sidebar-closed .footer {
94 | margin-left: 35px;
95 | }
96 |
97 | .page-sidebar-fixed .footer .footer-tools .go-top {
98 | background-color: #666;
99 | }
100 |
101 | .page-sidebar-fixed .footer .footer-tools .go-top i {
102 | color: #ddd;
103 | }
104 |
105 | /* boxed layout */
106 | .page-boxed .header .brand {
107 | margin-left: 0px !important;
108 | width: 226px;
109 | }
110 |
111 | .page-boxed .header .brand img {
112 | margin-left: 10px;
113 | }
114 |
--------------------------------------------------------------------------------
/web_logger/static/css/timepicker.css:
--------------------------------------------------------------------------------
1 | .bootstrap-timepicker.dropdown-menu {
2 | border-radius: 4px 4px 4px 4px;
3 | display: none;
4 | left: 0;
5 | margin-top: 1px;
6 | padding: 4px;
7 | top: 0;
8 | min-width: 10px;
9 | z-index: 99999;
10 | }
11 | .bootstrap-timepicker.dropdown-menu.open {
12 | display: inline-block;
13 | }
14 | .bootstrap-timepicker.dropdown-menu:before {
15 | border-bottom: 7px solid rgba(0, 0, 0, 0.2);
16 | border-left: 7px solid transparent;
17 | border-right: 7px solid transparent;
18 | content: "";
19 | left: 6px;
20 | position: absolute;
21 | top: -7px;
22 | }
23 | .bootstrap-timepicker.dropdown-menu:after {
24 | border-bottom: 6px solid #FFFFFF;
25 | border-left: 6px solid transparent;
26 | border-right: 6px solid transparent;
27 | content: "";
28 | left: 7px;
29 | position: absolute;
30 | top: -6px;
31 | }
32 | .bootstrap-timepicker.modal {
33 | margin-left: -100px;
34 | margin-top: 0;
35 | top: 30%;
36 | width: 200px;
37 | }
38 | .bootstrap-timepicker.modal .modal-header h3 {
39 | font-size: 16px !important;
40 | margin-top: 3px;
41 | margin-bottom: 3px;
42 | }
43 | .bootstrap-timepicker.modal .modal-content {
44 | padding: 0;
45 | }
46 | .bootstrap-timepicker table {
47 | margin: 0;
48 | width: 100%;
49 | }
50 | .bootstrap-timepicker table td {
51 | height: 30px;
52 | margin: 0;
53 | padding: 2px;
54 | text-align: center;
55 | }
56 | .bootstrap-timepicker table td span {
57 | width: 100%;
58 | }
59 | .bootstrap-timepicker table td a {
60 | border: 1px solid transparent;
61 | display: inline-block;
62 | margin: 0;
63 | outline: 0 none;
64 | padding: 8px 0;
65 | width: 3em;
66 | }
67 | .bootstrap-timepicker table td a:hover {
68 | background-color: #EEEEEE;
69 | border-color: #DDDDDD;
70 | border-radius: 4px 4px 4px 4px;
71 | text-decoration: none;
72 | }
73 | .bootstrap-timepicker table td a i {
74 | margin-top: 2px;
75 | }
76 | .bootstrap-timepicker table td input {
77 | margin: 0;
78 | text-align: center;
79 | width: 25px;
80 | }
81 | .bootstrap-timepicker-component .add-on {
82 | cursor: pointer;
83 | }
84 | .bootstrap-timepicker-component .add-on i {
85 | display: block;
86 | height: 16px;
87 | width: 16px;
88 | }
89 |
--------------------------------------------------------------------------------
/web_logger/static/image/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/1.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/10.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/10.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/11.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/11.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/2.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/3.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/4.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/5.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/6.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/7.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/7.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/8.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/8.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/9.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/9.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/KwPYo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/KwPYo.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/alpha.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/alpha.png
--------------------------------------------------------------------------------
/web_logger/static/image/amazon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/amazon.png
--------------------------------------------------------------------------------
/web_logger/static/image/animated-overlay.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/animated-overlay.gif
--------------------------------------------------------------------------------
/web_logger/static/image/avatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/avatar.png
--------------------------------------------------------------------------------
/web_logger/static/image/avatar1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/avatar1.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/avatar1_small.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/avatar1_small.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/avatar2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/avatar2.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/avatar3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/avatar3.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/behance.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/behance.png
--------------------------------------------------------------------------------
/web_logger/static/image/bg-input-focus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bg-input-focus.png
--------------------------------------------------------------------------------
/web_logger/static/image/bg-input.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bg-input.png
--------------------------------------------------------------------------------
/web_logger/static/image/bg-opacity.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bg-opacity.png
--------------------------------------------------------------------------------
/web_logger/static/image/bg-white-lock.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bg-white-lock.png
--------------------------------------------------------------------------------
/web_logger/static/image/bg/1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bg/1.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/bg/2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bg/2.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/bg/3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bg/3.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/bg/4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bg/4.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/blank.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/blank.gif
--------------------------------------------------------------------------------
/web_logger/static/image/blogger.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/blogger.png
--------------------------------------------------------------------------------
/web_logger/static/image/bstree-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/bstree-halflings.png
--------------------------------------------------------------------------------
/web_logger/static/image/chosen-sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/chosen-sprite.png
--------------------------------------------------------------------------------
/web_logger/static/image/css:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/css
--------------------------------------------------------------------------------
/web_logger/static/image/datatable-row-openclose.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/datatable-row-openclose.png
--------------------------------------------------------------------------------
/web_logger/static/image/deviantart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/deviantart.png
--------------------------------------------------------------------------------
/web_logger/static/image/dribbble.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/dribbble.png
--------------------------------------------------------------------------------
/web_logger/static/image/dropbox.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/dropbox.png
--------------------------------------------------------------------------------
/web_logger/static/image/earth.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/earth.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/evernote.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/evernote.png
--------------------------------------------------------------------------------
/web_logger/static/image/facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/facebook.png
--------------------------------------------------------------------------------
/web_logger/static/image/fancybox_loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/fancybox_loading.gif
--------------------------------------------------------------------------------
/web_logger/static/image/fancybox_overlay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/fancybox_overlay.png
--------------------------------------------------------------------------------
/web_logger/static/image/fancybox_sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/fancybox_sprite.png
--------------------------------------------------------------------------------
/web_logger/static/image/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/favicon.ico
--------------------------------------------------------------------------------
/web_logger/static/image/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/web_logger/static/image/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/web_logger/static/image/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/web_logger/static/image/forrst.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/forrst.png
--------------------------------------------------------------------------------
/web_logger/static/image/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/github.png
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons-halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons-halflings-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons-halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons-halflings.png
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons-regular.eot
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons-regular.ttf
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons-regular.woff
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons.png
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons_halflings-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons_halflings-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/glyphicons_halflings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphicons_halflings.png
--------------------------------------------------------------------------------
/web_logger/static/image/glyphiconshalflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphiconshalflings-regular.eot
--------------------------------------------------------------------------------
/web_logger/static/image/glyphiconshalflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphiconshalflings-regular.ttf
--------------------------------------------------------------------------------
/web_logger/static/image/glyphiconshalflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/glyphiconshalflings-regular.woff
--------------------------------------------------------------------------------
/web_logger/static/image/googleplus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/googleplus.png
--------------------------------------------------------------------------------
/web_logger/static/image/gritter-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/gritter-light.png
--------------------------------------------------------------------------------
/web_logger/static/image/gritter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/gritter.png
--------------------------------------------------------------------------------
/web_logger/static/image/hor-menu-search-close-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/hor-menu-search-close-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/hor-menu-search-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/hor-menu-search-close.png
--------------------------------------------------------------------------------
/web_logger/static/image/hor-menu-search.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/hor-menu-search.png
--------------------------------------------------------------------------------
/web_logger/static/image/hue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/hue.png
--------------------------------------------------------------------------------
/web_logger/static/image/icon-color-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/icon-color-close.png
--------------------------------------------------------------------------------
/web_logger/static/image/icon-color.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/icon-color.png
--------------------------------------------------------------------------------
/web_logger/static/image/icon-img-down.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/icon-img-down.png
--------------------------------------------------------------------------------
/web_logger/static/image/icon-img-up.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/icon-img-up.png
--------------------------------------------------------------------------------
/web_logger/static/image/ie-spacer.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ie-spacer.gif
--------------------------------------------------------------------------------
/web_logger/static/image/image1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/image1.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/image2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/image2.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/image3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/image3.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/image4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/image4.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/image5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/image5.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/img1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/img1.png
--------------------------------------------------------------------------------
/web_logger/static/image/img1_2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/img1_2.png
--------------------------------------------------------------------------------
/web_logger/static/image/img2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/img2.png
--------------------------------------------------------------------------------
/web_logger/static/image/img3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/img3.png
--------------------------------------------------------------------------------
/web_logger/static/image/img4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/img4.png
--------------------------------------------------------------------------------
/web_logger/static/image/inbox-nav-arrow-blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/inbox-nav-arrow-blue.png
--------------------------------------------------------------------------------
/web_logger/static/image/instagram.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/instagram.png
--------------------------------------------------------------------------------
/web_logger/static/image/iphone.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/iphone.png
--------------------------------------------------------------------------------
/web_logger/static/image/item_img.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/item_img.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/item_img1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/item_img1.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/jolicloud.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/jolicloud.png
--------------------------------------------------------------------------------
/web_logger/static/image/js:
--------------------------------------------------------------------------------
1 | alert("The Google Maps API server rejected your request. The \x22sensor\x22 parameter specified in the request must be set to either \x22true\x22 or \x22false\x22.")
--------------------------------------------------------------------------------
/web_logger/static/image/last-fm.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/last-fm.png
--------------------------------------------------------------------------------
/web_logger/static/image/linkedin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/linkedin.png
--------------------------------------------------------------------------------
/web_logger/static/image/loading.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/loading.gif
--------------------------------------------------------------------------------
/web_logger/static/image/logo-big.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/logo-big.png
--------------------------------------------------------------------------------
/web_logger/static/image/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/logo.png
--------------------------------------------------------------------------------
/web_logger/static/image/logo_azteca.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/logo_azteca.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/logo_conquer.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/logo_conquer.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/logo_metronic.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/logo_metronic.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/menu-toggler.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/menu-toggler.png
--------------------------------------------------------------------------------
/web_logger/static/image/overlay-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/overlay-icon.png
--------------------------------------------------------------------------------
/web_logger/static/image/photo1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/photo1.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/photo2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/photo2.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/photo3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/photo3.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/photo4.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/photo4.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/photo5.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/photo5.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/photo6.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/photo6.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/picasa.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/picasa.png
--------------------------------------------------------------------------------
/web_logger/static/image/pintrest.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/pintrest.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-collapse-icon-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-collapse-icon-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-collapse-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-collapse-icon.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-config-icon-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-config-icon-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-config-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-config-icon.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-expand-icon-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-expand-icon-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-expand-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-expand-icon.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-reload-icon-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-reload-icon-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-reload-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-reload-icon.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-remove-icon-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-remove-icon-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/portlet-remove-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/portlet-remove-icon.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_02.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_03.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_04.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_05.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_06.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_07.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_08.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_09.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_10.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_11.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_12.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_13.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_14.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_15.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_16.png
--------------------------------------------------------------------------------
/web_logger/static/image/preview_17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/preview_17.png
--------------------------------------------------------------------------------
/web_logger/static/image/profile-img.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/profile-img.png
--------------------------------------------------------------------------------
/web_logger/static/image/profile.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/profile.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/progressbar.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/progressbar.gif
--------------------------------------------------------------------------------
/web_logger/static/image/remove-icon-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/remove-icon-small.png
--------------------------------------------------------------------------------
/web_logger/static/image/rss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/rss.png
--------------------------------------------------------------------------------
/web_logger/static/image/saturation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/saturation.png
--------------------------------------------------------------------------------
/web_logger/static/image/search-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/search-icon.png
--------------------------------------------------------------------------------
/web_logger/static/image/select2-spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/select2-spinner.gif
--------------------------------------------------------------------------------
/web_logger/static/image/select2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/select2.png
--------------------------------------------------------------------------------
/web_logger/static/image/select2x2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/select2x2.png
--------------------------------------------------------------------------------
/web_logger/static/image/sidebar-menu-arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sidebar-menu-arrow.png
--------------------------------------------------------------------------------
/web_logger/static/image/sidebar-search-close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sidebar-search-close.png
--------------------------------------------------------------------------------
/web_logger/static/image/sidebar-toggler.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sidebar-toggler.jpg
--------------------------------------------------------------------------------
/web_logger/static/image/skype.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/skype.png
--------------------------------------------------------------------------------
/web_logger/static/image/social_facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/social_facebook.png
--------------------------------------------------------------------------------
/web_logger/static/image/social_googleplus.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/social_googleplus.png
--------------------------------------------------------------------------------
/web_logger/static/image/social_linkedin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/social_linkedin.png
--------------------------------------------------------------------------------
/web_logger/static/image/social_rss.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/social_rss.png
--------------------------------------------------------------------------------
/web_logger/static/image/social_twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/social_twitter.png
--------------------------------------------------------------------------------
/web_logger/static/image/sort_asc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sort_asc.png
--------------------------------------------------------------------------------
/web_logger/static/image/sort_asc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sort_asc_disabled.png
--------------------------------------------------------------------------------
/web_logger/static/image/sort_both.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sort_both.png
--------------------------------------------------------------------------------
/web_logger/static/image/sort_desc.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sort_desc.png
--------------------------------------------------------------------------------
/web_logger/static/image/sort_desc_disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sort_desc_disabled.png
--------------------------------------------------------------------------------
/web_logger/static/image/spotify.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/spotify.png
--------------------------------------------------------------------------------
/web_logger/static/image/sprite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/sprite.png
--------------------------------------------------------------------------------
/web_logger/static/image/spritemap.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/spritemap.png
--------------------------------------------------------------------------------
/web_logger/static/image/spritemap@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/spritemap@2x.png
--------------------------------------------------------------------------------
/web_logger/static/image/stumbleupon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/stumbleupon.png
--------------------------------------------------------------------------------
/web_logger/static/image/switch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/switch.png
--------------------------------------------------------------------------------
/web_logger/static/image/syncfusion-icons-white.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/syncfusion-icons-white.png
--------------------------------------------------------------------------------
/web_logger/static/image/syncfusion-icons.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/syncfusion-icons.png
--------------------------------------------------------------------------------
/web_logger/static/image/tumblr.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/tumblr.png
--------------------------------------------------------------------------------
/web_logger/static/image/twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/twitter.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_diagonals-thick_18_b81900_40x40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_diagonals-thick_18_b81900_40x40.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_diagonals-thick_20_666666_40x40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_diagonals-thick_20_666666_40x40.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_flat_10_000000_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_flat_10_000000_40x100.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_glass_100_f6f6f6_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_glass_100_f6f6f6_1x400.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_glass_100_fdf5ce_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_glass_100_fdf5ce_1x400.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_glass_65_ffffff_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_glass_65_ffffff_1x400.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_gloss-wave_35_f6a828_500x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_gloss-wave_35_f6a828_500x100.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_highlight-soft_100_eeeeee_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_highlight-soft_100_eeeeee_1x100.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-bg_highlight-soft_75_ffe45c_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-bg_highlight-soft_75_ffe45c_1x100.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-icons_222222_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-icons_222222_256x240.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-icons_228ef1_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-icons_228ef1_256x240.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-icons_888888_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-icons_888888_256x240.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-icons_ef8c08_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-icons_ef8c08_256x240.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-icons_ffd27a_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-icons_ffd27a_256x240.png
--------------------------------------------------------------------------------
/web_logger/static/image/ui-icons_ffffff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/ui-icons_ffffff_256x240.png
--------------------------------------------------------------------------------
/web_logger/static/image/vimeo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/vimeo.png
--------------------------------------------------------------------------------
/web_logger/static/image/vk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/vk.png
--------------------------------------------------------------------------------
/web_logger/static/image/walmart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/walmart.png
--------------------------------------------------------------------------------
/web_logger/static/image/wordpress.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/wordpress.png
--------------------------------------------------------------------------------
/web_logger/static/image/xing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/xing.png
--------------------------------------------------------------------------------
/web_logger/static/image/yahoo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/yahoo.png
--------------------------------------------------------------------------------
/web_logger/static/image/youtube.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/image/youtube.png
--------------------------------------------------------------------------------
/web_logger/static/js/bootstrap-rtl.min.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/js/bootstrap-rtl.min.js
--------------------------------------------------------------------------------
/web_logger/static/js/breakpoints.js:
--------------------------------------------------------------------------------
1 | /*
2 | Breakpoints.js
3 | version 1.0
4 |
5 | Creates handy events for your responsive design breakpoints
6 |
7 | Copyright 2011 XOXCO, Inc
8 | http://xoxco.com/
9 |
10 | Documentation for this plugin lives here:
11 | http://xoxco.com/projects/code/breakpoints
12 |
13 | Licensed under the MIT license:
14 | http://www.opensource.org/licenses/mit-license.php
15 |
16 | */
17 | (function($) {
18 |
19 | var lastSize = 0;
20 | var interval = null;
21 |
22 | $.fn.resetBreakpoints = function() {
23 | $(window).unbind('resize');
24 | if (interval) {
25 | clearInterval(interval);
26 | }
27 | lastSize = 0;
28 | };
29 |
30 | $.fn.setBreakpoints = function(settings) {
31 | var options = jQuery.extend({
32 | distinct: true,
33 | breakpoints: new Array(320,480,768,1024)
34 | },settings);
35 |
36 |
37 | interval = setInterval(function() {
38 |
39 | var w = $(window).width();
40 | var done = false;
41 |
42 | for (var bp in options.breakpoints.sort(function(a,b) { return (b-a) })) {
43 |
44 | // fire onEnter when a browser expands into a new breakpoint
45 | // if in distinct mode, remove all other breakpoints first.
46 | if (!done && w >= options.breakpoints[bp] && lastSize < options.breakpoints[bp]) {
47 | if (options.distinct) {
48 | for (var x in options.breakpoints.sort(function(a,b) { return (b-a) })) {
49 | if ($('body').hasClass('breakpoint-' + options.breakpoints[x])) {
50 | $('body').removeClass('breakpoint-' + options.breakpoints[x]);
51 | $(window).trigger('exitBreakpoint' + options.breakpoints[x]);
52 | }
53 | }
54 | done = true;
55 | }
56 | $('body').addClass('breakpoint-' + options.breakpoints[bp]);
57 | $(window).trigger('enterBreakpoint' + options.breakpoints[bp]);
58 |
59 | }
60 |
61 | // fire onExit when browser contracts out of a larger breakpoint
62 | if (w < options.breakpoints[bp] && lastSize >= options.breakpoints[bp]) {
63 | $('body').removeClass('breakpoint-' + options.breakpoints[bp]);
64 | $(window).trigger('exitBreakpoint' + options.breakpoints[bp]);
65 |
66 | }
67 |
68 | // if in distinct mode, fire onEnter when browser contracts into a smaller breakpoint
69 | if (
70 | options.distinct && // only one breakpoint at a time
71 | w >= options.breakpoints[bp] && // and we are in this one
72 | w < options.breakpoints[bp-1] && // and smaller than the bigger one
73 | lastSize > w && // and we contracted
74 | lastSize >0 && // and this is not the first time
75 | !$('body').hasClass('breakpoint-' + options.breakpoints[bp]) // and we aren't already in this breakpoint
76 | ) {
77 | $('body').addClass('breakpoint-' + options.breakpoints[bp]);
78 | $(window).trigger('enterBreakpoint' + options.breakpoints[bp]);
79 |
80 | }
81 | }
82 |
83 | // set up for next call
84 | if (lastSize != w) {
85 | lastSize = w;
86 | }
87 | },250);
88 | };
89 |
90 | })(jQuery);
91 |
--------------------------------------------------------------------------------
/web_logger/static/js/breakpoints.min.js:
--------------------------------------------------------------------------------
1 | (function(c){var b=0;var a=null;c.fn.resetBreakpoints=function(){c(window).unbind("resize");if(a){clearInterval(a)}b=0};c.fn.setBreakpoints=function(e){var d=jQuery.extend({distinct:true,breakpoints:new Array(320,480,768,1024)},e);a=setInterval(function(){var h=c(window).width();var g=false;for(var i in d.breakpoints.sort(function(k,j){return(j-k)})){if(!g&&h>=d.breakpoints[i]&&b=d.breakpoints[i]){c("body").removeClass("breakpoint-"+d.breakpoints[i]);c(window).trigger("exitBreakpoint"+d.breakpoints[i])}if(d.distinct&&h>=d.breakpoints[i]&&hh&&b>0&&!c("body").hasClass("breakpoint-"+d.breakpoints[i])){c("body").addClass("breakpoint-"+d.breakpoints[i]);c(window).trigger("enterBreakpoint"+d.breakpoints[i])}}if(b!=h){b=h}},250)}})(jQuery);
--------------------------------------------------------------------------------
/web_logger/static/js/canvas-to-blob.min.js:
--------------------------------------------------------------------------------
1 | (function(a){"use strict";var b=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,c=a.Blob&&function(){try{return Boolean(new Blob)}catch(a){return!1}}(),d=c&&a.Uint8Array&&function(){try{return(new Blob([new Uint8Array(100)])).size===100}catch(a){return!1}}(),e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,f=(c||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var b,f,g,h,i,j;a.split(",")[0].indexOf("base64")>=0?b=atob(a.split(",")[1]):b=decodeURIComponent(a.split(",")[1]),f=new ArrayBuffer(b.length),g=new Uint8Array(f);for(h=0;hLoop, Inc. 795 Park Ave, Suite 120
San Francisco, CA 94107"
19 | }
20 | });
21 |
22 | marker.infoWindow.open(map, marker);
23 | });
24 | }
25 | };
26 |
27 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/excanvas.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/js/excanvas.js
--------------------------------------------------------------------------------
/web_logger/static/js/form-fileupload.js:
--------------------------------------------------------------------------------
1 | var FormFileUpload = function () {
2 |
3 |
4 | return {
5 | //main function to initiate the module
6 | init: function () {
7 |
8 | // Initialize the jQuery File Upload widget:
9 | $('#fileupload').fileupload({
10 | // Uncomment the following to send cross-domain cookies:
11 | //xhrFields: {withCredentials: true},
12 | url: 'assets/plugins/jquery-file-upload/server/php/'
13 | });
14 |
15 | // Load existing files:
16 | // Demo settings:
17 | $.ajax({
18 | // Uncomment the following to send cross-domain cookies:
19 | //xhrFields: {withCredentials: true},
20 | url: $('#fileupload').fileupload('option', 'url'),
21 | dataType: 'json',
22 | context: $('#fileupload')[0],
23 | maxFileSize: 5000000,
24 | acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
25 | process: [{
26 | action: 'load',
27 | fileTypes: /^image\/(gif|jpeg|png)$/,
28 | maxFileSize: 20000000 // 20MB
29 | }, {
30 | action: 'resize',
31 | maxWidth: 1440,
32 | maxHeight: 900
33 | }, {
34 | action: 'save'
35 | }
36 | ]
37 | }).done(function (result) {
38 | $(this).fileupload('option', 'done')
39 | .call(this, null, {
40 | result: result
41 | });
42 | });
43 |
44 | // Upload server status check for browsers with CORS support:
45 | if ($.support.cors) {
46 | $.ajax({
47 | url: 'assets/plugins/jquery-file-upload/server/php/',
48 | type: 'HEAD'
49 | }).fail(function () {
50 | $('')
51 | .text('Upload server currently unavailable - ' +
52 | new Date())
53 | .appendTo('#fileupload');
54 | });
55 | }
56 |
57 | // initialize uniform checkboxes
58 | App.initUniform('.fileupload-toggle-checkbox');
59 | }
60 |
61 | };
62 |
63 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/form-samples.js:
--------------------------------------------------------------------------------
1 | var FormSamples = function () {
2 |
3 |
4 | return {
5 | //main function to initiate the module
6 | init: function () {
7 |
8 | // use select2 dropdown instead of chosen as select2 works fine with bootstrap on responsive layouts.
9 | $('.select2_category').select2({
10 | placeholder: "Select an option",
11 | allowClear: true
12 | });
13 |
14 | $('.select2_sample1').select2({
15 | placeholder: "Select a State",
16 | allowClear: true
17 | });
18 |
19 | $(".select2_sample2").select2({
20 | placeholder: "Type to select an option",
21 | allowClear: true,
22 | minimumInputLength: 1,
23 | query: function (query) {
24 | var data = {
25 | results: []
26 | }, i, j, s;
27 | for (i = 1; i < 5; i++) {
28 | s = "";
29 | for (j = 0; j < i; j++) {
30 | s = s + query.term;
31 | }
32 | data.results.push({
33 | id: query.term + i,
34 | text: s
35 | });
36 | }
37 | query.callback(data);
38 | }
39 | });
40 |
41 | $(".select2_sample3").select2({
42 | tags: ["red", "green", "blue", "yellow", "pink"]
43 | });
44 |
45 | }
46 |
47 | };
48 |
49 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/gallery.js:
--------------------------------------------------------------------------------
1 | var Gallery = function () {
2 |
3 | return {
4 | //main function to initiate the module
5 | init: function () {
6 |
7 | App.initFancybox();
8 |
9 | }
10 |
11 | };
12 |
13 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/jquery-1.8.3.min.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/js/jquery-1.8.3.min.js
--------------------------------------------------------------------------------
/web_logger/static/js/jquery.backstretch.min.js:
--------------------------------------------------------------------------------
1 | /*! Backstretch - v2.0.3 - 2012-11-30
2 | * http://srobbin.com/jquery-plugins/backstretch/
3 | * Copyright (c) 2012 Scott Robbin; Licensed MIT */
4 | (function(e,t,n){"use strict";e.fn.backstretch=function(r,s){return(r===n||r.length===0)&&e.error("No images were supplied for Backstretch"),e(t).scrollTop()===0&&t.scrollTo(0,0),this.each(function(){var t=e(this),n=t.data("backstretch");n&&(s=e.extend(n.options,s),n.destroy(!0)),n=new i(this,r,s),t.data("backstretch",n)})},e.backstretch=function(t,n){return e("body").backstretch(t,n).data("backstretch")},e.expr[":"].backstretch=function(t){return e(t).data("backstretch")!==n},e.fn.backstretch.defaults={centeredX:!0,centeredY:!0,duration:5e3,fade:0};var r={wrap:{left:0,top:0,overflow:"hidden",margin:0,padding:0,height:"100%",width:"100%",zIndex:-999999},img:{position:"absolute",display:"none",margin:0,padding:0,border:"none",width:"auto",height:"auto",maxWidth:"none",zIndex:-999999}},i=function(n,i,o){this.options=e.extend({},e.fn.backstretch.defaults,o||{}),this.images=e.isArray(i)?i:[i],e.each(this.images,function(){e("
")[0].src=this}),this.isBody=n===document.body,this.$container=e(n),this.$wrap=e('').css(r.wrap).appendTo(this.$container),this.$root=this.isBody?s?e(t):e(document):this.$container;if(!this.isBody){var u=this.$container.css("position"),a=this.$container.css("zIndex");this.$container.css({position:u==="static"?"relative":u,zIndex:a==="auto"?0:a,background:"none"}),this.$wrap.css({zIndex:-999998})}this.$wrap.css({position:this.isBody&&s?"fixed":"absolute"}),this.index=0,this.show(this.index),e(t).on("resize.backstretch",e.proxy(this.resize,this)).on("orientationchange.backstretch",e.proxy(function(){this.isBody&&t.pageYOffset===0&&(t.scrollTo(0,1),this.resize())},this))};i.prototype={resize:function(){try{var e={left:0,top:0},n=this.isBody?this.$root.width():this.$root.innerWidth(),r=n,i=this.isBody?t.innerHeight?t.innerHeight:this.$root.height():this.$root.innerHeight(),s=r/this.$img.data("ratio"),o;s>=i?(o=(s-i)/2,this.options.centeredY&&(e.top="-"+o+"px")):(s=i,r=s*this.$img.data("ratio"),o=(r-n)/2,this.options.centeredX&&(e.left="-"+o+"px")),this.$wrap.css({width:n,height:i}).find("img:not(.deleteable)").css({width:r,height:s}).css(e)}catch(u){}return this},show:function(t){if(Math.abs(t)>this.images.length-1)return;this.index=t;var n=this,i=n.$wrap.find("img").addClass("deleteable"),s=e.Event("backstretch.show",{relatedTarget:n.$container[0]});return clearInterval(n.interval),n.$img=e("
").css(r.img).bind("load",function(t){var r=this.width||e(t.target).width(),o=this.height||e(t.target).height();e(this).data("ratio",r/o),e(this).fadeIn(n.options.speed||n.options.fade,function(){i.remove(),n.paused||n.cycle(),n.$container.trigger(s,n)}),n.resize()}).appendTo(n.$wrap),n.$img.attr("src",n.images[t]),n},next:function(){return this.show(this.index1&&(clearInterval(this.interval),this.interval=setInterval(e.proxy(function(){this.paused||this.next()},this),this.options.duration)),this},destroy:function(n){e(t).off("resize.backstretch orientationchange.backstretch"),clearInterval(this.interval),n||this.$wrap.remove(),this.$container.removeData("backstretch")}};var s=function(){var e=navigator.userAgent,n=navigator.platform,r=e.match(/AppleWebKit\/([0-9]+)/),i=!!r&&r[1],s=e.match(/Fennec\/([0-9]+)/),o=!!s&&s[1],u=e.match(/Opera Mobi\/([0-9]+)/),a=!!u&&u[1],f=e.match(/MSIE ([0-9]+)/),l=!!f&&f[1];return!((n.indexOf("iPhone")>-1||n.indexOf("iPad")>-1||n.indexOf("iPod")>-1)&&i&&i<534||t.operamini&&{}.toString.call(t.operamini)==="[object OperaMini]"||u&&a<7458||e.indexOf("Android")>-1&&i&&i<533||o&&o<6||"palmGetResource"in t&&i&&i<534||e.indexOf("MeeGo")>-1&&e.indexOf("NokiaBrowser/8.5.0")>-1||l&&l<=6)}()})(jQuery,window);
--------------------------------------------------------------------------------
/web_logger/static/js/jquery.bootpag.min.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | bootpag - jQuery plugin for dynamic pagination
4 |
5 | Copyright (c) 2013 botmonster@7items.com
6 |
7 | Licensed under the MIT license:
8 | http://www.opensource.org/licenses/mit-license.php
9 |
10 | Project home:
11 | http://botmonster.com/jquery-bootpag/
12 |
13 | Version: 1.0.4
14 |
15 | */
16 | (function(f,q){f.fn.bootpag=function(p){function k(e,b){var c,d=0==a.maxVisible?1:a.maxVisible,n=1==a.maxVisible?0:1,m=Math.floor((b-1)/d)*d,g=e.find("li");a.page=b=0>b?0:b>a.total?a.total:b;g.removeClass("disabled");c=1>b-1?1:a.leaps&&b-1>=a.maxVisible?Math.floor((b-1)/d)*d:b-1;g.first().toggleClass("disabled",1===b).attr("data-lp",c).find("a").attr("href",h(c));n=1==a.maxVisible?0:1;c=b+1>a.total?a.total:a.leaps&&b+1=a.total)return this;!f.isNumeric(a.maxVisible)&&!a.maxVisible&&(a.maxVisible=a.total);l.data("settings",a);return this.each(function(){var e,b,c=f(this),d=[''];a.prev&&d.push('- '+a.prev+"
");for(b=1;b<=Math.min(a.total,a.maxVisible);b++)d.push('- '+b+"
");a.next&&(b=a.leaps&&a.total>a.maxVisible?
19 | Math.min(a.maxVisible+1,a.total):2,d.push('- '+a.next+"
"));d.push("
");c.find("ul.bootpag").remove();c.append(d.join("")).addClass("pagination");e=c.find("ul.bootpag");c.find("li").click(function(){var a=f(this);a.hasClass("disabled")||k(e,parseInt(a.attr("data-lp"),10))});k(e,a.page)})}})(jQuery,window);
--------------------------------------------------------------------------------
/web_logger/static/js/jquery.cookie.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * jQuery Cookie Plugin v1.3.1
3 | * https://github.com/carhartl/jquery-cookie
4 | *
5 | * Copyright 2013 Klaus Hartl
6 | * Released under the MIT license
7 | */
8 | (function(a){if(typeof define==="function"&&define.amd){define(["jquery"],a)}else{a(jQuery)}}(function(e){var a=/\+/g;function d(g){return g}function b(g){return decodeURIComponent(g.replace(a," "))}function f(g){if(g.indexOf('"')===0){g=g.slice(1,-1).replace(/\\"/g,'"').replace(/\\\\/g,"\\")}try{return c.json?JSON.parse(g):g}catch(h){}}var c=e.cookie=function(p,o,u){if(o!==undefined){u=e.extend({},c.defaults,u);if(typeof u.expires==="number"){var q=u.expires,s=u.expires=new Date();s.setDate(s.getDate()+q)}o=c.json?JSON.stringify(o):String(o);return(document.cookie=[c.raw?p:encodeURIComponent(p),"=",c.raw?o:encodeURIComponent(o),u.expires?"; expires="+u.expires.toUTCString():"",u.path?"; path="+u.path:"",u.domain?"; domain="+u.domain:"",u.secure?"; secure":""].join(""))}var g=c.raw?d:b;var r=document.cookie.split("; ");var v=p?undefined:{};for(var n=0,k=r.length;n35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('(l($){Q.1o.1t=l(){E=/\\b(?:(?:25[0-5]|2[0-4][0-9]|[1m]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[1m]?[0-9][0-9]?)\\b/;h E.1a(p.1i())};Q.1o.1S=l(){E=/\\b([A-16-9]{1,4}:){7}([A-16-9]{1,4})\\b/i;h E.1a(p.1i())};$.1X.1h({y:l(u,c){f(p.z==0)h;f(1k u==\'1f\'){c=(1k c==\'1f\')?c:u;h p.1d(l(){f(p.18){p.1s();p.18(u,c)}w f(p.1e){t C=p.1e();C.1L(S);C.1z(\'10\',c);C.1b(\'10\',u);C.1w()}})}w{f(p[0].18){u=p[0].1u;c=p[0].1C}w f(14.12&&14.12.19){t C=14.12.19();u=0-C.1D().1b(\'10\',-1E);c=u+C.1H.z}h{u:u,c:c}}},1B:l(s){s=$.1h({v:4},s);f(s.v==4){s.W=M I(\'[0-9]\',\'g\');s.r=\'R.R.R.R\'}f(s.v==6){s.W=M I(\'[A-16-9]\',\'1x\');s.r=\'x:x:x:x:x:x:x:x\'}s.D=s.r.K(\'\').Y();s.q=s.r.X(M I(s.D,\'g\'),\'\').K(\'\').Y();s.O=s.r.K(s.q).Y();h $(p).1d(l(){t a={k:T,n:T,o:T,d:T};a.d=$(p);f(a.d.m()==\'\'||!J(a.d.m()))a.d.m(s.r);a.d.1j(\'1Z\',(s.v==4?15:1c)).1j(\'1W\',(s.v==4?15:1c));l J(o){h 24("o.21"+s.v+"()")};l P(){a.k=a.d.y();a.o=J(L(a.d.m()))?L(a.d.m()):a.o;a.n=a.d.m().K(\'\')};l 1n(o){t G=o.K(s.q);1p(t j=0;j0)G[j]+=s.D}h G.H(s.q)};l L(o){t E=M I(s.O,\'g\');t 1g=M I(s.D,\'g\');h o.X(E,\'0\').X(1g,\'\')};l 11(e){1R(e.1Q){U 8:f(a.n[a.k.c-1]!=s.q){a.n[a.k.c-1]=s.D;a.d.m(a.n.H("")).m()}a.d.y(a.k.c-1);h B;V;U 13:U 1T:a.d.17();V;U 1P:f(a.n[a.k.c]!=s.q&&a.k.c=20&&e.F<=1N)||e.F>1J){f(Q.1q(e.F).1y(s.W)){a.n[a.k.c]=Q.1q(e.F);f(!J(L(a.n.H(\'\')))){f((a.k.c==0||a.n[a.k.c-1]==s.q)){1p(t i=a.k.c+1;i").css("background-color");b.repeat!==!0&&!isNaN(b.repeat)&&b.repeat>0&&(b.repeat-=1);return this.each(function(){b.onHover?
2 | c(this).bind("mouseover",function(){g(b,this,0)}).bind("mouseout",function(){c(this).pulsate("destroy")}):g(b,this,0)})},destroy:function(){return this.each(function(){clearTimeout(this.timer);c(this).css("outline",0)})}},g=function(a,b,d){var f=a.reach;d=d>f?0:d;var h=(f-d)/f,e=a.color.split(",");h="rgba("+e[0].split("(")[1]+","+e[1]+","+e[2].split(")")[0]+","+h+")";e={outline:"2px solid "+h};a.glow?(e["box-shadow"]="0px 0px "+parseInt(d/1.5)+"px "+h,c.browser.webkit&&(e["outline-offset"]=d+"px",
3 | e["outline-radius"]="100 px")):e["outline-offset"]=d+"px";c(b).css(e);b.timer=setTimeout(function(){if(d>=f&&!a.repeat)return c(b).pulsate("destroy"),!1;else if(d>=f&&a.repeat!==!0&&!isNaN(a.repeat)&&a.repeat>0)a.repeat-=1;else if(a.pause&&d>=f)return j(a,b,d+1),!1;g(a,b,d+1)},a.speed/f)},j=function(a,b,c){innerfunc=function(){g(a,b,c)};setTimeout(innerfunc,a.pause)};c.fn.pulsate=function(a){if(i[a])return i[a].apply(this,Array.prototype.slice.call(arguments,1));else if(typeof a==="object"||!a)return i.init.apply(this,
4 | arguments);else c.error("Method "+a+" does not exist on jQuery.pulsate")}})(jQuery);
--------------------------------------------------------------------------------
/web_logger/static/js/jquery.vmap.sampledata.js:
--------------------------------------------------------------------------------
1 | var sample_data = {"af":"16.63","al":"11.58","dz":"158.97","ao":"85.81","ag":"1.1","ar":"351.02","am":"8.83","au":"1219.72","at":"366.26","az":"52.17","bs":"7.54","bh":"21.73","bd":"105.4","bb":"3.96","by":"52.89","be":"461.33","bz":"1.43","bj":"6.49","bt":"1.4","bo":"19.18","ba":"16.2","bw":"12.5","br":"2023.53","bn":"11.96","bg":"44.84","bf":"8.67","bi":"1.47","kh":"11.36","cm":"21.88","ca":"1563.66","cv":"1.57","cf":"2.11","td":"7.59","cl":"199.18","cn":"5745.13","co":"283.11","km":"0.56","cd":"12.6","cg":"11.88","cr":"35.02","ci":"22.38","hr":"59.92","cy":"22.75","cz":"195.23","dk":"304.56","dj":"1.14","dm":"0.38","do":"50.87","ec":"61.49","eg":"216.83","sv":"21.8","gq":"14.55","er":"2.25","ee":"19.22","et":"30.94","fj":"3.15","fi":"231.98","fr":"2555.44","ga":"12.56","gm":"1.04","ge":"11.23","de":"3305.9","gh":"18.06","gr":"305.01","gd":"0.65","gt":"40.77","gn":"4.34","gw":"0.83","gy":"2.2","ht":"6.5","hn":"15.34","hk":"226.49","hu":"132.28","is":"12.77","in":"1430.02","id":"695.06","ir":"337.9","iq":"84.14","ie":"204.14","il":"201.25","it":"2036.69","jm":"13.74","jp":"5390.9","jo":"27.13","kz":"129.76","ke":"32.42","ki":"0.15","kr":"986.26","undefined":"5.73","kw":"117.32","kg":"4.44","la":"6.34","lv":"23.39","lb":"39.15","ls":"1.8","lr":"0.98","ly":"77.91","lt":"35.73","lu":"52.43","mk":"9.58","mg":"8.33","mw":"5.04","my":"218.95","mv":"1.43","ml":"9.08","mt":"7.8","mr":"3.49","mu":"9.43","mx":"1004.04","md":"5.36","mn":"5.81","me":"3.88","ma":"91.7","mz":"10.21","mm":"35.65","na":"11.45","np":"15.11","nl":"770.31","nz":"138","ni":"6.38","ne":"5.6","ng":"206.66","no":"413.51","om":"53.78","pk":"174.79","pa":"27.2","pg":"8.81","py":"17.17","pe":"153.55","ph":"189.06","pl":"438.88","pt":"223.7","qa":"126.52","ro":"158.39","ru":"1476.91","rw":"5.69","ws":"0.55","st":"0.19","sa":"434.44","sn":"12.66","rs":"38.92","sc":"0.92","sl":"1.9","sg":"217.38","sk":"86.26","si":"46.44","sb":"0.67","za":"354.41","es":"1374.78","lk":"48.24","kn":"0.56","lc":"1","vc":"0.58","sd":"65.93","sr":"3.3","sz":"3.17","se":"444.59","ch":"522.44","sy":"59.63","tw":"426.98","tj":"5.58","tz":"22.43","th":"312.61","tl":"0.62","tg":"3.07","to":"0.3","tt":"21.2","tn":"43.86","tr":"729.05","tm":0,"ug":"17.12","ua":"136.56","ae":"239.65","gb":"2258.57","us":"14624.18","uy":"40.71","uz":"37.72","vu":"0.72","ve":"285.21","vn":"101.99","ye":"30.02","zm":"15.69","zw":"5.57"};
--------------------------------------------------------------------------------
/web_logger/static/js/jquery.xdr-transport.js:
--------------------------------------------------------------------------------
1 | /*
2 | * jQuery XDomainRequest Transport Plugin 1.1.3
3 | * https://github.com/blueimp/jQuery-File-Upload
4 | *
5 | * Copyright 2011, Sebastian Tschan
6 | * https://blueimp.net
7 | *
8 | * Licensed under the MIT license:
9 | * http://www.opensource.org/licenses/MIT
10 | *
11 | * Based on Julian Aubourg's ajaxHooks xdr.js:
12 | * https://github.com/jaubourg/ajaxHooks/
13 | */
14 |
15 | /*jslint unparam: true */
16 | /*global define, window, XDomainRequest */
17 |
18 | (function (factory) {
19 | 'use strict';
20 | if (typeof define === 'function' && define.amd) {
21 | // Register as an anonymous AMD module:
22 | define(['jquery'], factory);
23 | } else {
24 | // Browser globals:
25 | factory(window.jQuery);
26 | }
27 | }(function ($) {
28 | 'use strict';
29 | if (window.XDomainRequest && !$.support.cors) {
30 | $.ajaxTransport(function (s) {
31 | if (s.crossDomain && s.async) {
32 | if (s.timeout) {
33 | s.xdrTimeout = s.timeout;
34 | delete s.timeout;
35 | }
36 | var xdr;
37 | return {
38 | send: function (headers, completeCallback) {
39 | var addParamChar = /\?/.test(s.url) ? '&' : '?';
40 | function callback(status, statusText, responses, responseHeaders) {
41 | xdr.onload = xdr.onerror = xdr.ontimeout = $.noop;
42 | xdr = null;
43 | completeCallback(status, statusText, responses, responseHeaders);
44 | }
45 | xdr = new XDomainRequest();
46 | // XDomainRequest only supports GET and POST:
47 | if (s.type === 'DELETE') {
48 | s.url = s.url + addParamChar + '_method=DELETE';
49 | s.type = 'POST';
50 | } else if (s.type === 'PUT') {
51 | s.url = s.url + addParamChar + '_method=PUT';
52 | s.type = 'POST';
53 | } else if (s.type === 'PATCH') {
54 | s.url = s.url + addParamChar + '_method=PATCH';
55 | s.type = 'POST';
56 | }
57 | xdr.open(s.type, s.url);
58 | xdr.onload = function () {
59 | callback(
60 | 200,
61 | 'OK',
62 | {text: xdr.responseText},
63 | 'Content-Type: ' + xdr.contentType
64 | );
65 | };
66 | xdr.onerror = function () {
67 | callback(404, 'Not Found');
68 | };
69 | if (s.xdrTimeout) {
70 | xdr.ontimeout = function () {
71 | callback(0, 'timeout');
72 | };
73 | xdr.timeout = s.xdrTimeout;
74 | }
75 | xdr.send((s.hasContent && s.data) || null);
76 | },
77 | abort: function () {
78 | if (xdr) {
79 | xdr.onerror = $.noop();
80 | xdr.abort();
81 | }
82 | }
83 | };
84 | }
85 | });
86 | }
87 | }));
88 |
--------------------------------------------------------------------------------
/web_logger/static/js/load-image.min.js:
--------------------------------------------------------------------------------
1 | (function(a){"use strict";var b=function(a,c,d){var e=document.createElement("img"),f,g;return e.onerror=c,e.onload=function(){g&&(!d||!d.noRevoke)&&b.revokeObjectURL(g),c(b.scale(e,d))},window.Blob&&a instanceof Blob||window.File&&a instanceof File?(f=g=b.createObjectURL(a),e._type=a.type):f=a,f?(e.src=f,e):b.readFile(a,function(a){var b=a.target;b&&b.result?e.src=b.result:c(a)})},c=window.createObjectURL&&window||window.URL&&URL.revokeObjectURL&&URL||window.webkitURL&&webkitURL;b.detectSubsampling=function(a){var b=a.width,c=a.height,d,e;return b*c>1048576?(d=document.createElement("canvas"),d.width=d.height=1,e=d.getContext("2d"),e.drawImage(a,-b+1,0),e.getImageData(0,0,1,1).data[3]===0):!1},b.detectVerticalSquash=function(a,b){var c=document.createElement("canvas"),d=c.getContext("2d"),e,f,g,h,i;c.width=1,c.height=b,d.drawImage(a,0,0),e=d.getImageData(0,0,1,b).data,f=0,g=b,h=b;while(h>f)i=e[(h-1)*4+3],i===0?g=h:f=h,h=g+f>>1;return h/b},b.renderImageToCanvas=function(a,c,d,e){var f=a.width,g=a.height,h=c.getContext("2d"),i,j=1024,k=document.createElement("canvas"),l,m,n,o,p;h.save(),b.detectSubsampling(a)&&(f/=2,g/=2),i=b.detectVerticalSquash(a,g),k.width=k.height=j,l=k.getContext("2d"),m=0;while(mg?g-m:j,o=0;while(of?f-o:j,l.clearRect(0,0,j,j),l.drawImage(a,-o,-m),h.drawImage(k,0,0,p,n,Math.floor(o*d/f),Math.floor(m*e/g/i),Math.ceil(p*d/f),Math.ceil(n*e/g/i)),o+=j;m+=j}h.restore(),k=l=null},b.scale=function(a,c){c=c||{};var d=document.createElement("canvas"),e=a.width,f=a.height,g=Math.max((c.minWidth||e)/e,(c.minHeight||f)/f);return g>1&&(e=parseInt(e*g,10),f=parseInt(f*g,10)),g=Math.min((c.maxWidth||e)/e,(c.maxHeight||f)/f),g<1&&(e=parseInt(e*g,10),f=parseInt(f*g,10)),a.getContext||c.canvas&&d.getContext?(d.width=e,d.height=f,a._type==="image/jpeg"?b.renderImageToCanvas(a,d,e,f):d.getContext("2d").drawImage(a,0,0,e,f),d):(a.width=e,a.height=f,a)},b.createObjectURL=function(a){return c?c.createObjectURL(a):!1},b.revokeObjectURL=function(a){return c?c.revokeObjectURL(a):!1},b.readFile=function(a,b){if(window.FileReader&&FileReader.prototype.readAsDataURL){var c=new FileReader;return c.onload=c.onerror=b,c.readAsDataURL(a),c}return!1},typeof define=="function"&&define.amd?define(function(){return b}):a.loadImage=b})(this);
--------------------------------------------------------------------------------
/web_logger/static/js/lock.js:
--------------------------------------------------------------------------------
1 | var Lock = function () {
2 |
3 | return {
4 | //main function to initiate the module
5 | init: function () {
6 |
7 | $.backstretch([
8 | "assets/img/bg/1.jpg",
9 | "assets/img/bg/2.jpg",
10 | "assets/img/bg/3.jpg",
11 | "assets/img/bg/4.jpg"
12 | ], {
13 | fade: 1000,
14 | duration: 8000
15 | });
16 | }
17 |
18 | };
19 |
20 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/maps-vector.js:
--------------------------------------------------------------------------------
1 | var MapsVector = function () {
2 |
3 | var setMap = function (name) {
4 | var data = {
5 | map: 'world_en',
6 | backgroundColor: null,
7 | borderColor: '#333333',
8 | borderOpacity: 0.5,
9 | borderWidth: 1,
10 | color: '#c6c6c6',
11 | enableZoom: true,
12 | hoverColor: '#c9dfaf',
13 | hoverOpacity: null,
14 | values: sample_data,
15 | normalizeFunction: 'linear',
16 | scaleColors: ['#b6da93', '#427d1a'],
17 | selectedColor: '#c9dfaf',
18 | selectedRegion: null,
19 | showTooltip: true,
20 | onRegionOver: function (event, code) {
21 | //sample to interact with map
22 | if (code == 'ca') {
23 | event.preventDefault();
24 | }
25 | },
26 | onRegionClick: function (element, code, region) {
27 | //sample to interact with map
28 | var message = 'You clicked "' + region + '" which has the code: ' + code.toUpperCase();
29 | alert(message);
30 | }
31 | };
32 |
33 | data.map = name + '_en';
34 | var map = jQuery('#vmap_' + name);
35 | if (!map) {
36 | return;
37 | }
38 | map.width(map.parent().width());
39 | map.vectorMap(data);
40 | }
41 |
42 |
43 | return {
44 | //main function to initiate map samples
45 | init: function () {
46 | setMap("world");
47 | setMap("usa");
48 | setMap("europe");
49 | setMap("russia");
50 | setMap("germany");
51 |
52 | // redraw maps on window or content resized
53 | App.addResponsiveHandler(function(){
54 | setMap("world");
55 | setMap("usa");
56 | setMap("europe");
57 | setMap("russia");
58 | setMap("germany");
59 | });
60 | }
61 |
62 | };
63 |
64 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/portlet-draggable.js:
--------------------------------------------------------------------------------
1 | var PortletDraggable = function () {
2 |
3 | return {
4 | //main function to initiate the module
5 | init: function () {
6 |
7 | if (!jQuery().sortable) {
8 | return;
9 | }
10 |
11 | $("#sortable_portlets").sortable({
12 | connectWith: ".portlet",
13 | items: ".portlet",
14 | opacity: 0.8,
15 | coneHelperSize: true,
16 | placeholder: 'sortable-box-placeholder round-all',
17 | forcePlaceholderSize: true,
18 | tolerance: "pointer"
19 | });
20 |
21 | $(".column").disableSelection();
22 |
23 | }
24 |
25 | };
26 |
27 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/respond.js:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/cyhe/LogSystem/a201159212e858324c02f3601c76fc0e7e2e6fa1/web_logger/static/js/respond.js
--------------------------------------------------------------------------------
/web_logger/static/js/respond.min.js:
--------------------------------------------------------------------------------
1 | /*! matchMedia() polyfill - Test a CSS media type/query in JS. Authors & copyright (c) 2012: Scott Jehl, Paul Irish, Nicholas Zakas. Dual MIT/BSD license */
2 | /*! NOTE: If you're already including a window.matchMedia polyfill via Modernizr or otherwise, you don't need this part */
3 | window.matchMedia=window.matchMedia||function(a){"use strict";var c,d=a.documentElement,e=d.firstElementChild||d.firstChild,f=a.createElement("body"),g=a.createElement("div");return g.id="mq-test-1",g.style.cssText="position:absolute;top:-100em",f.style.background="none",f.appendChild(g),function(a){return g.innerHTML='',d.insertBefore(f,e),c=42===g.offsetWidth,d.removeChild(f),{matches:c,media:a}}}(document);
4 |
5 | /*! Respond.js v1.1.0: min/max-width media query polyfill. (c) Scott Jehl. MIT/GPLv2 Lic. j.mp/respondjs */
6 | (function(a){"use strict";function x(){u(!0)}var b={};if(a.respond=b,b.update=function(){},b.mediaQueriesSupported=a.matchMedia&&a.matchMedia("only all").matches,!b.mediaQueriesSupported){var q,r,t,c=a.document,d=c.documentElement,e=[],f=[],g=[],h={},i=30,j=c.getElementsByTagName("head")[0]||d,k=c.getElementsByTagName("base")[0],l=j.getElementsByTagName("link"),m=[],n=function(){for(var b=0;l.length>b;b++){var c=l[b],d=c.href,e=c.media,f=c.rel&&"stylesheet"===c.rel.toLowerCase();d&&f&&!h[d]&&(c.styleSheet&&c.styleSheet.rawCssText?(p(c.styleSheet.rawCssText,d,e),h[d]=!0):(!/^([a-zA-Z:]*\/\/)/.test(d)&&!k||d.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&m.push({href:d,media:e}))}o()},o=function(){if(m.length){var b=m.shift();v(b.href,function(c){p(c,b.href,b.media),h[b.href]=!0,a.setTimeout(function(){o()},0)})}},p=function(a,b,c){var d=a.match(/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi),g=d&&d.length||0;b=b.substring(0,b.lastIndexOf("/"));var h=function(a){return a.replace(/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,"$1"+b+"$2$3")},i=!g&&c;b.length&&(b+="/"),i&&(g=1);for(var j=0;g>j;j++){var k,l,m,n;i?(k=c,f.push(h(a))):(k=d[j].match(/@media *([^\{]+)\{([\S\s]+?)$/)&&RegExp.$1,f.push(RegExp.$2&&h(RegExp.$2))),m=k.split(","),n=m.length;for(var o=0;n>o;o++)l=m[o],e.push({media:l.split("(")[0].match(/(only\s+)?([a-zA-Z]+)\s?/)&&RegExp.$2||"all",rules:f.length-1,hasquery:l.indexOf("(")>-1,minw:l.match(/\(\s*min\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:l.match(/\(\s*max\-width\s*:\s*(\s*[0-9\.]+)(px|em)\s*\)/)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},s=function(){var a,b=c.createElement("div"),e=c.body,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",e||(e=f=c.createElement("body"),e.style.background="none"),e.appendChild(b),d.insertBefore(e,d.firstChild),a=b.offsetWidth,f?d.removeChild(e):e.removeChild(b),a=t=parseFloat(a)},u=function(b){var h="clientWidth",k=d[h],m="CSS1Compat"===c.compatMode&&k||c.body[h]||k,n={},o=l[l.length-1],p=(new Date).getTime();if(b&&q&&i>p-q)return a.clearTimeout(r),r=a.setTimeout(u,i),void 0;q=p;for(var v in e)if(e.hasOwnProperty(v)){var w=e[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?t||s():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?t||s():1)),w.hasquery&&(z&&A||!(z||m>=x)||!(A||y>=m))||(n[w.media]||(n[w.media]=[]),n[w.media].push(f[w.rules]))}for(var C in g)g.hasOwnProperty(C)&&g[C]&&g[C].parentNode===j&&j.removeChild(g[C]);for(var D in n)if(n.hasOwnProperty(D)){var E=c.createElement("style"),F=n[D].join("\n");E.type="text/css",E.media=D,j.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(c.createTextNode(F)),g.push(E)}},v=function(a,b){var c=w();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))},w=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}();n(),b.update=n,a.addEventListener?a.addEventListener("resize",x,!1):a.attachEvent&&a.attachEvent("onresize",x)}})(this);
7 |
--------------------------------------------------------------------------------
/web_logger/static/js/search.js:
--------------------------------------------------------------------------------
1 | var Search = function () {
2 |
3 | return {
4 | //main function to initiate the module
5 | init: function () {
6 | if (jQuery().datepicker) {
7 | $('.date-picker').datepicker();
8 | }
9 |
10 | App.initFancybox();
11 | }
12 |
13 | };
14 |
15 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/tmpl.min.js:
--------------------------------------------------------------------------------
1 | (function(a){"use strict";var b=function(a,c){var d=/[^\w\-\.:]/.test(a)?new Function(b.arg+",tmpl","var _e=tmpl.encode"+b.helper+",_s='"+a.replace(b.regexp,b.func)+"';return _s;"):b.cache[a]=b.cache[a]||b(b.load(a));return c?d(c,b):function(a){return d(a,b)}};b.cache={},b.load=function(a){return document.getElementById(a).innerHTML},b.regexp=/([\s'\\])(?![^%]*%\})|(?:\{%(=|#)([\s\S]+?)%\})|(\{%)|(%\})/g,b.func=function(a,b,c,d,e,f){if(b)return{"\n":"\\n","\r":"\\r","\t":"\\t"," ":" "}[a]||"\\"+a;if(c)return c==="="?"'+_e("+d+")+'":"'+("+d+"||'')+'";if(e)return"';";if(f)return"_s+='"},b.encReg=/[<>&"'\x00]/g,b.encMap={"<":"<",">":">","&":"&",'"':""","'":"'"},b.encode=function(a){return String(a||"").replace(b.encReg,function(a){return b.encMap[a]||""})},b.arg="o",b.helper=",print=function(s,e){_s+=e&&(s||'')||_e(s);},include=function(s,d){_s+=tmpl(s,d);}",typeof define=="function"&&define.amd?define(function(){return b}):a.tmpl=b})(this);
--------------------------------------------------------------------------------
/web_logger/static/js/ui-modals.js:
--------------------------------------------------------------------------------
1 | var UIModals = function () {
2 |
3 |
4 | var initModals = function () {
5 |
6 | $.fn.modalmanager.defaults.resize = true;
7 | $.fn.modalmanager.defaults.spinner = '
Loading... ';
8 |
9 |
10 | var $modal = $('#ajax-modal');
11 |
12 | $('#modal_ajax_demo_btn').on('click', function(){
13 | // create the backdrop and wait for next modal to be triggered
14 | $('body').modalmanager('loading');
15 |
16 | setTimeout(function(){
17 | $modal.load('ui_modals_ajax_sample.html', '', function(){
18 | $modal.modal();
19 | });
20 | }, 1000);
21 | });
22 |
23 | $modal.on('click', '.update', function(){
24 | $modal.modal('loading');
25 | setTimeout(function(){
26 | $modal
27 | .modal('loading')
28 | .find('.modal-body')
29 | .prepend('' +
30 | 'Updated!' +
31 | '
');
32 | }, 1000);
33 | });
34 |
35 | }
36 |
37 | return {
38 | //main function to initiate the module
39 | init: function () {
40 | initModals();
41 | }
42 |
43 | };
44 |
45 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/ui-nestable.js:
--------------------------------------------------------------------------------
1 | var UINestable = function () {
2 |
3 | var updateOutput = function (e) {
4 | var list = e.length ? e : $(e.target),
5 | output = list.data('output');
6 | if (window.JSON) {
7 | output.val(window.JSON.stringify(list.nestable('serialize'))); //, null, 2));
8 | } else {
9 | output.val('JSON browser support required for this demo.');
10 | }
11 | };
12 |
13 |
14 | return {
15 | //main function to initiate the module
16 | init: function () {
17 |
18 | // activate Nestable for list 1
19 | $('#nestable_list_1').nestable({
20 | group: 1
21 | })
22 | .on('change', updateOutput);
23 |
24 | // activate Nestable for list 2
25 | $('#nestable_list_2').nestable({
26 | group: 1
27 | })
28 | .on('change', updateOutput);
29 |
30 | // output initial serialised data
31 | updateOutput($('#nestable_list_1').data('output', $('#nestable_list_1_output')));
32 | updateOutput($('#nestable_list_2').data('output', $('#nestable_list_2_output')));
33 |
34 | $('#nestable_list_menu').on('click', function (e) {
35 | var target = $(e.target),
36 | action = target.data('action');
37 | if (action === 'expand-all') {
38 | $('.dd').nestable('expandAll');
39 | }
40 | if (action === 'collapse-all') {
41 | $('.dd').nestable('collapseAll');
42 | }
43 | });
44 |
45 | $('#nestable_list_3').nestable();
46 |
47 | }
48 |
49 | };
50 |
51 | }();
--------------------------------------------------------------------------------
/web_logger/static/js/ui-tree.js:
--------------------------------------------------------------------------------
1 | var UITree = function () {
2 |
3 | return {
4 | //main function to initiate the module
5 | init: function () {
6 | // handle collapse/expand for tree_1
7 | $('#tree_1_collapse').click(function () {
8 | $('.tree-toggle', $('#tree_1 > li > ul')).addClass("closed");
9 | $('.branch', $('#tree_1 > li > ul')).removeClass("in");
10 | });
11 |
12 | $('#tree_1_expand').click(function () {
13 | $('.tree-toggle', $('#tree_1 > li > ul')).removeClass("closed");
14 | $('.branch', $('#tree_1 > li > ul')).addClass("in");
15 | });
16 |
17 | // handle collapse/expand for tree_2
18 | $('#tree_2_collapse').click(function () {
19 | $('.tree-toggle', $('#tree_2 > li > ul')).addClass("closed");
20 | $('.branch', $('#tree_2 > li > ul')).removeClass("in");
21 | });
22 |
23 | $('#tree_2_expand').click(function () {
24 | //$('.tree-toggle', $('#tree_2 > li > ul')).removeClass("closed");
25 | // iterate tree nodes and exppand all nodes
26 | $('.tree-toggle', $('#tree_2 > li > ul')).each(function () {
27 | $(this).click(); //trigger tree node click
28 | });
29 | $('.branch', $('#tree_2 > li > ul')).addClass("in");
30 | });
31 |
32 | //This is a quick example of capturing the select event on tree leaves, not branches
33 | $("#tree_1").on("nodeselect.tree.data-api", "[data-role=leaf]", function (e) {
34 | var output = "";
35 |
36 | output += "Node nodeselect event fired:\n";
37 | output += "Node Type: leaf\n";
38 | output += "Value: " + ((e.node.value) ? e.node.value : e.node.el.text()) + "\n";
39 | output += "Parentage: " + e.node.parentage.join("/");
40 |
41 | alert(output);
42 | });
43 |
44 | //This is a quick example of capturing the select event on tree branches, not leaves
45 | $("#tree_1").on("nodeselect.tree.data-api", "[role=branch]", function (e) {
46 | var output = "Node nodeselect event fired:\n"; + "Node Type: branch\n" + "Value: " + ((e.node.value) ? e.node.value : e.node.el.text()) + "\n" + "Parentage: " + e.node.parentage.join("/") + "\n"
47 |
48 | alert(output);
49 | });
50 |
51 | //Listening for the 'openbranch' event. Look for e.node, which is the actual node the user opens
52 |
53 | $("#tree_1").on("openbranch.tree", "[data-toggle=branch]", function (e) {
54 |
55 | var output = "Node openbranch event fired:\n" + "Node Type: branch\n" + "Value: " + ((e.node.value) ? e.node.value : e.node.el.text()) + "\n" + "Parentage: " + e.node.parentage.join("/") + "\n"
56 |
57 | alert(output);
58 | });
59 |
60 |
61 | //Listening for the 'closebranch' event. Look for e.node, which is the actual node the user closed
62 |
63 | $("#tree_1").on("closebranch.tree", "[data-toggle=branch]", function (e) {
64 |
65 | var output = "Node closebranch event fired:\n" + "Node Type: branch\n" + "Value: " + ((e.node.value) ? e.node.value : e.node.el.text()) + "\n" + "Parentage: " + e.node.parentage.join("/") + "\n"
66 |
67 | alert(output);
68 | });
69 | }
70 |
71 | };
72 |
73 | }();
--------------------------------------------------------------------------------
/web_logger/views/app/apply.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 |
28 |
29 |
30 |
31 |
32 |
33 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/web_logger/views/app/error.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
THEME COLOR
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
50 |
51 |
64 |
65 |
78 |
79 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | -
105 |
106 |
107 |
108 | 首页
109 |
110 |
111 |
112 |
113 |
114 | -
115 |
116 | 项目管理
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
135 |
136 |
--------------------------------------------------------------------------------
/web_logger/views/log/apply.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 |
28 |
29 |
30 |
31 |
32 |
33 |
80 |
81 |
82 |
83 |
--------------------------------------------------------------------------------
/web_logger/views/log/error.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
THEME COLOR
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
50 |
51 |
64 |
65 |
78 |
79 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 | -
105 |
106 |
107 |
108 | 首页
109 |
110 |
111 |
112 |
113 |
114 | -
115 |
116 | 项目管理
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
135 |
136 |
--------------------------------------------------------------------------------