├── .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 | 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 | 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('");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('"));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;n