Showing preview only (1,414K chars total). Download the full file or copy to clipboard to get everything.
Repository: fnet123/clover
Branch: master
Commit: e7c8873ef9c9
Files: 323
Total size: 1.2 MB
Directory structure:
gitextract_k4y1i56_/
├── README.md
├── clover/
│ ├── .gitignore
│ ├── README.md
│ ├── clover-admin/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── gome/
│ │ │ │ ├── clover/
│ │ │ │ │ ├── listener/
│ │ │ │ │ │ └── Log4jConfigListener.java
│ │ │ │ │ └── servlet/
│ │ │ │ │ └── CloverServletHandle.java
│ │ │ │ └── testclover/
│ │ │ │ └── spring/
│ │ │ │ ├── RemoteCronJobWithSpringAnnotation.java
│ │ │ │ ├── RemoteFixedDateJobWithSpring.java
│ │ │ │ ├── RemoteFixedDateJobWithSpringAnnotation.java
│ │ │ │ ├── RemoteJobWithSpring.java
│ │ │ │ └── TestProperties.java
│ │ │ ├── resources/
│ │ │ │ ├── bak_log4j.properties
│ │ │ │ ├── conf/
│ │ │ │ │ └── config.properties
│ │ │ │ ├── log4j.xml
│ │ │ │ └── spring/
│ │ │ │ └── spring-config.xml
│ │ │ └── webapp/
│ │ │ ├── WEB-INF/
│ │ │ │ └── web.xml
│ │ │ ├── common/
│ │ │ │ ├── head.jsp
│ │ │ │ └── nav.jsp
│ │ │ ├── contactList.jsp
│ │ │ ├── css/
│ │ │ │ └── style.css
│ │ │ ├── error.jsp
│ │ │ ├── index.jsp
│ │ │ ├── jobList.jsp
│ │ │ ├── js/
│ │ │ │ ├── DatePicker/
│ │ │ │ │ ├── DatePicker.htm
│ │ │ │ │ ├── WdatePicker.js
│ │ │ │ │ ├── calendar.js
│ │ │ │ │ ├── config.js
│ │ │ │ │ ├── lang/
│ │ │ │ │ │ ├── en.js
│ │ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ │ └── zh-tw.js
│ │ │ │ │ └── skin/
│ │ │ │ │ ├── WdatePicker.css
│ │ │ │ │ ├── default/
│ │ │ │ │ │ └── datepicker.css
│ │ │ │ │ ├── ext/
│ │ │ │ │ │ └── datepicker.css
│ │ │ │ │ └── whyGreen/
│ │ │ │ │ └── datepicker.css
│ │ │ │ ├── Map.js
│ │ │ │ ├── bootstrap-popover.js
│ │ │ │ ├── bootstrap-tooltip.js
│ │ │ │ ├── exporting.js
│ │ │ │ ├── highcharts.js
│ │ │ │ ├── html5.js
│ │ │ │ ├── jquery.validate.js
│ │ │ │ ├── ui.datepicker-zh-CN.js
│ │ │ │ └── ui.datepicker.js
│ │ │ ├── logList.jsp
│ │ │ ├── login.jsp
│ │ │ ├── monitorList.jsp
│ │ │ ├── register.jsp
│ │ │ └── zkList.jsp
│ │ └── test/
│ │ └── java/
│ │ └── TestAnnotationWithSpring.java
│ ├── clover-client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── gome/
│ │ └── bg/
│ │ └── clover/
│ │ └── client/
│ │ ├── job/
│ │ │ ├── LocalJob.java
│ │ │ ├── RemoteJob.java
│ │ │ ├── SimpleJob.java
│ │ │ └── TransactionJob.java
│ │ └── module/
│ │ └── SchedulerClientInitial.java
│ ├── clover-common/
│ │ └── pom.xml
│ ├── clover-core/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── gome/
│ │ │ └── clover/
│ │ │ ├── common/
│ │ │ │ ├── annotation/
│ │ │ │ │ ├── CloverConfigBeanDefinitionParser.java
│ │ │ │ │ ├── CloverConfigInit.java
│ │ │ │ │ ├── CloverJobAnnotation.java
│ │ │ │ │ ├── CloverJobAnnotationBean.java
│ │ │ │ │ ├── CloverJobBeanDefinitionParser.java
│ │ │ │ │ └── CloverJobNamespaceHandler.java
│ │ │ │ ├── cache/
│ │ │ │ │ ├── LRUCache.java
│ │ │ │ │ └── LRUCache2.java
│ │ │ │ ├── compile/
│ │ │ │ │ ├── CreateAndCompileClassFile.java
│ │ │ │ │ ├── DynamicClassLoader.java
│ │ │ │ │ └── MyClassLoader.java
│ │ │ │ ├── compress/
│ │ │ │ │ └── CompressUtil.java
│ │ │ │ ├── encryption/
│ │ │ │ │ ├── DesUtil.java
│ │ │ │ │ └── MD5Util.java
│ │ │ │ ├── exception/
│ │ │ │ │ └── AppException.java
│ │ │ │ ├── file/
│ │ │ │ │ └── ConfigFile.java
│ │ │ │ ├── hash/
│ │ │ │ │ └── HashTimes.java
│ │ │ │ ├── mongodb/
│ │ │ │ │ ├── BuildMongoDBData.java
│ │ │ │ │ ├── DBTableInfo.java
│ │ │ │ │ └── MongoDBUtil.java
│ │ │ │ ├── netty/
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── ObjectReqClient.java
│ │ │ │ │ │ └── SubReqClientHandel.java
│ │ │ │ │ ├── protol/
│ │ │ │ │ │ ├── SubScribeResp.java
│ │ │ │ │ │ └── SubscribeReq.java
│ │ │ │ │ └── server/
│ │ │ │ │ ├── ObjectRespServer.java
│ │ │ │ │ └── SubReqServerHandel.java
│ │ │ │ ├── rocketmq/
│ │ │ │ │ ├── ConsumerUtil.java
│ │ │ │ │ └── ProducerUtil.java
│ │ │ │ ├── rpc/
│ │ │ │ │ ├── HttpRequestEntity.java
│ │ │ │ │ ├── HttpRequestHandler.java
│ │ │ │ │ ├── HttpResponseEntity.java
│ │ │ │ │ ├── QueueDaemon.java
│ │ │ │ │ └── QueueServer.java
│ │ │ │ ├── systeminfo/
│ │ │ │ │ ├── IMonitorService.java
│ │ │ │ │ ├── MonitorInfoBean.java
│ │ │ │ │ ├── MonitorServiceImpl.java
│ │ │ │ │ ├── SystemInfoUtil.java
│ │ │ │ │ └── WindowsInfoUtil.java
│ │ │ │ ├── thread/
│ │ │ │ │ └── MyThreadPool.java
│ │ │ │ ├── tools/
│ │ │ │ │ ├── ClassUtil.java
│ │ │ │ │ ├── CommonConstants.java
│ │ │ │ │ ├── ConfigUtil.java
│ │ │ │ │ ├── DateUtil.java
│ │ │ │ │ ├── HttpRequest.java
│ │ │ │ │ ├── IpUtil.java
│ │ │ │ │ ├── KeyGen.java
│ │ │ │ │ ├── List2StringUtil.java
│ │ │ │ │ ├── NetUtils.java
│ │ │ │ │ ├── NettyUtil.java
│ │ │ │ │ ├── ProgressUtil.java
│ │ │ │ │ ├── PropertiesUtil.java
│ │ │ │ │ ├── RandomNumUtil.java
│ │ │ │ │ ├── SendMailUtil.java
│ │ │ │ │ └── StringUtil.java
│ │ │ │ ├── zeromq/
│ │ │ │ │ ├── AsyncSendMsg.java
│ │ │ │ │ ├── AsyncStartZeroMQ.java
│ │ │ │ │ ├── AsyncZMQPull.java
│ │ │ │ │ ├── ZeroMQEntity.java
│ │ │ │ │ ├── ZeroMQPub.java
│ │ │ │ │ ├── ZeroMQPull.java
│ │ │ │ │ ├── ZeroMQPush.java
│ │ │ │ │ └── ZeroMQSub.java
│ │ │ │ └── zk/
│ │ │ │ ├── ClientDict.java
│ │ │ │ ├── ClientListener.java
│ │ │ │ ├── ClientNodes.java
│ │ │ │ ├── CommonNodes.java
│ │ │ │ ├── ServerDict.java
│ │ │ │ ├── ServerListener.java
│ │ │ │ ├── ServerNodes.java
│ │ │ │ ├── ZKConnect.java
│ │ │ │ ├── ZKManager.java
│ │ │ │ ├── ZKUtil.java
│ │ │ │ └── ZooKeeperWatch.java
│ │ │ └── core/
│ │ │ ├── job/
│ │ │ │ ├── ClientJob.java
│ │ │ │ ├── ClientJobBuilder.java
│ │ │ │ ├── ClientJobFactory.java
│ │ │ │ ├── MyJobListener.java
│ │ │ │ ├── ServerJob.java
│ │ │ │ └── ServerJobFactory.java
│ │ │ ├── module/
│ │ │ │ ├── AbstractModuleScheduler.java
│ │ │ │ ├── ModuleSchedulerClient.java
│ │ │ │ └── ModuleSchedulerServer.java
│ │ │ ├── monitor/
│ │ │ │ ├── client/
│ │ │ │ │ └── ClientHeartBeat.java
│ │ │ │ └── server/
│ │ │ │ └── ServerHeartBeat.java
│ │ │ └── scheduler/
│ │ │ └── MyScheduler.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ ├── cloverjob-1.0.0.xsd
│ │ │ ├── spring.handlers
│ │ │ └── spring.schemas
│ │ ├── commonConfig.properties
│ │ ├── dev/
│ │ │ ├── commonConfig.properties
│ │ │ ├── mongoDBConfig.properties
│ │ │ ├── redisConfig.properties
│ │ │ └── zkConfig.properties
│ │ ├── mongoDBConfig.properties
│ │ ├── redisConfig.properties
│ │ ├── uat/
│ │ │ ├── commonConfig.properties
│ │ │ ├── mongoDBConfig.properties
│ │ │ ├── redisConfig.properties
│ │ │ └── zkConfig.properties
│ │ └── zkConfig.properties
│ ├── clover-examples/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── gome/
│ │ └── clover/
│ │ ├── DeleteGomeVipAdPlanJob.java
│ │ ├── ObjectToByte.java
│ │ ├── TestEum.java
│ │ ├── TestThread.java
│ │ ├── akka/
│ │ │ └── serverclient/
│ │ │ └── pubsub/
│ │ │ ├── MyActorSystem.java
│ │ │ ├── PublisherActor.java
│ │ │ ├── WorkerTaskA.java
│ │ │ └── WorkerTaskB.java
│ │ ├── common/
│ │ │ └── compile/
│ │ │ └── TestCompile.java
│ │ ├── cron/
│ │ │ └── TestCron.java
│ │ ├── job/
│ │ │ ├── MyJob.java
│ │ │ ├── MyJob1.java
│ │ │ └── MyJobWithSimpleJob.java
│ │ ├── json/
│ │ │ └── TestJson.java
│ │ ├── mongo/
│ │ │ └── TestMongoDB.java
│ │ ├── scheduler/
│ │ │ ├── TestSchedulerWithInsertMongoDB.java
│ │ │ └── TestSchedulerWithRegister.java
│ │ ├── systeminfo/
│ │ │ └── TestMem.java
│ │ ├── thread/
│ │ │ ├── MyThread.java
│ │ │ ├── TestMyThreadPool.java
│ │ │ ├── ThreadDemo.java
│ │ │ ├── ThreadPool.java
│ │ │ └── ThreadPoolTest.java
│ │ ├── time/
│ │ │ └── TestTime.java
│ │ ├── zeromq/
│ │ │ ├── Helper.java
│ │ │ ├── Pub.java
│ │ │ ├── Publisher.java
│ │ │ ├── RandomNum.java
│ │ │ ├── Sub1.java
│ │ │ ├── Subscriber.java
│ │ │ ├── TestPubsubTcp.java
│ │ │ └── TestReqrepTcp.java
│ │ └── zk/
│ │ ├── CuratorDemo.java
│ │ ├── CuratorTest.java
│ │ ├── MonitorServerZKListener.java
│ │ ├── SyncServer.java
│ │ └── TestZK.java
│ ├── clover-monitor/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── gome/
│ │ └── clover/
│ │ └── monitor/
│ │ ├── MonitorHeartBeat.java
│ │ ├── MonitorTimerTask.java
│ │ ├── ServerHeartBeatBak.java
│ │ └── ServerTimerTask.java
│ ├── clover-server/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── gome/
│ │ └── clover/
│ │ └── server/
│ │ └── module/
│ │ └── SchedulerServerInitial.java
│ └── pom.xml
├── docs/
│ ├── clover结构图.vsd
│ ├── clover部署结构图/
│ │ ├── clover部署结构图 - pre.vsd
│ │ ├── clover部署结构图 - sit.vsd
│ │ ├── clover部署结构图 - uat.vsd
│ │ └── clover部署结构图.vsd
│ ├── clover部署结构图.vsd
│ └── clover项目技术分享和使用_2014121_V1.0.pptx
└── test-clover/
├── .classpath
├── .idea/
│ ├── .name
│ ├── artifacts/
│ │ ├── test_clover_war.xml
│ │ └── test_clover_war_exploded.xml
│ ├── compiler.xml
│ ├── copyright/
│ │ └── profiles_settings.xml
│ ├── encodings.xml
│ ├── libraries/
│ │ ├── Maven__aopalliance_aopalliance_1_0.xml
│ │ ├── Maven__c3p0_c3p0_0_9_1_1.xml
│ │ ├── Maven__com_101tec_zkclient_0_3.xml
│ │ ├── Maven__com_alibaba_fastjson_1_1_31.xml
│ │ ├── Maven__com_alibaba_rocketmq_rocketmq_client_3_1_8.xml
│ │ ├── Maven__com_alibaba_rocketmq_rocketmq_common_3_1_8.xml
│ │ ├── Maven__com_alibaba_rocketmq_rocketmq_remoting_3_1_8.xml
│ │ ├── Maven__com_github_jnr_jnr_constants_0_8_2.xml
│ │ ├── Maven__com_gome_clover_client_dev_1_0.xml
│ │ ├── Maven__com_gome_clover_core_dev_1_0.xml
│ │ ├── Maven__com_google_guava_guava_16_0_1.xml
│ │ ├── Maven__com_google_protobuf_protobuf_java_2_4_1.xml
│ │ ├── Maven__com_sun_jdmk_jmxtools_1_2_1.xml
│ │ ├── Maven__com_sun_jmx_jmxri_1_2_1.xml
│ │ ├── Maven__com_sun_tools_1_5_0.xml
│ │ ├── Maven__com_typesafe_akka_akka_actor_2_0_2.xml
│ │ ├── Maven__com_typesafe_akka_akka_actor_2_10_2_1_0.xml
│ │ ├── Maven__com_typesafe_akka_akka_zeromq_2_10_2_1_0.xml
│ │ ├── Maven__com_typesafe_config_1_0_0.xml
│ │ ├── Maven__com_yammer_metrics_metrics_core_2_2_0.xml
│ │ ├── Maven__commons_logging_commons_logging_1_1_1.xml
│ │ ├── Maven__io_netty_netty_all_4_0_21_Final.xml
│ │ ├── Maven__javax_activation_activation_1_1.xml
│ │ ├── Maven__javax_jms_jms_1_1.xml
│ │ ├── Maven__javax_mail_mail_1_5_0_b01.xml
│ │ ├── Maven__javax_servlet_servlet_api_2_4.xml
│ │ ├── Maven__jline_jline_0_9_94.xml
│ │ ├── Maven__junit_junit_3_8_1.xml
│ │ ├── Maven__junit_junit_4_11.xml
│ │ ├── Maven__log4j_log4j_1_2_15.xml
│ │ ├── Maven__net_java_dev_jna_jna_3_0_9.xml
│ │ ├── Maven__net_sf_jopt_simple_jopt_simple_3_2.xml
│ │ ├── Maven__org_apache_commons_com_springsource_org_apache_commons_codec_1_6_0.xml
│ │ ├── Maven__org_apache_commons_com_springsource_org_apache_commons_logging_1_1_1.xml
│ │ ├── Maven__org_apache_commons_commons_pool2_2_0.xml
│ │ ├── Maven__org_apache_curator_curator_client_2_7_0.xml
│ │ ├── Maven__org_apache_curator_curator_framework_2_7_0.xml
│ │ ├── Maven__org_apache_httpcomponents_com_springsource_org_apache_httpcomponents_httpclient_4_2_1.xml
│ │ ├── Maven__org_apache_httpcomponents_com_springsource_org_apache_httpcomponents_httpclient_cache_4_2_1.xml
│ │ ├── Maven__org_apache_httpcomponents_com_springsource_org_apache_httpcomponents_httpcore_4_2_1.xml
│ │ ├── Maven__org_apache_httpcomponents_com_springsource_org_apache_httpcomponents_httpmime_4_2_1.xml
│ │ ├── Maven__org_apache_kafka_kafka_2_9_2_0_8_1_1.xml
│ │ ├── Maven__org_apache_zookeeper_zookeeper_3_4_5.xml
│ │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml
│ │ ├── Maven__org_jboss_netty_netty_3_2_2_Final.xml
│ │ ├── Maven__org_jboss_netty_netty_3_2_9_Final.xml
│ │ ├── Maven__org_mongodb_mongo_java_driver_2_11_3.xml
│ │ ├── Maven__org_quartz_scheduler_quartz_2_2_1.xml
│ │ ├── Maven__org_scala_lang_scala_library_2_9_2.xml
│ │ ├── Maven__org_slf4j_slf4j_api_1_6_6.xml
│ │ ├── Maven__org_slf4j_slf4j_log4j12_1_6_1.xml
│ │ ├── Maven__org_springframework_spring_aop_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_beans_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_context_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_core_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_expression_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_web_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_webmvc_3_2_4_RELEASE.xml
│ │ ├── Maven__org_xerial_snappy_snappy_java_1_1_1_6.xml
│ │ ├── Maven__org_zeromq_jeromq_0_3_4.xml
│ │ ├── Maven__org_zeromq_zeromq_scala_binding_2_10_0_0_7.xml
│ │ ├── Maven__redis_clients_jedis_2_6_0.xml
│ │ ├── clover_client_dev_1_0.xml
│ │ └── clover_core_dev_1_0.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── scopes/
│ │ └── scope_settings.xml
│ ├── vcs.xml
│ └── workspace.xml
├── .myeclipse/
│ └── profiler/
│ └── RomoteCronJob.xml
├── .mymetadata
├── .project
├── .settings/
│ ├── .jsdtscope
│ ├── com.genuitec.eclipse.j2eedt.core.prefs
│ ├── org.eclipse.core.resources.prefs
│ ├── org.eclipse.jdt.core.prefs
│ ├── org.eclipse.m2e.core.prefs
│ ├── org.eclipse.wst.common.component
│ ├── org.eclipse.wst.common.project.facet.core.xml
│ ├── org.eclipse.wst.jsdt.ui.superType.container
│ └── org.eclipse.wst.jsdt.ui.superType.name
├── pom.xml
├── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── gome/
│ │ └── testclover/
│ │ ├── init/
│ │ │ ├── InitAllJobWithServlet.java
│ │ │ ├── InitServletWithSchedulerClientInitial.java
│ │ │ ├── InitServletWithStartup.java
│ │ │ └── InitSpringAnnotationWithStartup.java
│ │ ├── localjob/
│ │ │ ├── CronLocalJob.java
│ │ │ ├── FixedTimeLocalJob.java
│ │ │ └── LocalJobTest.java
│ │ ├── remotejob/
│ │ │ └── RemoteCronJob.java
│ │ └── spring/
│ │ ├── MyRemoteJob.java
│ │ ├── RemoteCronJobWithSpringAnnotation.java
│ │ ├── RemoteFixedDateJobWithSpringAnnotation.java
│ │ ├── RemoteJob1WithSpring.java
│ │ ├── RemoteJob1WithSpringAnnotation.java
│ │ ├── RemoteJob2WithSpring.java
│ │ ├── RemoteJob2WithSpringAnnotation.java
│ │ ├── RemoteJob3WithSpring.java
│ │ ├── RemoteJob3WithSpringAnnotation.java
│ │ ├── RemoteJobWithSpring.java
│ │ └── RemoteJobWithSpringAnnotation.java
│ ├── resources/
│ │ └── spring-config.xml
│ └── webapp/
│ ├── META-INF/
│ │ └── MANIFEST.MF
│ ├── WEB-INF/
│ │ └── web.xml
│ └── index.jsp
└── test-clover.iml
================================================
FILE CONTENTS
================================================
================================================
FILE: README.md
================================================
# clover
clover
1、开发server和client端 定时向zk集群发送心跳数据包,利用Java自带的timer程序实现该功能
2、开发整天的monitor程序,用来定时向zk中获取server和client端的心跳数据信息,如果超过指定时间没有收到最新的数据包,那么任务server端或者client端死掉了,此时要删除该server或client端节点,发邮件通知相关人员,记录异常日志到系统日志文件和MongoDB中
3、client端接受创建job请求,将job信息创建到client服务端,并根据job时间规则运行,并将任务信息存储到MongoDB中
4、当client端job运行时候,封装执行任务信息,发送到指定客户端机器,更新client端job执行时间和状态,如不在需要继续运行,那删除job并从MongoDB中删除相关任务信息
5、client端接受删除job请求,client服务端,立即执行删除job并将任务信息从MongoDB中删除
6、client端接受更新job请求,client服务端,立即执行删除job并创建新job,并将任务信息从MongoDB中删除,然后再存储新job信息
7、第一版 使用Netty做消息通讯中间件,存储消息放入Redis中,服务器开启Http请求,客户端 通过 发送Http请求到服务器来处理请求,由于任务太多 redis处理能力不行,放弃该方案 第二版 使用Netty RPC框架,自己开发一个Server端和Client,各种启动指定端口,由于 必须要求Server端和Client必须启动才能进行消息发送,所以感觉非常不灵活,因为放弃该方案 第三版 使用架构组推荐的rocketmq,通过使用发现,很严重问题,消息会重复发送,经常会收到重复的消息,在测试的时候发现,经常发生消息异常和报错,跟架构组刘婷峰沟通说,可能是机器性能不行了,他也不知道具体原因,感觉非常不靠谱,果断放弃 第四版 使用 zeromq,通过在网上查资料,对比各种mq后,发现zeromq是最轻量级,出现消息是最快的,经过测试完全能满足业务,果断使用
8、由于项目中使用zk,自己开发zk使用工具类,定制server端增删改查zk消息以及定制client端增删改查zk消息,功能测试zk,目前打算增加zk watch功能
9、开发server和client端 定时向zk集群发送心跳数据包,利用Java自带的timer程序实现该功能
10、开发整天的monitor程序,用来定时向zk中获取server和client端的心跳数据信息,如果超过指定时间没有收到最新的数据包,那么任务server端或者client端死掉了,此时要删除该server或client端节点,发邮件通知相关人员,记录异常日志到系统日志文件和MongoDB中
11、开发console控制台管理,可以查看任务动态运行状态和次数信息
12、zk管理页面,查看server和client端节点信息,更新和删除节点信息
13、job管理页面,查看job详细信息
14、联系人管理页面,增删改查联系人信息
15、log日志管理页面,根据系统报错记录的日志信息,在页面中可以详细查看
================================================
FILE: clover/.gitignore
================================================
# maven ignore
target/
# eclipse ignore
.settings/
.project
.classpath
# idea ignore
.idea/
*.ipr
*.iml
*.iws
# temp ignore
*.log
*.cache
*.diff
*.patch
*.tmp
# system ignore
.DS_Store
Thumbs.db
# package ignore (optional)
# *.jar
# *.war
# *.zip
# *.tar
# *.tar.gz
================================================
FILE: clover/README.md
================================================
#clover
1、开发server和client端 定时向zk集群发送心跳数据包,利用Java自带的timer程序实现该功能
2、开发整天的monitor程序,用来定时向zk中获取server和client端的心跳数据信息,如果超过指定时间没有收到最新的数据包,那么任务server端或者client端死掉了,此时要删除该server或client端节点,发邮件通知相关人员,记录异常日志到系统日志文件和MongoDB中
3、client端接受创建job请求,将job信息创建到client服务端,并根据job时间规则运行,并将任务信息存储到MongoDB中
4、当client端job运行时候,封装执行任务信息,发送到指定客户端机器,更新client端job执行时间和状态,如不在需要继续运行,那删除job并从MongoDB中删除相关任务信息
5、client端接受删除job请求,client服务端,立即执行删除job并将任务信息从MongoDB中删除
6、client端接受更新job请求,client服务端,立即执行删除job并创建新job,并将任务信息从MongoDB中删除,然后再存储新job信息
7、第一版 使用Netty做消息通讯中间件,存储消息放入Redis中,服务器开启Http请求,客户端 通过 发送Http请求到服务器来处理请求,由于任务太多 redis处理能力不行,放弃该方案
第二版 使用Netty RPC框架,自己开发一个Server端和Client,各种启动指定端口,由于 必须要求Server端和Client必须启动才能进行消息发送,所以感觉非常不灵活,因为放弃该方案
第三版 使用架构组推荐的rocketmq,通过使用发现,很严重问题,消息会重复发送,经常会收到重复的消息,在测试的时候发现,经常发生消息异常和报错,跟架构组刘婷峰沟通说,可能是机器性能不行了,他也不知道具体原因,感觉非常不靠谱,果断放弃
第四版 使用 zeromq,通过在网上查资料,对比各种mq后,发现zeromq是最轻量级,出现消息是最快的,经过测试完全能满足业务,果断使用
8、由于项目中使用zk,自己开发zk使用工具类,定制server端增删改查zk消息以及定制client端增删改查zk消息,功能测试zk,目前打算增加zk watch功能
9、开发server和client端 定时向zk集群发送心跳数据包,利用Java自带的timer程序实现该功能
10、开发整天的monitor程序,用来定时向zk中获取server和client端的心跳数据信息,如果超过指定时间没有收到最新的数据包,那么任务server端或者client端死掉了,此时要删除该server或client端节点,发邮件通知相关人员,记录异常日志到系统日志文件和MongoDB中
11、开发console控制台管理,可以查看任务动态运行状态和次数信息
12、zk管理页面,查看server和client端节点信息,更新和删除节点信息
13、job管理页面,查看job详细信息
14、联系人管理页面,增删改查联系人信息
15、log日志管理页面,根据系统报错记录的日志信息,在页面中可以详细查看
================================================
FILE: clover/clover-admin/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.gome</groupId>
<artifactId>clover</artifactId>
<version>1.0</version>
</parent>
<artifactId>clover-admin</artifactId>
<name>clover-admin</name>
<packaging>war</packaging>
<build>
<finalName>clover-admin</finalName>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
</build>
<dependencies>
<dependency>
<groupId>com.gome</groupId>
<artifactId>clover-core</artifactId>
<version>${clover.version}</version>
</dependency>
<dependency>
<groupId>com.gome</groupId>
<artifactId>clover-monitor</artifactId>
<version>${clover.version}</version>
</dependency>
<dependency>
<groupId>com.gome</groupId>
<artifactId>clover-client</artifactId>
<version>${clover.version}</version>
</dependency>
<dependency>
<groupId>com.gome</groupId>
<artifactId>clover-server</artifactId>
<version>${clover.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<!-- 单元测试 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>org.springframework.test</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
</dependencies>
</project>
================================================
FILE: clover/clover-admin/src/main/java/com/gome/clover/listener/Log4jConfigListener.java
================================================
package com.gome.clover.listener;
import org.apache.log4j.LogManager;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.xml.DOMConfigurator;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
/**
* ━━━━━━神兽出没━━━━━━
* ┏┓ ┏┓
* ┏┛┻━━━┛┻┓
* ┃ ┃
* ┃ ━ ┃
* ┃ ┳┛ ┗┳ ┃
* ┃ ┃
* ┃ ┻ ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃神兽保佑, 永无BUG!
* ┃ ┃Code is far away from bug with the animal protecting
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
* ━━━━━━感觉萌萌哒━━━━━━
* Module Desc:Log4j ConfigListener
* User: wangyue-ds6 || stark_summer@qq.com
* Date: 2014/11/25
* Time: 10:55
*/
public class Log4jConfigListener implements ServletContextListener{
public static final String CONFIG_LOCATION_PARAM = "log4jConfigLocation";
public static final String XML_FILE_EXTENSION = ".xml";
public void contextDestroyed(ServletContextEvent event) {
LogManager.shutdown();
}
public void contextInitialized(ServletContextEvent event) {
String location = event.getServletContext().getInitParameter(CONFIG_LOCATION_PARAM);
if (location != null) {
if (!location.startsWith("/")) {
location = "/" + location;
}
location = event.getServletContext().getRealPath(location);
//如果是xml结尾就用DOM解析,否则就用properties解析
if (location.toLowerCase().endsWith(XML_FILE_EXTENSION)) {
DOMConfigurator.configure(location);
}else {
PropertyConfigurator.configure(location);
}
}
}
}
================================================
FILE: clover/clover-admin/src/main/java/com/gome/clover/servlet/CloverServletHandle.java
================================================
package com.gome.clover.servlet;
import com.alibaba.fastjson.JSONObject;
import com.gome.clover.common.mongodb.DBTableInfo;
import com.gome.clover.common.mongodb.MongoDBUtil;
import com.gome.clover.common.tools.CommonConstants;
import com.gome.clover.common.tools.DateUtil;
import com.gome.clover.common.tools.IpUtil;
import com.gome.clover.common.tools.StringUtil;
import com.gome.clover.common.zeromq.AsyncSendMsg;
import com.gome.clover.common.zeromq.ZeroMQEntity;
import com.gome.clover.common.zeromq.ZeroMQPull;
import com.gome.clover.common.zk.ZKUtil;
import com.gome.clover.core.module.ModuleSchedulerServer;
import com.gome.clover.core.monitor.server.ServerHeartBeat;
import com.gome.clover.monitor.MonitorHeartBeat;
import com.mongodb.BasicDBObject;
import com.mongodb.DBObject;
import com.mongodb.util.JSON;
import org.apache.curator.framework.CuratorFramework;
import org.apache.zookeeper.CreateMode;
import org.bson.types.ObjectId;
import org.quartz.JobKey;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.util.Date;
/**
* ━━━━━━神兽出没━━━━━━
* ┏┓ ┏┓
* ┏┛┻━━━┛┻┓
* ┃ ┃
* ┃ ━ ┃
* ┃ ┳┛ ┗┳ ┃
* ┃ ┃
* ┃ ┻ ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃神兽保佑, 永无BUG!
* ┃ ┃Code is far away from bug with the animal protecting
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
* ━━━━━━感觉萌萌哒━━━━━━
* Module Desc:Clover Servlet Handle
* User: wangyue-ds6 || stark_summer@qq.com
* Date: 2014/11/24
* Time: 11:30
*/
public class CloverServletHandle extends HttpServlet {
private static final Logger logger = LoggerFactory.getLogger(CloverServletHandle.class);
private static final CuratorFramework curatorFramework = ZKUtil.create();
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("action");
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
if ("handleJobAdd".equals(action)) {
out.println(handleJobAdd(request));
} else if ("handleJobUpdate".equals(action)) {
} else if ("handleJobDataDelete".equals(action)) {
String id = request.getParameter("id");
out.println(handleJobDataDelete(id));
} else if ("handleJobDelete".equals(action)) {
String id = request.getParameter("id");
out.println(handleJobDelete(id));
} else if ("handleJobDetail".equals(action)) {
String id = request.getParameter("id");
out.println(handleJobDetail(id));
} else if ("handleLogDetail".equals(action)) {
String id = request.getParameter("id");
out.println(handleLogDetail(id));
} else if ("handleContactAdd".equals(action)) {
out.println(handleContactAdd(request));
} else if ("handleContactUpdate".equals(action)) {
out.println(handleContactUpdate(request));
} else if ("handleContactDelete".equals(action)) {
out.println(handleContactDelete(request));
} else if ("handleContactDetail".equals(action)) {
out.println(handleContactDetail(request));
} else if ("handleStartupCloverServer".equals(action)) {
out.println(handleStartupCloverServer());
} else if ("handleStopCloverServer".equals(action)) {
out.println(handleStopCloverServer());
} else if ("handleStartupServerHeartBeat".equals(action)) {
out.println(handleStartupServerHeartBeat());
} else if ("handleStopServerHeartBeat".equals(action)) {
out.println(handleStopServerHeartBeat());
} else if ("handleStartupMonitorHeartBeat".equals(action)) {
out.println(handleStartupMonitorHeartBeat());
} else if ("handleStopMonitorHeartBeat".equals(action)) {
out.println(handleStopMonitorHeartBeat());
}
out.flush();
out.close();
}
private String handleJobAdd(HttpServletRequest request) {
try {
BasicDBObject basicDBObject = new BasicDBObject();
basicDBObject.put("jobGroup", request.getParameter("jobGroup"));
basicDBObject.put("jobName", request.getParameter("jobName"));
basicDBObject.put("jobType", request.getParameter("jobType"));
basicDBObject.put("jobStrategy", request.getParameter("jobStrategy"));
basicDBObject.put("executeType", request.getParameter("executeType"));
basicDBObject.put("jobClassName", request.getParameter("jobClassName"));
basicDBObject.put("startTime", request.getParameter("startTime"));
basicDBObject.put("cronExpression", request.getParameter("cronExpression"));
String ip = request.getParameter("ip");
String port = request.getParameter("port");
basicDBObject.put("ip", ip);
basicDBObject.put("port", port);
basicDBObject.put("fixedClientIps", request.getParameter("fixedClientIps"));
basicDBObject.put("fixedServerIps", request.getParameter("fixedServerIps"));
String msg = JSON.serialize(basicDBObject);
ZeroMQEntity zeroMQEntity = new ZeroMQEntity(CommonConstants.MODULE_TYPE_CLIENT_WITH_ADMIN, ip, null, msg);
//AsyncSendMsg.send(ip, port, com.alibaba.fastjson.JSON.toJSONString(zeroMQEntity));
return "1";
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleJobAdd(HttpServletRequest request) error,", e);
return "-1";
}
}
private String handleJobDataDelete(String id) {
try {
return MongoDBUtil.INSTANCE.delete(new BasicDBObject(
DBTableInfo.COL_ID, new ObjectId(id)), DBTableInfo.TBL_CLOVER_JOB) ? "1" : "-1";
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleContactDetail(" + id + ") error,", e);
return "-1";
}
}
private String handleJobDelete(String id) {
try {
DBObject dbObject = MongoDBUtil.INSTANCE.findOneByCondition(new BasicDBObject(
DBTableInfo.COL_ID, new ObjectId(id)), DBTableInfo.TBL_CLOVER_JOB);
if (null != dbObject) {
MongoDBUtil.INSTANCE.delete(new BasicDBObject(
DBTableInfo.COL_ID, new ObjectId(id)), DBTableInfo.TBL_CLOVER_JOB);
String serverIp = (String) dbObject.get(DBTableInfo.COL_SERVER_IP);
String jobKey = (String) dbObject.get(DBTableInfo.COL_JOB_KEY);
String jobGroup = jobKey.substring(0, jobKey.lastIndexOf("."));
String jobName = jobKey.substring(jobKey.lastIndexOf(".") + 1);
if (IpUtil.getLocalIP().equals(serverIp)) {
try {
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
JobKey jobKey4Delete = new JobKey(jobName, jobGroup);
if (scheduler.checkExists(jobKey4Delete)) {
return scheduler.deleteJob(jobKey4Delete) ? "1" : "-1";
}
} catch (SchedulerException e) {
if (logger.isDebugEnabled()) e.printStackTrace();
logger.error("CloverServletHandle-->>handleJobDelete(" + id + ") error," + e.getMessage());
return "-1";
}
} else if (!StringUtil.isEmpty(serverIp)) {
BasicDBObject basicDBObject = new BasicDBObject();
basicDBObject.put("jobGroup", jobGroup);
basicDBObject.put("jobName", jobName);
String msg = JSON.serialize(basicDBObject);
ZeroMQEntity zeroMQEntity = new ZeroMQEntity(CommonConstants.MODULE_TYPE_SERVER_WITH_ADMIN, serverIp, null, msg);
String serverPathStr = CommonConstants.ZK_ROOT_PATH + "/" + CommonConstants.MODULE_TYPE_SERVER;
String port = ZKUtil.getDataByParameter(serverPathStr, "ip", serverIp, "port");
if (!StringUtil.isEmpty(port)) {
return "-1"; //AsyncSendMsg.send(serverIp, port, com.alibaba.fastjson.JSON.toJSONString(zeroMQEntity)) ? "1" : "-1";
} else {
return "-1";
}
}
} else {
return "-1";
}
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleJobDelete(" + id + ") error,", e);
return "-1";
}
return "-1";
}
private String handleJobDetail(String id) {
try {
DBObject dbObject = MongoDBUtil.INSTANCE.findOneByCondition(new BasicDBObject(
DBTableInfo.COL_ID, new ObjectId(id)), DBTableInfo.TBL_CLOVER_JOB);
if (null != dbObject) {
//构造json对象
JSONObject json = new JSONObject();
json.put("jobKey", dbObject.get(DBTableInfo.COL_JOB_KEY));
json.put("jobType", dbObject.get(DBTableInfo.COL_JOB_TYPE));
json.put("executeType", dbObject.get(DBTableInfo.COL_EXECUTE_TYPE));
json.put("jobStrategy", dbObject.get(DBTableInfo.COL_JOB_STRATEGY));
json.put("startTime", dbObject.get(DBTableInfo.COL_START_TIME));
String cronExpressionStr = (String) dbObject.get(DBTableInfo.COL_CRON_EXPRESSION);
json.put("cronExpression", cronExpressionStr);
String nextValidTime = "";
if (!StringUtil.isEmpty(cronExpressionStr)) {
if (null != dbObject.get(DBTableInfo.COL_CRON_EXPRESSION)) {
try {
nextValidTime = DateUtil.formatWithDefaultPattern(
DateUtil.getNextValidTimeAfter(cronExpressionStr, new Date()));
} catch (ParseException e) {
e.printStackTrace();
logger.error("CloverServletHandle-->>handleJobDetail(" + id + ") error," + e.getMessage());
}
}
}
json.put("nextValidTime", nextValidTime);
/* String classPath = System.getProperty("user.dir");
MyClassLoader cl = new MyClassLoader(classPath);
String className = "com.gome.clover.job.MyJobWithSimpleJob";
CreateAndCompileClassFile.compileAndLoading(classPath,className);
try {
Class cls=cl.loadClass(className);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
json.put("jobInfo", JSON.toJSONString((ClientJob) ClassUtil.BytesToObject(Base64.decodeBase64(
(String) dbObject.get(DBTableInfo.COL_JOB_INFO)))));*/
json.put("ip", dbObject.get(DBTableInfo.COL_IP));
json.put("fixedClientIps", dbObject.get(DBTableInfo.COL_FIXED_CLIENT_IPS));
json.put("fixedServerIps", dbObject.get(DBTableInfo.COL_FIXED_SERVER_IPS));
json.put("executeStartTime", dbObject.get(DBTableInfo.COL_EXECUTE_START_TIME));
json.put("executeEndTime", dbObject.get(DBTableInfo.COL_EXECUTE_END_TIME));
json.put("times", dbObject.get(DBTableInfo.COL_TIMES));
json.put("failTimes", dbObject.get(DBTableInfo.COL_FAIL_TIMES));
json.put("status", CommonConstants.JOB_STATUS_1.equals(dbObject.get(DBTableInfo.COL_STATUS)) ? "初始化状态" :
"运行中状态");
json.put("ts", dbObject.get(DBTableInfo.COL_TS));
return json.toString();
} else {
return "";
}
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleJobDetail(" + id + ") error,", e);
return "-1";
}
}
private String handleLogDetail(String id) {
try {
DBObject dbObject = MongoDBUtil.INSTANCE.findOneByCondition(new BasicDBObject(
DBTableInfo.COL_ID, new ObjectId(id)), DBTableInfo.TBL_CLOVER_LOG);
if (null != dbObject) {
//构造json对象
JSONObject json = new JSONObject();
json.put("systemId", dbObject.get(DBTableInfo.COL_SYSTEM_ID));
json.put("ip", dbObject.get(DBTableInfo.COL_IP));
json.put("jobKey", dbObject.get(DBTableInfo.COL_JOB_KEY));
json.put("execMethod", dbObject.get(DBTableInfo.COL_EXEC_METHOD));
json.put("execResult", dbObject.get(DBTableInfo.COL_EXEC_RESULT));
json.put("execTime", dbObject.get(DBTableInfo.COL_EXEC_TIME));
json.put("ts", dbObject.get(DBTableInfo.COL_TS));
return json.toString();
} else {
return "";
}
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleLogDetail(" + id + ") error,", e);
return "-1";
}
}
private String handleContactAdd(HttpServletRequest request) {
try {
BasicDBObject document = new BasicDBObject();
String systemId = request.getParameter("systemId");
document.put(DBTableInfo.COL_SYSTEM_ID, StringUtil.isEmpty(systemId) ? "" : systemId);
String ip = request.getParameter("ip");
document.put(DBTableInfo.COL_IP, StringUtil.isEmpty(ip) ? "" : ip);
String jobKey = request.getParameter("jobKey");
document.put(DBTableInfo.COL_JOB_KEY, StringUtil.isEmpty(jobKey) ? "" : jobKey);
String contacter = request.getParameter("contacter");
document.put(DBTableInfo.COL_CONTACTER, StringUtil.isEmpty(contacter) ? "" : contacter);
String email = request.getParameter("email");
document.put(DBTableInfo.COL_EMAIL, StringUtil.isEmpty(email) ? "" : email);
String mobile = request.getParameter("mobile");
document.put(DBTableInfo.COL_MOBILE, StringUtil.isEmpty(mobile) ? "" : mobile);
document.put(DBTableInfo.COL_TS, DateUtil.currentDateTime());
return MongoDBUtil.INSTANCE.insertOrUpdate(document, DBTableInfo.TBL_CLOVER_CONTACT) ? "1" : "-1";
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleContactAdd(HttpServletRequest request) error,", e);
return "-1";
}
}
private String handleContactUpdate(HttpServletRequest request) {
try {
BasicDBObject document = new BasicDBObject();
String id = request.getParameter("id");
String systemId = request.getParameter("systemId");
document.put(DBTableInfo.COL_SYSTEM_ID, StringUtil.isEmpty(systemId) ? "" : systemId);
String ip = request.getParameter("ip");
document.put(DBTableInfo.COL_IP, StringUtil.isEmpty(ip) ? "" : ip);
String jobKey = request.getParameter("jobKey");
document.put(DBTableInfo.COL_JOB_KEY, StringUtil.isEmpty(jobKey) ? "" : jobKey);
String contacter = request.getParameter("contacter");
document.put(DBTableInfo.COL_CONTACTER, StringUtil.isEmpty(contacter) ? "" : contacter);
String email = request.getParameter("email");
document.put(DBTableInfo.COL_EMAIL, StringUtil.isEmpty(email) ? "" : email);
String mobile = request.getParameter("mobile");
document.put(DBTableInfo.COL_MOBILE, StringUtil.isEmpty(mobile) ? "" : mobile);
document.put(DBTableInfo.COL_TS, DateUtil.currentDateTime());
return MongoDBUtil.INSTANCE.update(new BasicDBObject(
DBTableInfo.COL_ID, new ObjectId(id)), document, DBTableInfo.TBL_CLOVER_CONTACT) ? "1" : "-1";
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleContactUpdate(HttpServletRequest request) error,", e);
return "-1";
}
}
private String handleContactDelete(HttpServletRequest request) {
try {
String id = request.getParameter("id");
return MongoDBUtil.INSTANCE.delete(new BasicDBObject(
DBTableInfo.COL_ID, new ObjectId(id)), DBTableInfo.TBL_CLOVER_CONTACT) ? "1" : "-1";
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleContactDelete(HttpServletRequest request) error,", e);
return "-1";
}
}
private String handleContactDetail(HttpServletRequest request) {
try {
String id = request.getParameter("id");
DBObject dbObject = MongoDBUtil.INSTANCE.findOneByCondition(new BasicDBObject(
DBTableInfo.COL_ID, new ObjectId(id)), DBTableInfo.TBL_CLOVER_CONTACT);
if (null != dbObject) {
//构造json对象
JSONObject json = new JSONObject();
json.put(DBTableInfo.COL_SYSTEM_ID, dbObject.get(DBTableInfo.COL_SYSTEM_ID));
json.put(DBTableInfo.COL_IP, dbObject.get(DBTableInfo.COL_IP));
json.put(DBTableInfo.COL_JOB_KEY, dbObject.get(DBTableInfo.COL_JOB_KEY));
json.put(DBTableInfo.COL_CONTACTER, dbObject.get(DBTableInfo.COL_CONTACTER));
json.put(DBTableInfo.COL_EMAIL, dbObject.get(DBTableInfo.COL_EMAIL));
json.put(DBTableInfo.COL_MOBILE, dbObject.get(DBTableInfo.COL_MOBILE));
json.put(DBTableInfo.COL_TS, dbObject.get(DBTableInfo.COL_TS));
return json.toString();
} else {
return "";
}
} catch (Exception e) {
if (logger.isDebugEnabled()) System.err.println(e.getMessage());
logger.error("CloverServletHandle-->>handleContactDetail(HttpServletRequest request) error,", e);
return "-1";
}
}
private String handleStartupCloverServer() {
try {
if (!curatorFramework.isStarted()) curatorFramework.start();
String serverDataStr = ZKUtil.getData(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" +
IpUtil.getLocalIP());
BasicDBObject serverData;
if (!StringUtil.isEmpty(serverDataStr)) {
serverData = (BasicDBObject) JSON.parse(serverDataStr);
serverData.put("cloverServerStatus", "1");
serverData.put("cloverServerTS", DateUtil.currentDateTime());
} else {
serverData = new BasicDBObject();
serverData.put("cloverServerStatus", "1");
serverData.put("cloverServerTS", DateUtil.currentDateTime());
}
ZKUtil.setPath(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" + IpUtil.getLocalIP(),
serverData.toString(), CreateMode.EPHEMERAL);
ModuleSchedulerServer.getInstance().startup();
return "1";
} catch (Exception e) {
if (logger.isDebugEnabled()) e.printStackTrace();
logger.error("CloverServletHandle-->>handleStartupCloverServer() error,", e);
return "-1";
}
}
private String handleStopCloverServer() {
try {
if (!curatorFramework.isStarted()) curatorFramework.start();
String serverDataStr = ZKUtil.getData(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" +
IpUtil.getLocalIP());
BasicDBObject serverData;
if (!StringUtil.isEmpty(serverDataStr)) {
serverData = (BasicDBObject) JSON.parse(serverDataStr);
serverData.put("cloverServerStatus", "0");
serverData.put("cloverServerTS", DateUtil.currentDateTime());
} else {
serverData = new BasicDBObject();
serverData.put("cloverServerStatus", "0");
serverData.put("cloverServerTS", DateUtil.currentDateTime());
}
ZKUtil.setPath(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" + IpUtil.getLocalIP(),
serverData.toString(), CreateMode.EPHEMERAL);
ModuleSchedulerServer.getInstance().stop();
ZeroMQPull.INSTANCE.stop(IpUtil.getLocalIP(),CommonConstants.ZMQ_SERVER_PORT);
return "1";
} catch (Exception e) {
if (logger.isDebugEnabled()) e.printStackTrace();
logger.error("CloverServletHandle-->>handleStopCloverServer() error,", e);
return "-1";
}
}
private String handleStartupServerHeartBeat() {
try {
if (!curatorFramework.isStarted()) curatorFramework.start();
String serverDataStr = ZKUtil.getData(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" +
IpUtil.getLocalIP());
BasicDBObject serverData;
if (!StringUtil.isEmpty(serverDataStr)) {
serverData = (BasicDBObject) JSON.parse(serverDataStr);
serverData.put("serverHeartBeatStatus", "1");
serverData.put("serverHeartBeatTS", DateUtil.currentDateTime());
} else {
serverData = new BasicDBObject();
serverData.put("serverHeartBeatStatus", "1");
serverData.put("serverHeartBeatTS", DateUtil.currentDateTime());
}
ZKUtil.setPath(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" + IpUtil.getLocalIP(),
serverData.toString(), CreateMode.EPHEMERAL);
ServerHeartBeat.INSTNACE.startup();
return "1";
} catch (Exception e) {
if (logger.isDebugEnabled()) e.printStackTrace();
logger.error("CloverServletHandle-->>startupMonitorHeartBeat() error,", e);
return "-1";
}
}
private String handleStopServerHeartBeat() {
try {
if (!curatorFramework.isStarted()) curatorFramework.start();
String serverDataStr = ZKUtil.getData(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" +
IpUtil.getLocalIP());
BasicDBObject serverData;
if (!StringUtil.isEmpty(serverDataStr)) {
serverData = (BasicDBObject) JSON.parse(serverDataStr);
serverData.put("serverHeartBeatStatus", "0");
serverData.put("serverHeartBeatTS", DateUtil.currentDateTime());
} else {
serverData = new BasicDBObject();
serverData.put("serverHeartBeatStatus", "0");
serverData.put("serverHeartBeatTS", DateUtil.currentDateTime());
}
ZKUtil.setPath(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" + IpUtil.getLocalIP(),
serverData.toString(), CreateMode.EPHEMERAL);
ServerHeartBeat.INSTNACE.stop();
return "1";
} catch (Exception e) {
if (logger.isDebugEnabled()) e.printStackTrace();
logger.error("CloverServletHandle-->>startupMonitorHeartBeat() error,", e);
return "-1";
}
}
private String handleStartupMonitorHeartBeat() {
try {
if (!curatorFramework.isStarted()) curatorFramework.start();
String serverDataStr = ZKUtil.getData(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" +
IpUtil.getLocalIP());
BasicDBObject serverData;
if (!StringUtil.isEmpty(serverDataStr)) {
serverData = (BasicDBObject) JSON.parse(serverDataStr);
serverData.put("monitorHeartBeatStatus", "1");
serverData.put("monitorHeartBeatTS", DateUtil.currentDateTime());
} else {
serverData = new BasicDBObject();
serverData.put("monitorHeartBeatStatus", "1");
serverData.put("monitorHeartBeatTS", DateUtil.currentDateTime());
}
ZKUtil.setPath(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" + IpUtil.getLocalIP(),
serverData.toString(), CreateMode.EPHEMERAL);
MonitorHeartBeat.INSTNACE.startup();
return "1";
} catch (Exception e) {
if (logger.isDebugEnabled()) e.printStackTrace();
logger.error("CloverServletHandle-->>startupMonitorHeartBeat() error,", e);
return "-1";
}
}
private String handleStopMonitorHeartBeat() {
try {
if (!curatorFramework.isStarted()) curatorFramework.start();
String serverDataStr = ZKUtil.getData(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" +
IpUtil.getLocalIP());
BasicDBObject serverData;
if (!StringUtil.isEmpty(serverDataStr)) {
serverData = (BasicDBObject) JSON.parse(serverDataStr);
serverData.put("monitorHeartBeatStatus", "0");
serverData.put("monitorHeartBeatTS", DateUtil.currentDateTime());
} else {
serverData = new BasicDBObject();
serverData.put("monitorHeartBeatStatus", "0");
serverData.put("monitorHeartBeatTS", DateUtil.currentDateTime());
}
ZKUtil.setPath(curatorFramework, CommonConstants.ZK_ROOT_PATH + "/monitor/server/" + IpUtil.getLocalIP(),
serverData.toString(), CreateMode.EPHEMERAL);
MonitorHeartBeat.INSTNACE.stop();
return "1";
} catch (Exception e) {
if (logger.isDebugEnabled()) e.printStackTrace();
logger.error("CloverServletHandle-->>startupMonitorHeartBeat() error,", e);
return "-1";
}
}
}
================================================
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteCronJobWithSpringAnnotation.java
================================================
package com.gome.testclover.spring;
import com.gome.bg.clover.client.job.RemoteJob;
import com.gome.clover.common.annotation.CloverJobAnnotation;
import com.gome.clover.common.tools.DateUtil;
import com.gome.clover.core.job.ClientJob;
import org.quartz.JobExecutionContext;
import org.springframework.stereotype.Component;
/**
* ━━━━━━神兽出没━━━━━━
* ┏┓ ┏┓
* ┏┛┻━━━┛┻┓
* ┃ ┃
* ┃ ━ ┃
* ┃ ┳┛ ┗┳ ┃
* ┃ ┃
* ┃ ┻ ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃神兽保佑, 永无BUG!
* ┃ ┃Code is far away from bug with the animal protecting
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
* ━━━━━━感觉萌萌哒━━━━━━
* Module Desc:Log4j ConfigListener
* User: wangyue-ds6 || stark_summer@qq.com
* Date: 2014/11/25
* Time: 10:55
*/
@Component
@CloverJobAnnotation(jobGroup = "RemoteJobWithSpringAnnotationGroup",jobName = "RemoteJobWithSpringAnnotationName",
jobType = ClientJob.JobType.REMOTE,executeType = ClientJob.ExecuteType.ADD,cronExpression="0/10 * * * * ?")
public class RemoteCronJobWithSpringAnnotation extends RemoteJob {
@Override
public void executeJob(JobExecutionContext arg0) {
System.err.println("RemoteJobWithSpringAnnotation--->>>executeJob(JobExecutionContext) @"+ DateUtil.currentDateTime());
}
}
================================================
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteFixedDateJobWithSpring.java
================================================
package com.gome.testclover.spring;
import com.gome.bg.clover.client.job.RemoteJob;
import com.gome.clover.common.tools.DateUtil;
import org.quartz.JobExecutionContext;
public class RemoteFixedDateJobWithSpring extends RemoteJob {
@Override
public void executeJob(JobExecutionContext arg0) {
System.err.println("RemoteFixedDateJobWithSpring--->>>executeJob(JobExecutionContext) @"+ DateUtil.currentDateTime());
}
}
================================================
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteFixedDateJobWithSpringAnnotation.java
================================================
package com.gome.testclover.spring;
import com.gome.bg.clover.client.job.RemoteJob;
import com.gome.clover.common.annotation.CloverJobAnnotation;
import com.gome.clover.common.tools.DateUtil;
import com.gome.clover.core.job.ClientJob;
import org.quartz.JobExecutionContext;
/**
* ━━━━━━神兽出没━━━━━━
* ┏┓ ┏┓
* ┏┛┻━━━┛┻┓
* ┃ ┃
* ┃ ━ ┃
* ┃ ┳┛ ┗┳ ┃
* ┃ ┃
* ┃ ┻ ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃神兽保佑, 永无BUG!
* ┃ ┃Code is far away from bug with the animal protecting
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
* ━━━━━━感觉萌萌哒━━━━━━
* Module Desc:Log4j ConfigListener
* User: wangyue-ds6 || stark_summer@qq.com
* Date: 2014/11/25
* Time: 10:55
*/
//@Component
@CloverJobAnnotation(jobGroup = "RemoteJobWithSpringAnnotationGroup",jobName = "RemoteJobWithSpringAnnotationName",
jobType = ClientJob.JobType.REMOTE,executeType = ClientJob.ExecuteType.ADD,startTime="2014-12-12 12:12:12")
public class RemoteFixedDateJobWithSpringAnnotation extends RemoteJob {
@Override
public void executeJob(JobExecutionContext arg0) {
System.err.println("RemoteJobWithSpringAnnotation--->>>executeJob(JobExecutionContext) @"+ DateUtil.currentDateTime());
}
}
================================================
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteJobWithSpring.java
================================================
package com.gome.testclover.spring;
import com.gome.bg.clover.client.job.RemoteJob;
import com.gome.clover.common.tools.DateUtil;
import org.quartz.JobExecutionContext;
public class RemoteJobWithSpring extends RemoteJob {
@Override
public void executeJob(JobExecutionContext arg0) {
System.err.println("RemoteJobWithSpring--->>>executeJob(JobExecutionContext) @"+ DateUtil.currentDateTime());
}
}
================================================
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/TestProperties.java
================================================
package com.gome.testclover.spring;
import com.gome.clover.common.tools.PropertiesUtil;
import java.util.Properties;
/**
* ━━━━━━神兽出没━━━━━━
* ┏┓ ┏┓
* ┏┛┻━━━┛┻┓
* ┃ ┃
* ┃ ━ ┃
* ┃ ┳┛ ┗┳ ┃
* ┃ ┃
* ┃ ┻ ┃
* ┃ ┃
* ┗━┓ ┏━┛
* ┃ ┃神兽保佑, 永无BUG!
* ┃ ┃Code is far away from bug with the animal protecting
* ┃ ┗━━━┓
* ┃ ┣┓
* ┃ ┏┛
* ┗┓┓┏━┳┓┏┛
* ┃┫┫ ┃┫┫
* ┗┻┛ ┗┻┛
* ━━━━━━感觉萌萌哒━━━━━━
* Module Desc:clover
* User: wangyue-ds6 || stark_summer@qq.com
* Date: 2015/1/7
* Time: 16:49
*/
public class TestProperties {
public static void main(String[] args) {
Properties properties = PropertiesUtil.loadProperties("conf/config.properties");
String cloverServerStatus = (String) properties.get("cloverServerStatus");
System.err.println(""+cloverServerStatus);
properties.setProperty("cloverServerStatus","1");
PropertiesUtil.writePropertiesFile("conf/config.properties",properties);
properties = PropertiesUtil.loadProperties("conf/config.properties");
System.err.println(""+properties.get("cloverServerStatus"));
}
}
================================================
FILE: clover/clover-admin/src/main/resources/bak_log4j.properties
================================================
#将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句
log4j.rootLogger=debug,stdout,logfile
### 把日志信息输出到控制台 ###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
#log4j.appender.stdout.Target=System.err
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
### 把日志信息输出到文件:jbit.log ###
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=/export/home/tomcat/logs/clover.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %F %p %m%n
###显示SQL语句部分
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
================================================
FILE: clover/clover-admin/src/main/resources/conf/config.properties
================================================
cloverServerStatus=0
cloverServerTS
serverHeartBeatStatus=0
serverHeartBeatTS
monitorHeartBeatStatus=0
monitorHeartBeatTS
================================================
FILE: clover/clover-admin/src/main/resources/log4j.xml
================================================
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://jakarta.apache.org/log4j/
http://jakarta.apache.org/log4j/ ">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%5p] [%d{yyyy-MM-dd HH:mm:ss SSS}] [%t] (%F:%L) %m%n"/>
</layout>
</appender>
<appender name="FILE" class="org.apache.log4j.DailyRollingFileAppender">
<param name="Encoding" value="UTF-8"/>
<param name="File" value="/data/logs/clover/clover.log"/>
<!-- 日志路径,根据实际情况修改 -->
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%5p] [%d{yyyy-MM-dd HH:mm:ss SSS}] [%t] (%F:%L) %m%n"/>
</layout>
</appender>
<category name="com.gome" additivity="false"> <!-- 自定义的日志分类,请根据实际情况调整 -->
<priority value="INFO"/>
<!-- 根据实际情况修改日志级别,一般线上是INFO以上 -->
<appender-ref ref="CONSOLE"/>
<!-- 该appender需要在上线时删除,以免输出重复的日志到catalina.out文件 -->
<appender-ref ref="FILE"/>
</category>
<root>
<priority value="INFO"/>
<!-- 根据实际情况修改日志级别,一般线上是INFO以上 -->
<appender-ref ref="CONSOLE"/>
<!-- 该appender需要在上线时删除,以免输出重复的日志到catalina.out文件 -->
<appender-ref ref="FILE"/>
</root>
</log4j:configuration>
================================================
FILE: clover/clover-admin/src/main/resources/spring/spring-config.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cloverjob="http://www.gome.com.cn/schema/cloverjob"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.gome.com.cn/schema/cloverjob http:/www.gome.com.cn/schema/cloverjob/cloverjob.xsd">
<!--<context:component-scan base-package="com.gome.testclover.spring"/>-->
<cloverjob:config token="6fb8535d703f2492704aefc212b7cd41" systemId="testClover"
jobClassName=" com.gome.testclover.spring.RemoteJobWithSpring , com.gome.testclover.spring.RemoteCronJobWithSpringAnnotation"/>
<cloverjob:job id="com.gome.testclover.spring.RemoteJobWithSpring" jobGroup="RemoteJobWithSpringGroup"
jobName="RemoteJobWithSpringName" jobType="REMOTE" executeType="ADD" cronExpression="0/10 * * * * ?" />
<!-- <cloverjob:job id="com.gome.testclover.spring.RemoteFixedDateJobWithSpring" jobGroup="RemoteFixedDateJobWithSpringGroup"
jobName="RemoteFixedDateJobWithSpringName" jobType="REMOTE" executeType="ADD" startTime="2014-12-12 12:12:12"/>-->
</beans>
================================================
FILE: clover/clover-admin/src/main/webapp/WEB-INF/web.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>log4jConfigLocation</param-name>
<param-value>/WEB-INF/classes/log4j.xml</param-value>
</context-param>
<!-- <context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-config.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>-->
<!-- 加载log4j配置文件 -->
<listener>
<listener-class>com.gome.clover.listener.Log4jConfigListener</listener-class>
</listener>
<servlet>
<servlet-name>cloverServletHandle</servlet-name>
<servlet-class>com.gome.clover.servlet.CloverServletHandle</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cloverServletHandle</servlet-name>
<url-pattern>/servlet/cloverServletHandle.do</url-pattern>
</servlet-mapping>
<!-- <servlet>
<servlet-name>Scheduler_ServerInitial</servlet-name>
<servlet-class>com.gome.clover.server.module.SchedulerServerInitial</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Scheduler_ServerInitial</servlet-name>
<url-pattern>/Scheduler_ServerInitial/</url-pattern>
</servlet-mapping>-->
<!--
<servlet>
<servlet-name>SchedulerClientInitial</servlet-name>
<servlet-class>com.gome.clover.server.module.SchedulerClientInitial</servlet-class>
<init-param>
<param-name>jobClassStr</param-name>
<param-value>java.lang.ArrayList</param-value>
</init-param>
<init-param>
<param-name>isRegisterToZK</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>isStartupMQ</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>token</param-name>
<param-value>6fb8535d703f2492704aefc212b7cd41</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>SchedulerClientInitial</servlet-name>
<url-pattern>/SchedulerClientInitial/</url-pattern>
</servlet-mapping>-->
<!--<init-param>
<param-name>isRegisterToZK</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>isStartupMQ</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>isReloadJobFromDB</param-name>
<param-value>false</param-value>
</init-param>-->
</web-app>
================================================
FILE: clover/clover-admin/src/main/webapp/common/head.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>
<head>
<title>clover manager system</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<link rel="stylesheet" type="text/css" href="<%=basePath%>/css/bootstrap.min.css" />
<link href="<%=basePath%>/css/bootstrap-responsive.min.css" rel="stylesheet" />
<link rel="stylesheet" type="text/css" href="<%=basePath%>/css/style.css" />
<!--[if lt IE 9]>
<script type="text/javascript" src="<%=basePath%>/js/html5.js"></script>
<![endif]-->
<script type="text/javascript" src="<%=basePath%>/js/jquery-1.7.1.min.js"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap.min.js"></script>
<script type="text/javascript" src="<%=basePath%>/js/jquery.validate.js"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap-tooltip.js"></script>
<script type="text/javascript" src="<%=basePath%>/js/bootstrap-popover.js"></script>
</head>
================================================
FILE: clover/clover-admin/src/main/webapp/common/nav.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid"><a class="btn btn-navbar"
data-toggle="collapse" data-target=".nav-collapse"> <span
class="icon-bar"></span> <span class="icon-bar"></span> <span
class="icon-bar"></span> </a> <a class="brand" href="<%=basePath%>/index.jsp">clover manager system</a>
<div class="nav-collapse">
<ul class="nav navbar-nav">
<li><a href="<%=basePath%>/zkList.jsp">zkmgr</a></li>
<li><a href="<%=basePath%>/jobList.jsp">jobmgr</a></li>
<li><a href="<%=basePath%>/contactList.jsp">contactmgr</a></li>
<li><a href="<%=basePath%>/logList.jsp">logmgr</a></li>
<li><a href="<%=basePath%>/monitorList.jsp">monitor</a></li>
<%-- <li class="dropdown active">
<a href=""
class="dropdown-toggle" data-toggle="dropdown">monitor<b class="caret"></b></a>
<ul class="dropdown-menu">
<li><a href="servlet/cloverServletHandle.do?action=startupMonitorHeartBeat">startupMonitorHeartBeat</a></li>
<li><a href="">stopMonitorHeartBeat</a></li>
</ul>
</li>--%>
</ul>
</div>
</div>
</div>
</div>
================================================
FILE: clover/clover-admin/src/main/webapp/contactList.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="com.gome.clover.common.mongodb.DBTableInfo" %>
<%@ page import="com.gome.clover.common.mongodb.MongoDBUtil" %>
<%@ page import="com.gome.clover.common.tools.StringUtil" %>
<%@ page import="com.mongodb.BasicDBObject" %>
<%@ page import="com.mongodb.DBCursor" %>
<%@ page import="com.mongodb.DBObject" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String qSystemId = request.getParameter("qSystemId");
String qJobKey = request.getParameter("qJobKey");
String qIp = request.getParameter("qIp");
String qExecMethod = request.getParameter("qExecMethod");
DBObject condition = new BasicDBObject();
if (!StringUtil.isEmpty(qSystemId)) condition.put(DBTableInfo.COL_SYSTEM_ID, qSystemId);
if (!StringUtil.isEmpty(qJobKey)) condition.put(DBTableInfo.COL_JOB_KEY, qJobKey);
if (!StringUtil.isEmpty(qIp)) condition.put(DBTableInfo.COL_IP, qIp);
if (!StringUtil.isEmpty(qExecMethod)) condition.put(DBTableInfo.COL_EXEC_METHOD, qExecMethod);
DBCursor dbCursor = MongoDBUtil.INSTANCE.findByCondition(condition,DBTableInfo.TBL_CLOVER_CONTACT);
%>
<!DOCTYPE html>
<html>
<jsp:include page="/common/head.jsp"/>
<body>
<jsp:include page="/common/nav.jsp"/>
<div class="container-fluid">
<table class="table table-bordered">
<tbody>
<form action="<%=basePath%>contactList.jsp" method="post">
<tr>
<th>System Id:</th>
<td>
<input type="text" name="qSystemId" placeholder="System Id" value="<%=null!=qSystemId?qSystemId:""%>">
</td>
<th>ip:</th>
<td>
<input type="text" name="qIp" placeholder="ip" value="<%=null!=qIp?qIp:""%>">
</td>
<th>Job Key:</th>
<td>
<input type="text" name="qJobKey" placeholder="Job Key" value="<%=null!=qJobKey?qJobKey:""%>">
</td>
<th>Exec Method:</th>
<td>
<input type="text" name="qExecMethod" placeholder="Exec Method" value="<%=null!=qExecMethod?qExecMethod:""%>">
</td>
</tr>
<tr>
<td colspan="8">
<center>
<button class="btn btn-success" type="submit">查询</button>
<button class="btn" onclick="clearQuery()">清空</button>
<a class="btn btn-primary" data-toggle="modal" onclick="toAddContact()" href="#">
新建</a>
</center>
</td>
</tr>
</form>
</tbody>
</table>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="width: 10%; text-align: center;" nowrap>systemId</th>
<th style="width: 10%; text-align: center;" nowrap>ip</th>
<th style="width: 10%; text-align: center;" nowrap>jobKey</th>
<th style="width: 20%; text-align: center;" nowrap>contacter</th>
<th style="width: 10%; text-align: center;" nowrap>email</th>
<th style="width: 10%; text-align: center;" nowrap>mobile</th>
<th style="width: 10%; text-align: center;" nowrap>ts</th>
<th style="width: 10%;text-align: center;" nowrap>操作</th>
</tr>
</thead>
<tbody>
<%
if(null!=dbCursor && dbCursor.size()>0){
while (dbCursor.hasNext()) {
DBObject tempDBObject = dbCursor.next();
%>
<tr>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_SYSTEM_ID)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_IP)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_JOB_KEY)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_CONTACTER)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_EMAIL)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_MOBILE)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_TS)%>
</td>
<td style="text-align: center;" nowrap>
<a data-toggle="modal" onclick="toUpdateContact('<%=tempDBObject.get(DBTableInfo.COL_ID).toString() %>')" href="#">
<i class="icon-edit"></i>修改</a>
<a data-toggle="modal" onclick="toDeleteContact('<%=tempDBObject.get(DBTableInfo.COL_ID).toString() %>')" href="#">
<i class="icon-remove"></i>删除</a>
<a data-toggle="modal" onclick="toDetailContact('<%=tempDBObject.get(DBTableInfo.COL_ID).toString() %>')" href="#">
<i class="icon-eye-open"></i>查看</a>
</td>
</tr>
<%
}
}else {
%>
<tr>
<td colspan="8" style="text-align: center;" nowrap>暂无相关记录</td>
</tr>
<%
}
%>
</tbody>
</table>
</div>
<!-- 新建弹出层开始 -->
<div id="addDiv" class="modal hide fade">
<div class="modal-header">
<a class="close" data-dismiss="modal" >×</a>
<h3>联系人新建</h3>
</div>
<div class="modal-body">
<table class="table table-bordered table-hover">
<tbody>
<tr>
<th>System ID:</th>
<td>
<input class="form-inline span3" type="text" id="addSystemId" name="addSystemId"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>IP:</th>
<td>
<input class="form-inline span3" type="text" id="addIp"name="addIp" />
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Key:</th>
<td>
<input class="form-inline span3" type="text" id="addJobKey"name="addJobKey"/>
<font color="red">* 格式:jobGroup.jobName</font>
</td>
</tr>
<tr>
<th>contacter:</th>
<td>
<input class="form-inline span3" type="text" id="addContacter" name="addContacter"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>email:</th>
<td>
<input class="form-inline span3" type="text" id="addEmail"name="addEmail" />
<font color="red">*</font>
</td>
</tr>
<tr>
<th>mobile:</th>
<td>
<input class="form-inline span3" type="text" id="addMobile" name="addMobile"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<td colspan="2">
<center>
<button class="btn btn-success" onclick="addContact()" >提交</button>
<button class="btn" data-dismiss="modal">关闭</button>
</center>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- 新建弹出层结束 -->
<!-- 修改弹出层开始 -->
<div id="updateDiv" class="modal hide fade">
<div class="modal-header">
<a class="close" data-dismiss="modal" >×</a>
<h3>联系人更新</h3>
</div>
<div class="modal-body">
<table class="table table-bordered table-hover">
<tbody>
<tr>
<th>System ID:</th>
<td>
<input type="hidden" id="updateId" name="updateId"/>
<input class="form-inline span3" type="text" id="updateSystemId" name="updateSystemId"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>IP:</th>
<td>
<input class="form-inline span3" type="text" id="updateIp"name="updateIp" />
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Key:</th>
<td>
<input class="form-inline span3" type="text" id="updateJobKey"name="updateJobKey"/>
<font color="red">*<%--格式:jobGroup.jobName--%></font>
</td>
</tr>
<tr>
<th>contacter:</th>
<td>
<input class="form-inline span3" type="text" id="updateContacter" name="updateContacter"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>email:</th>
<td>
<input class="form-inline span3" type="text" id="updateEmail"name="updateEmail" />
<font color="red">*</font>
</td>
</tr>
<tr>
<th>mobile:</th>
<td>
<input class="form-inline span3" type="text" id="updateMobile" name="updateMobile"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>TS:</th>
<td>
<input class="form-inline span3" type="text" id="updateTs"name="updateTs" />
<font color="red">*</font>
</td>
</tr>
<tr>
<td colspan="2">
<center>
<button class="btn btn-success" onclick="updateContact()" >提交</button>
<button class="btn" data-dismiss="modal">关闭</button>
</center>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- 更新弹出层结束 -->
<!-- 详情弹出层开始 -->
<div id="detailDiv" class="modal hide fade">
<div class="modal-header">
<a class="close" data-dismiss="modal" >×</a>
<h3>联系人详细</h3>
</div>
<div class="modal-body">
<table class="table table-bordered table-hover">
<tbody>
<tr>
<th>System ID:</th>
<td>
<input class="form-inline span3" type="text" id="detailSystemId" name="detailSystemId"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>IP:</th>
<td>
<input class="form-inline span3" type="text" id="detailIp"name="detailIp" />
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Key:</th>
<td>
<input class="form-inline span3" type="text" id="detailJobKey"name="detailJobKey"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>contacter:</th>
<td>
<input class="form-inline span3" type="text" id="detailContacter" name="detailContacter"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>email:</th>
<td>
<input class="form-inline span3" type="text" id="detailEmail"name="detailEmail" />
<font color="red">*</font>
</td>
</tr>
<tr>
<th>mobile:</th>
<td>
<input class="form-inline span3" type="text" id="detailMobile" name="detailMobile"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>TS:</th>
<td>
<input class="form-inline span3" type="text" id="detailTs"name="detailTs" />
<font color="red">*</font>
</td>
</tr>
<tr>
<td colspan="2">
<center>
<button class="btn btn-success" data-dismiss="modal">关闭</button>
</center>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- 详情弹出层结束 -->
<!-- 删除弹出层开始 -->
<div id="deleteDiv" class="modal hide fade">
<div class="modal-header">
<a class="close" data-dismiss="modal" >×</a>
<h3>联系人删除</h3>
</div>
<div class="modal-body">
<p>您确定删除该联系人</p>
</div>
<div class="modal-footer">
<center>
<button class="btn" data-dismiss="modal" aria-hidden="true">关闭</button>
<button class="btn btn-success" onclick="deleteContact()">删除</button>
</center>
</div>
</div>
<!-- 删除弹出层结束 -->
</body>
</html>
<script type="text/javascript">
function clearContact(optType){
$("#"+optType+"SystemId").val("");
$("#"+optType+"Ip").val("");
$("#"+optType+"JobKey").val("");
$("#"+optType+"Contacter").val("");
$("#"+optType+"Email").val("");
$("#"+optType+"Mobile").val("");
$("#"+optType+"Ts").val("");
}
/*格式校验 开始*/
function validateContact(optType){
var systemId = $.trim($("#"+optType+"SystemId").val());
if(systemId == "" || 0== systemId.length){
alert("系统ID,请填写");
return false;
}
var ip = $.trim( $("#"+optType+"Ip").val());
if(ip == "" || 0== ip.length){
alert("IP,请填写");
return false;
}
var jobKey = $.trim( $("#"+optType+"JobKey").val());
if(jobKey == "" || 0== jobKey.length){
alert("Job Key,请填写");
return false;
}
var contacter = $.trim( $("#"+optType+"Contacter").val());
if(contacter == "" || 0== contacter.length){
alert("联系人,请填写");
return false;
}
var email = $.trim( $("#"+optType+"Email").val());
if(email == "" || 0== email.length){
alert("email,请填写");
return false;
}
return true;
}
/*格式校验 结束*/
function clearQuery() {
$("#qSystemId").val("");
$("#qJobKey").val("");
$("#qIp").val("");
$("#qExecMethod").val("");
}
function toAddContact(){
clearContact("add");
$("#addDiv").modal({backdrop: 'static', keyboard: false});
}
function addContact(){
var optType = 'add';
if(validateContact(optType)){
$.ajax({
type:"POST",
url:"servlet/cloverServletHandle.do?action=handleContactAdd&r="+Math.random(),
data:{
"systemId":$.trim($("#"+optType+"SystemId").val()),
"ip":$.trim($("#"+optType+"Ip").val()),
"jobKey":$.trim($("#"+optType+"JobKey").val()),
"contacter":$.trim($("#"+optType+"Contacter").val()),
"email":$.trim($("#"+optType+"Email").val()),
"mobile":$.trim($("#"+optType+"Mobile").val())
},
success:function (data){
if(1==data){
clearContact('add');
window.location.reload();
} else {
alert("系统出现异常,请联系管理员");
return;
}
}
});
}
}
function toUpdateContact(_id){
var url="servlet/cloverServletHandle.do?action=handleContactDetail&id="+_id+"&r="+Math.random();
$.get(url, null, function(data){
if(null==data ||data.length==0){
alert("系统出现异常,请联系管理员");
return;
}
eval("var resultObj = "+data);
$("#updateId").val(_id);
$("#updateSystemId").val(resultObj.systemId);
$("#updateIp").val(resultObj.ip);
$("#updateJobKey").val(resultObj.jobKey);
$("#updateContacter").val(resultObj.contacter);
$("#updateEmail").val(resultObj.email);
$("#updateMobile").val(resultObj.mobile);
$("#updateTs").val(resultObj.ts);
$("#updateDiv").modal({backdrop: 'static', keyboard: false});
});
}
function updateContact(_id){
var optType = 'update';
if(validateContact(optType)){
$.ajax({
type:"POST",
url:"servlet/cloverServletHandle.do?action=handleContactUpdate&r="+Math.random(),
data:{
"id":$.trim($("#updateId").val()),
"systemId":$.trim($("#"+optType+"SystemId").val()),
"ip":$.trim($("#"+optType+"Ip").val()),
"jobKey":$.trim($("#"+optType+"JobKey").val()),
"contacter":$.trim($("#"+optType+"Contacter").val()),
"email":$.trim($("#"+optType+"Email").val()),
"mobile":$.trim($("#"+optType+"Mobile").val())
},
success:function (data){
if(1==data){
clearContact('update');
window.location.reload();
} else {
alert("系统出现异常,请联系管理员");
return;
}
}
});
}
}
function toDetailContact(_id){
var url="servlet/cloverServletHandle.do?action=handleContactDetail&id="+_id+"&r="+Math.random();
$.get(url, null, function(data){
if(null==data ||data.length==0){
alert("系统出现异常,请联系管理员");
return;
}
eval("var resultObj = "+data);
$("#detailSystemId").val(resultObj.systemId);
$("#detailIp").val(resultObj.ip);
$("#detailJobKey").val(resultObj.jobKey);
$("#detailContacter").val(resultObj.contacter);
$("#detailEmail").val(resultObj.email);
$("#detailMobile").val(resultObj.mobile);
$("#detailTs").val(resultObj.ts);
$("#detailDiv").modal({backdrop: 'static', keyboard: false});
});
}
function toDeleteContact(_id){
$("#updateId").val(_id);
$("#deleteDiv").modal({backdrop: 'static', keyboard: false});
}
function deleteContact(){
$.ajax({
type:"POST",
url:"servlet/cloverServletHandle.do?action=handleContactDelete&r="+Math.random(),
data:{
"id":$.trim($("#updateId").val())
},
success:function (data){
if(1==data){
window.location.reload();
} else {
alert("系统出现异常,请联系管理员");
return;
}
}
});
}
</script>
================================================
FILE: clover/clover-admin/src/main/webapp/css/style.css
================================================
body {padding-top:60px; padding-bottom:40px;}
.sidebar-nav {padding:9px 0;}
/*pagin&&pagin-m*/
.pagin a,.pagin span{float:left;height:20px;padding:3px 10px;border:1px solid #ccc;margin-left:2px;font-family:arial;line-height:20px;font-size:14px;overflow:hidden;-moz-border-radius:5px;-webkit-border-radius:5px;}
.pagin .text,.pagin .current{border:none;padding:4px 11px;}
.pagin a:link,.pagin a:visited{color:#005aa0;}
.pagin a:hover,.pagin a:active{background:#005aa0;color:#fff;text-decoration:none;}
.pagin .current,.pagin .current:link,.pagin .current:visited{color:#f60;font-weight:bold;}
.pagin b{dispaly:block;position:absolute;top:9px;width:5px;height:9px;background-image:url(i/bg_hotsale.gif);background-repeat:no-repeat;overflow:hidden;}
.pagin .prev,.pagin .next,.pagin .prev-disabled,.pagin .next-disabled{position:relative;padding-top:5px;height:18px;line-height:18px;}
.pagin .prev-disabled,.pagin .next-disabled{color:#ccc;cursor:default;}
.pagin .prev,.pagin .prev-disabled{padding-left:12px;}
.pagin .prev b{left:3px;background-position:-68px -608px;}
.pagin .prev-disabled b{left:3px;background-position:-80px -608px;}
.pagin .next,.pagin .next-disabled{padding-right:12px;}
.pagin .next b{right:3px;background-position:-62px -608px;}
.pagin .next-disabled b{right:3px;background-position:-74px -608px;}
.pagin-m a,.pagin-m span{height:14px;line-height:14px;font-size:12px;}
.pagin-m b{top:5px;}
.pagin-m .prev,.pagin-m .next,.pagin-m .prev-disabled,.pagin-m .next-disabled{padding-top:3px;height:14px;line-height:14px;*line-height:16px;}
.float_div{ border:2px solid #3694e0; background:#fff; width:600px; height:400px;}
.float_div h2{ background:url(i/float_divbg.gif); margin:1px; height:30px; line-height:30px; color:#fff; text-indent:10px;}
.float_div span{ font-size:12px; width:50px; text-align:right; padding-right:10px; overflow:hidden; float:right; font-family:Arial, Helvetica, sans-serif;}
.float_div span a{ color:#f0ff00;}
/**/
================================================
FILE: clover/clover-admin/src/main/webapp/error.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<div class="m_404">
<div class="error">
<h3>
<s:if test="exception">
<s:property value="exception.printStackTrace()"/>
<s:if test="exception.class.simpleName=='NoSuchMethodException'">
<s:property value="response.setStatus(404)"/>
404! 您请求的内容不存在
</s:if>
<s:elseif test="exception.message">
出错了: <s:property value="exception.message"/>
</s:elseif>
<s:else>
出错了系统错误!
</s:else>
</s:if>
</h3>
</div>
</div>
================================================
FILE: clover/clover-admin/src/main/webapp/index.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
%>
<!DOCTYPE html>
<html>
<jsp:include page="/common/head.jsp"/>
<script src="<%=basePath%>/js/highcharts.js"></script>
<script src="<%=basePath%>/js/exporting.js"></script>
<script src="<%=basePath%>/js/Map.js"></script>
<body>
<jsp:include page="/common/nav.jsp"/>
<div class="container-fluid" >
<div id="container" style="min-width:700px;height:400px"></div>
</div>
</body>
<script type="text/javascript">
$(function () {
$('#container').highcharts({
title: {
text: 'Job Monitor',
x: -20 //center
},
subtitle: {
text: 'Source From:Clover',
x: -20
},
xAxis: {
categories: ['2014-11-24 16:13', '2014-11-24 16:14', '2014-11-24 16:15', '2014-11-24 16:16', '2014-11-24 16:17', '2014-11-24 16:18','2014-11-24 16:19', '2014-11-24 16:20', '2014-11-24 16:21', '2014-11-24 16:21', '2014-11-24 16:13', '2014-11-24 16:13']
},
yAxis: {
title: {
text: 'QPS'
},
plotLines: [{
value: 0,
width: 1,
color: '#808080'
}]
},
tooltip: {
valueSuffix: '次'
},
legend: {
layout: 'vertical',
align: 'right',
verticalAlign: 'middle',
borderWidth: 0
},
series: [{
name: 'Job1',
data: [70, 6, 9, 14, 18, 21, 25, 26, 23, 18, 13, 9]
}, {
name: 'Job2',
data: [2, 8, 5, 11, 17, 22, 24, 24, 20, 14, 60, 50]
}, {
name: 'Job3',
data: [90, 60, 30, 80, 13, 17, 18, 17, 14, 90, 30, 10]
}, {
name: 'Job4',
data: [3, 40, 50, 80, 11, 15, 17, 16, 14, 10, 60, 80]
}]
});
});
</script>
</html>
================================================
FILE: clover/clover-admin/src/main/webapp/jobList.jsp
================================================
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@page import="com.gome.clover.common.mongodb.DBTableInfo" %>
<%@ page import="com.gome.clover.common.mongodb.MongoDBUtil" %>
<%@ page import="com.gome.clover.common.tools.CommonConstants" %>
<%@ page import="com.gome.clover.common.tools.DateUtil" %>
<%@ page import="com.gome.clover.common.tools.StringUtil" %>
<%@ page import="com.mongodb.BasicDBObject" %>
<%@ page import="com.mongodb.DBCursor" %>
<%@ page import="com.mongodb.DBObject" %>
<%@ page import="java.util.Date" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path;
String qJobKey = request.getParameter("qJobKey");
String qJobType = request.getParameter("qJobType");
String qIp = request.getParameter("qIp");
String qStatus = request.getParameter("qStatus");
DBObject condition = new BasicDBObject();
if (!StringUtil.isEmpty(qJobKey)) condition.put(DBTableInfo.COL_JOB_KEY, qJobKey);
if (!StringUtil.isEmpty(qJobType)) condition.put(DBTableInfo.COL_JOB_TYPE, qJobType);
if (!StringUtil.isEmpty(qIp)) condition.put(DBTableInfo.COL_IP, qIp);
if (!StringUtil.isEmpty(qStatus)) condition.put(DBTableInfo.COL_STATUS, qStatus);
DBCursor dbCursor = MongoDBUtil.INSTANCE.findByCondition(condition,DBTableInfo.TBL_CLOVER_JOB);
%>
<!DOCTYPE html>
<html>
<jsp:include page="/common/head.jsp"/>
<body>
<jsp:include page="/common/nav.jsp"/>
<div class="container-fluid">
<table class="table table-bordered">
<tbody>
<form action="<%=basePath%>/jobList.jsp" method="post">
<tr>
<th>Job Key:</th>
<td>
<input type="text" id="qJobKey"name="qJobKey" placeholder="Job Key"
value="<%=null!=qJobKey?qJobKey:""%>"/>
</td>
<td>
<select id="qJobType"name="qJobType">
<%
if("LOCAL".equals(qJobType)){
%>
<option value="">请选择Job Type</option>
<option value="LOCAL" selected>LOCAL</option>
<option value="REMOTE" >REMOTE</option>
<%
}else if("REMOTE".equals(qJobType)){
%>
<option value="">请选择Job Type</option>
<option value="LOCAL" >LOCAL</option>
<option value="REMOTE" selected >REMOTE</option>
<%
}else {
%>
<option value="">请选择Job Type</option>
<option value="LOCAL" >LOCAL</option>
<option value="REMOTE" >REMOTE</option>
<%
}
%>
</select>
</td>
<th>ip:</th>
<td>
<input type="text" id="qIp"name="qIp" placeholder="ip" value="<%=null!=qIp?qIp:""%>"/>
</td>
<td>
<select id="qStatus"name="qStatus">
<%
if("1".equals(qStatus)){
%>
<option value="">请选择 Status</option>
<option value="1" selected>初始化状态</option>
<option value="2">运行中状态</option>
<%
}else if("2".equals(qStatus)){
%>
<option value="">请选择 Status</option>
<option value="1">初始化状态</option>
<option value="2" selected>运行中状态</option>
<%
}else {
%>
<option value="">请选择 Status</option>
<option value="1">初始化状态</option>
<option value="2">运行中状态</option>
<%
}
%>
</select>
</td>
</tr>
<tr>
<td colspan="6">
<center>
<button class="btn btn-success" type="submit">查询</button>
<button class="btn" onclick="clearQuery()">清空</button>
<a class="btn btn-primary" data-toggle="modal" onclick="toAddJob()" href="#">
新建</a>
</center>
</td>
</tr>
</form>
</tbody>
</table>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th style="width: 20%; text-align: center;" nowrap>Job Key</th>
<th style="width: 5%; text-align: center;" nowrap>Job Type</th>
<th style="width: 5%; text-align: center;" nowrap>Start Time</th>
<th style="width: 5%; text-align: center;" nowrap>Cron Expression</th>
<th style="width: 5%; text-align: center;" nowrap>Client Ip</th>
<th style="width: 5%; text-align: center;" nowrap>Server Ip</th>
<th style="width: 5%; text-align: center;" nowrap>Execute Start Time</th>
<th style="width: 5%; text-align: center;" nowrap>Execute End Time</th>
<th style="width: 5%; text-align: center;" nowrap>times</th>
<th style="width: 5%; text-align: center;" nowrap>Fail Times</th>
<th style="width: 5%; text-align: center;" nowrap>status</th>
<th style="width: 5%; text-align: center;" nowrap>ts</th>
<th style="width: 5%;text-align: center;" nowrap>操作</th>
</tr>
</thead>
<tbody>
<%
if(null!=dbCursor && dbCursor.size()>0){
while (dbCursor.hasNext()) {
DBObject tempDBObject = dbCursor.next();
String nextValidTime = "";
if(tempDBObject.containsField(DBTableInfo.COL_CRON_EXPRESSION) && StringUtil.isNotBlank((String)tempDBObject.get(DBTableInfo.COL_CRON_EXPRESSION))) {
nextValidTime = DateUtil.formatWithDefaultPattern(
DateUtil.getNextValidTimeAfter((String) tempDBObject.get(DBTableInfo.COL_CRON_EXPRESSION), new Date()));
}
%>
<tr>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_JOB_KEY)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_JOB_TYPE)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_START_TIME)%>
</td>
<td style="text-align: center;" nowrap>
<%
if(null!= nextValidTime && nextValidTime.length()>0){
%>
<a href="#" data-toggle="tooltip" data-placement="bottom"
title="下次执行时间:<%=nextValidTime%>" >
<%=tempDBObject.get(DBTableInfo.COL_CRON_EXPRESSION)%></a>
<%
}
%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_CLIENT_IP)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_SERVER_IP)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_EXECUTE_START_TIME)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_EXECUTE_END_TIME)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_TIMES)%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_FAIL_TIMES)%>
</td>
<td style="text-align: center;" nowrap>
<%=CommonConstants.JOB_STATUS_1.equals(tempDBObject.get(DBTableInfo.COL_STATUS))?
"初始化状态":"运行中状态"%>
</td>
<td style="text-align: center;" nowrap>
<%=tempDBObject.get(DBTableInfo.COL_TS)%>
</td>
<td style="text-align: center;" nowrap>
<%-- <a data-toggle="modal" onclick="toUpdateJob('<%=tempDBObject.get(DBTableInfo.COL_ID).toString() %>')" href="#">
<i class="icon-edit"></i>修改</a>--%>
<a data-toggle="modal" onclick="toViewJob('<%=tempDBObject.get(DBTableInfo.COL_ID).toString() %>')"
href="#">
<i class="icon-eye-open"></i>查看
</a>
<a data-toggle="modal" onclick="toDeleteJob('<%=tempDBObject.get(DBTableInfo.COL_ID).toString() %>')" href="#">
<i class="icon-remove"></i>删除</a>
</td>
</tr>
<%
}
}else {
%>
<tr>
<td colspan="13" style="text-align: center;" nowrap>暂无相关记录</td>
</tr>
<%
}
%>
</tbody>
</table>
</div>
<!-- 添加弹出层开始 -->
<div id="addDiv" class="modal hide fade">
<div class="modal-header">
<a class="close" data-dismiss="modal" >×</a>
<h3>JOB添加</h3>
</div>
<div class="modal-body">
<table class="table table-bordered table-hover">
<tbody>
<tr>
<th>Job Group:</th>
<td>
<input class="form-inline span3" type="text" id="addJobGroup" name="addJobGroup"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Name:</th>
<td>
<input class="form-inline span3" type="text" id="addJobName" name="addJobName"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Type:</th>
<td>
<select id ="addJobType" name ="addJobType">
<option value="">请选择Job Type</option>
<option value="LOCAL" >LOCAL</option>
<option value="REMOTE">REMOTE</option>
</select>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Execute Type:</th>
<td>
<select id ="addExecuteType" name ="addExecuteType">
<option value="">请选择Execute Type</option>
<option value="ADD" >ADD</option>
<option value="UPDATE">UPDATE</option>
<option value="DELETE">DELETE</option>
</select>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Strategy:</th>
<td>
<select id ="addJobStrategy" name ="addJobStrategy">
<option value="">请选择Job Strategy</option>
<option value="HASH" >HASH</option>
<option value="SYSTEM_CAPACITY">SYSTEM_CAPACITY</option>
</select>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Class Name:</th>
<td>
<input class="form-inline span3" type="text" id="addJobClassName"name="addJobClassName"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Start Time:</th>
<td>
<input class="form-inline span3" type="text" id="addStartTime"name="addStartTime"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Cron Expression:</th>
<td>
<input class="form-inline span3" type="text" id="addCronExpression"name="addCronExpression"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>ip:</th>
<td>
<input class="form-inline span3" type="text" id="addIp" name="addIp"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>port:</th>
<td>
<input class="form-inline span3" type="text" id="addPort" name="addPort"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Fixed Client Ips:</th>
<td>
<input class="form-inline span3" type="text" id="addFixedClientIps"
name="addFixedClientIps"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Fixed Server Ips:</th>
<td>
<input class="form-inline span3" type="text" id="addFixedServerIps"
name="addFixedServerIps"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<td colspan="2">
<center>
<button class="btn btn-success" onclick="addJob()" >提交</button>
<button class="btn btn-success" data-dismiss="modal">关闭</button>
</center>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- 修改弹出层结束 -->
<!-- 修改弹出层开始 -->
<div id="updateDiv" class="modal hide fade">
<div class="modal-header">
<a class="close" data-dismiss="modal" >×</a>
<h3>JOB修改</h3>
</div>
<div class="modal-body">
<table class="table table-bordered table-hover">
<tbody>
<tbody>
<tr>
<th>Job Group:</th>
<td>
<input type="hidden" id="updateId" name="updateId"/>
<input class="form-inline span3" type="text" id="updateJobGroup" name="updateJobGroup"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Name:</th>
<td>
<input class="form-inline span3" type="text" id="updateJobName" name="updateJobName"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Type:</th>
<td>
<select id ="updateJobType" name ="updateJobType">
<option value="">请选择Job Type</option>
<option value="LOCAL" >LOCAL</option>
<option value="REMOTE">REMOTE</option>
</select>
</td>
</tr>
<tr>
<th>Job Class Name:</th>
<td>
<input class="form-inline span3" type="text" id="updateJobClassName"name="updateJobClassName"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Start Time:</th>
<td>
<input class="form-inline span3" type="text" id="updateStartTime"name="updateStartTime"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Cron Expression:</th>
<td>
<input class="form-inline span3" type="text" id="updateCronExpression"name="updateCronExpression"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>ip:</th>
<td>
<input class="form-inline span3" type="text" id="updateIp" name="updateIp"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>ip:</th>
<td>
<input class="form-inline span3" type="text" id="updatePort" name="updatePort"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Fixed Client Ips:</th>
<td>
<input class="form-inline span3" type="text" id="updateFixedClientIps"
name="updateFixedClientIps"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Fixed Server Ips:</th>
<td>
<input class="form-inline span3" type="text" id="updateFixedServerIps"
name="updateFixedServerIps"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>status:</th>
<td>
<input class="form-inline span3" type="text" id="updateStatus"name="updateStatus"/>
<font color="red">*</font>
</td>
</tr>
<tr>
<td colspan="2">
<center>
<button class="btn btn-success" onclick="updateJob()" >提交</button>
<button class="btn btn-success" data-dismiss="modal">关闭</button>
</center>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- 修改弹出层结束 -->
<!-- 查询详情弹出层开始 -->
<div id="detailDiv" class="modal hide fade">
<div class="modal-header">
<a class="close" data-dismiss="modal" >×</a>
<h3>JOB详情</h3>
</div>
<div class="modal-body">
<table class="table table-bordered table-hover">
<tbody>
<tr>
<th>Job Key:</th>
<td>
<input class="form-inline span3" type="text" id="detailJobKey" name="detailJobKey" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Type:</th>
<td>
<input class="form-inline span3" type="text" id="detailJobType"name="detailJobType" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Execute Type:</th>
<td>
<input class="form-inline span3" type="text" id="detailExecuteType"name="detailExecuteType" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Job Strategy:</th>
<td>
<input class="form-inline span3" type="text" id="detailJobStrategy"name="detailJobStrategy" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Start Time:</th>
<td>
<input class="form-inline span3" type="text" id="detailStartTime"name="detailStartTime" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Cron Expression:</th>
<td>
<input class="form-inline span3" type="text" id="detailCronExpression"name="detailCronExpression" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Next Valid Time:</th>
<td>
<input class="form-inline span3" type="text" id="detailNextValidTime"name="detailNextValidTime" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>ip:</th>
<td>
<input class="form-inline span3" type="text" id="detailIp" name="detailIp" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Fixed Client Ips:</th>
<td>
<input class="form-inline span3" type="text" id="detailFixedClientIps"
name="detailFixedClientIps" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Fixed Server Ips:</th>
<td>
<input class="form-inline span3" type="text" id="detailFixedServerIps"
name="detailFixedServerIps" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Execute Start Time:</th>
<td>
<input class="form-inline span3" type="text" id="detailExecuteStartTime"name="detailExecuteStartTime" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Execute End Time:</th>
<td>
<input class="form-inline span3" type="text" id="detailExecuteEndTime"name="detailExecuteEndTime" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>times:</th>
<td>
<input class="form-inline span3" type="text" id="detailTimes"name="detailTimes" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>Fail Times:</th>
<td>
<input class="form-inline span3" type="text" id="detailFailTimes"name="detailFailTimes" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>status:</th>
<td>
<input class="form-inline span3" type="text" id="detailStatus"name="detailStatus" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<th>TS:</th>
<td>
<input class="form-inline span3" type="text" id="detailTs"name="detailTs" readonly/>
<font color="red">*</font>
</td>
</tr>
<tr>
<td colspan="2">
<center>
<button class="btn btn-success" data-dismiss="modal">关闭</button>
</center>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<!-- 查询详情弹出层结束 -->
<!-- 删除弹出层开始 -->
<div id="deleteJobDiv" class="modal hide fade" aria-hidden="true" ke>
<div class="modal-header">
<a class="close" data-dismiss="modal" >×</a>
<h3>JOB删除</h3>
</div>
<div class="modal-body">
<p>您确定删除该JOB</p>
</div>
<div class="modal-footer">
<center>
<button class="btn" data-dismiss="modal" aria-hidden="true">关闭</button>
<button class="btn btn-success" onclick="deleteJobData()">删除DB数据</button>
<button class="btn btn-success" onclick="deleteJob()">删除</button>
</center>
</div>
</div>
<!-- 删除弹出层结束 -->
</body>
</html>
<script type="text/javascript">
var isClickZeroMq = false;
function clearQuery() {
$("#qJobKey").val("");
$("#qDest").val("");
$("#qIp").val("");
$("#qStatus").val("");
}
function clearJob(optType){
$("#"+optType+"JobGroup").val("");
$("#"+optType+"JobName").val("");
$("#"+optType+"JobType").val("");
$("#"+optType+"ExecuteType").val("");
$("#"+optType+"JobClassName").val("");
$("#"+optType+"StartTime").val("");
$("#"+optType+"CronExpression").val("");
$("#"+optType+"Ip").val("");
$("#"+optType+"Port").val("");
$("#"+optType+"FixedClientIps").val("");
$("#"+optType+"FixedServerIps").val("");
$("#"+optType+"Status").val("");
}
/*格式校验 开始*/
function validateJob(optType){
var jobGroup = $.trim($("#"+optType+"JobGroup").val());
if(jobGroup == "" || 0 == jobGroup.length){
alert("job 组,请填写");
return false;
}
var jobName = $.trim($("#"+optType+"JobName").val());
if(jobName == "" || 0 == jobName.length){
alert("job 名称,请填写");
return false;
}
var jobType = $.trim($("#"+optType+"JobType").val());
if(jobType == "" || 0 == jobType.length){
alert("Job Type,请填写");
return false;
}
var executeType = $.trim($("#"+optType+"ExecuteType").val());
if(executeType == "" || 0 == executeType.length){
alert("Execute Type,请填写");
return false;
}
var jobStrategy = $.trim($("#"+optType+"JobStrategy").val());
if(jobStrategy == "" || 0 == jobStrategy.length){
alert("Job Strategy,请填写");
return false;
}
var jobClassName = $.trim($("#"+optType+"JobClassName").val());
if(jobClassName == "" || 0== jobClassName.length){
alert("JobClassName,请填写");
return false;
}
var startTime = $.trim($("#"+optType+"StartTime").val());
var cronExpression = $.trim($("#"+optType+"CronExpression").val());
if((startTime == "" || 0 == startTime.length) && (cronExpression == "" || (0 == cronExpression.length ))){
alert("Start Time/Cron Expression不能同时为空,请填写");
return false;
}
var ip = $.trim($("#"+optType+"Ip").val());
if(ip == "" || 0 == ip.length){
alert("ip,请填写");
return false;
}
var port = $.trim($("#"+optType+"Port").val());
if(port == "" || 0 == port.length){
alert("port,请填写");
return false;
}
return true;
}
/*格式校验 结束*/
function toAddJob(){
clearJob("add");
$("#addDiv").modal({backdrop: 'static', keyboard: false});
}
function toUpdateJob(_id){
clearJob("update");
$("#updateDiv").modal({backdrop: 'static', keyboard: false});
}
function toDeleteJob(_id){
$("#updateId").val(_id);
$("#deleteJobDiv").modal({backdrop: 'static', keyboard: false});
}
function toViewJob(_id){
var url="servlet/cloverServletHandle.do?action=handleJobDetail&id="+_id+"&r="+Math.random();
$.get(url, null, function(data){
if(null==data ||data.length==0){
alert("系统出现异常,请联系管理员");
return;
}
eval("var resultObj = "+data);
$("#detailJobKey").val(resultObj.jobKey);
$("#detailJobType").val(resultObj.jobType);
$("#detailExecuteType").val(resultObj.executeType);
$("#detailJobStrategy").val(resultObj.jobStrategy);
$("#detailStartTime").val(resultObj.startTime);
$("#detailCronExpression").val(resultObj.cronExpression);
$("#detailNextValidTime").val(resultObj.nextValidTime);
$("#detailIp").val(resultObj.ip);
$("#detailFixedClientIps").val(resultObj.fixedClientIps);
$("#detailFixedServerIps").val(resultObj.fixedServerIps);
$("#detailExecuteStartTime").val(resultObj.executeStartTime);
$("#detailExecuteEndTime").val(resultObj.executeEndTime);
$("#detailTimes").val(resultObj.times);
$("#detailFailTimes").val(resultObj.failTimes);
$("#detailStatus").val(resultObj.status);
$("#detailTs").val(resultObj.ts);
$("#detailDiv").modal({backdrop: 'static', keyboard: false});
});
}
function addJob() {
var optType = 'add';
if(validateJob(optType)){
$.ajax({
type:"POST",
url:"servlet/cloverServletHandle.do?action=handleJobAdd&r="+Math.random(),
data:{
"jobGroup":$.trim($("#"+optType+"JobGroup").val()),
"jobName":$.trim($("#"+optType+"JobName").val()),
"jobType":$.trim($("#"+optType+"JobType").val()),
"jobStrategy":$.trim($("#"+optType+"JobStrategy").val()),
"executeType":$.trim($("#"+optType+"ExecuteType").val()),
"jobClassName":$.trim($("#"+optType+"JobClassName").val()),
"startTime":$.trim($("#"+optType+"StartTime").val()),
"cronExpression":$.trim($("#"+optType+"CronExpression").val()),
"ip":$.trim($("#"+optType+"Ip").val()),
"port":$.trim($("#"+optType+"Port").val()),
"fixedClientIps":$.trim($("#"+optType+"FixedClientIps").val()),
"fixedServerIps":$.trim($("#"+optType+"FixedServerIps").val())
},
success:function (data){
if(1==data){
clearJob('add');
window.location.reload();
} else {
alert("系统出现异常,请联系管理员");
return;
}
}
});
}
}
function updateJob() {
var optType = 'update';
if(validateJob(optType)){
alert("ok");
$.ajax({
type:"POST",
url:"servlet/cloverServletHandle.do?action=handleJobAdd&r="+Math.random(),
data:{
"jobGroup":$.trim($("#"+optType+"JobGroup").val()),
"jobName":$.trim($("#"+optType+"JobName").val()),
"jobType":$.trim($("#"+optType+"JobType").val()),
"executeType":$.trim($("#"+optType+"ExecuteType").val()),
"jobClassName":$.trim($("#"+optType+"JobClassName").val()),
"startTime":$.trim($("#"+optType+"StartTime").val()),
"cronExpression":$.trim($("#"+optType+"CronExpression").val()),
"ip":$.trim($("#"+optType+"Ip").val()),
"port":$.trim($("#"+optType+"Port").val()),
"fixedClientIps":$.trim($("#"+optType+"FixedClientIps").val()),
"fixedServerIps":$.trim($("#"+optType+"FixedServerIps").val())
},
success:function (data){
if(1==data){
clearJob('add');
window.location.reload();
} else {
alert("系统出现异常,请联系管理员");
return;
}
}
});
}
}
function updateJob() {
var optType = 'update';
if(validateJob(optType)){
$.ajax({
type:"POST",
url:"servlet/cloverServletHandle.do?action=handleJobUpdate&r="+Math.random(),
data:{
"jobGroup":$.trim($("#"+optType+"JobGroup").val()),
"jobName":$.trim($("#"+optType+"JobName").val()),
"jobType":$.trim($("#"+optType+"JobType").val()),
"executeType":$.trim($("#"+optType+"ExecuteType").val()),
"jobClassName":$.trim($("#"+optType+"JobClassName").val()),
"startTime":$.trim($("#"+optType+"StartTime").val()),
"cronExpression":$.trim($("#"+optType+"CronExpression").val()),
"ip":$.trim($("#"+optType+"Ip").val()),
"port":$.trim($("#"+optType+"Port").val()),
"fixedClientIps":$.trim($("#"+optType+"FixedClientIps").val()),
"fixedServerIps":$.trim($("#"+optType+"FixedServerIps").val())
},
success:function (data){
if(1==data){
clearJob('add');
window.location.reload();
} else {
alert("系统出现异常,请联系管理员");
return;
}
}
});
}
}
function deleteJobData() {
$.ajax({
type: "POST",
url: "servlet/cloverServletHandle.do?action=handleJobDataDelete&r=" + Math.random(),
data: {
"id": $.trim($("#updateId").val())
},
success: function (data) {
if (1 == data) {
window.location.reload();
} else {
alert("系统出现异常,请联系管理员");
return;
}
}
});
}
function deleteJob(){
$.ajax({
type:"POST",
url:"servlet/cloverServletHandle.do?action=handleJobDelete&r="+Math.random(),
data:{
"id":$.trim($("#updateId").val())
},
success:function (data){
if(1==data){
window.location.reload();
} else {
alert("系统出现异常,请联系管理员");
return;
}
}
});
}
</script>
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/DatePicker.htm
================================================
<html>
<head>
<meta http-equiv="content-type" content="text/xml; charset=utf-8" />
<title>DatePicker</title>
<script type="text/javascript" src="config.js"></script>
<script>
if(parent==window)
location.href = 'http://www.360buy.com';
var $d, $dp, $pdp = parent.$dp, $dt, $tdt, $sdt, $IE=$pdp.ie, $FF = $pdp.ff,$OPERA=$pdp.opera, $ny, $cMark = false;
if ($pdp.eCont) {
$dp = {};
for (var p in $pdp) {
$dp[p] = $pdp[p];
}
}
else
$dp = $pdp;
$dp.getLangIndex = function(name){
var arr = langList;
for (var i = 0; i < arr.length; i++) {
if (arr[i].name == name) {
return i;
}
}
return -1;
}
$dp.getLang = function(name){
var index = $dp.getLangIndex(name);
if (index == -1) {
index = 0;
}
return langList[index];
}
$dp.realLang = $dp.getLang($dp.lang);
document.write("<script src='lang/" + $dp.realLang.name + ".js' charset='" + $dp.realLang.charset + "'><\/script>");
for (var i = 0; i < skinList.length; i++) {
document.write('<link rel="stylesheet" type="text/css" href="skin/' + skinList[i].name + '/datepicker.css" title="' + skinList[i].name + '" charset="' + skinList[i].charset + '" disabled="true"/>');
}
</script>
<script type="text/javascript" src="calendar.js"></script>
</head>
<body leftmargin="0" topmargin="0" onload="$c.autoSize()" tabindex=0>
</body>
</html>
<script>new My97DP();</script>
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/WdatePicker.js
================================================
/*
* jdDate by beiqiu
*/
var $dp,WdatePicker;
(function() {
var _ = {
$wdate:true,
$dpPath:"",
$crossFrame:true,
doubleCalendar:false,
enableKeyboard:true,
autoUpdateOnChanged:null,
whichDayIsfirstWeek:4,
position:{},
lang:"auto",
skin:"ext",
dateFmt:"yyyy-MM-dd",
realDateFmt:"yyyy-MM-dd",
realTimeFmt:"HH:mm:ss",
realFullFmt:"%Date %Time",
minDate:"1900-01-01 00:00:00",
maxDate:"2099-12-31 23:59:59",
startDate:"",
alwaysUseStartDate:false,
yearOffset:1911,
firstDayOfWeek:0,
isShowWeek:false,
highLineWeekDay:true,
isShowClear:true,
isShowToday:true,
isShowOK:true,
isShowOthers:true,
readOnly:false,
errDealMode:0,
autoPickDate:null,
qsEnabled:true,
specialDates:null,specialDays:null,disabledDates:null,disabledDays:null,opposite:false,onpicking:null,onpicked:null,onclearing:null,oncleared:null,ychanging:null,ychanged:null,Mchanging:null,Mchanged:null,dchanging:null,dchanged:null,Hchanging:null,Hchanged:null,mchanging:null,mchanged:null,schanging:null,schanged:null,eCont:null,vel:null,errMsg:"",quickSel:[],has:{}};
WdatePicker = U;
var X = window,O = "document",J = "documentElement",C = "getElementsByTagName",V,A,T,I,b;
switch (navigator.appName) {case"Microsoft Internet Explorer":T = true;break;case"Opera":b = true;break;default:I = true;break
}
A = L();
if (_.$wdate)M(A + "skin/WdatePicker.css");
V = X;
if (_.$crossFrame) {
try {
while (V.parent[O] != V[O] && V.parent[O][C]("frameset").length == 0)V = V.parent
} catch(P) {
}
}
if (!V.$dp)V.$dp = {ff:I,ie:T,opera:b,el:null,win:X,status:0,defMinDate:_.minDate,defMaxDate:_.maxDate,flatCfgs:[]};
B();
if ($dp.status == 0)Z(X, function() {
U(null, true)
});
if (!X[O].docMD) {
E(X[O], "onmousedown", D);
X[O].docMD = true
}
if (!V[O].docMD) {
E(V[O], "onmousedown", D);
V[O].docMD = true
}
E(X, "onunload", function() {
if ($dp.dd)Q($dp.dd, "none")
});
function B() {
V.$dp = V.$dp || {};
obj = {$:function($) {
return(typeof $ == "string") ? X[O].getElementById($) : $
},$D:function($, _) {
return this.$DV(this.$($).value, _)
},$DV:function(_, $) {
if (_ != "") {
this.dt = $dp.cal.splitDate(_, $dp.cal.dateFmt);
if ($)for (var B in $)if (this.dt[B] === undefined)this.errMsg = "invalid property:" + B; else {
this.dt[B] += $[B];
if (B == "M") {
var C = $["M"] > 0 ? 1 : 0,A = new Date(this.dt["y"], this.dt["M"], 0).getDate();
this.dt["d"] = Math.min(A + C, this.dt["d"])
}
}
if (this.dt.refresh())return this.dt
}
return""
},show:function() {
Q(this.dd, "block")
},hide:function() {
Q(this.dd, "none")
},attachEvent:E};
for (var $ in obj)V.$dp[$] = obj[$];
$dp = V.$dp
}
function E(A, $, _) {
if (T)A.attachEvent($, _); else {
var B = $.replace(/on/, "");
_._ieEmuEventHandler = function($) {
return _($)
};
A.addEventListener(B, _._ieEmuEventHandler, false)
}
}
function L() {
var _,A,$ = X[O][C]("script");
for (var B = 0; B < $.length; B++) {
_ = $[B].src.substring(0, $[B].src.toLowerCase().indexOf("wdatepicker.js"));
A = _.lastIndexOf("/");
if (A > 0)_ = _.substring(0, A + 1);
if (_)break
}
return _
}
function F(F) {
var E,C;
if (F.substring(0, 1) != "/" && F.indexOf("://") == -1) {
E = V.location.href;
C = location.href;
if (E.indexOf("?") > -1)E = E.substring(0, E.indexOf("?"));
if (C.indexOf("?") > -1)C = C.substring(0, C.indexOf("?"));
var G,I,$ = "",D = "",A = "",J,H,B = "";
for (J = 0; J < Math.max(E.length, C.length); J++) {
G = E.charAt(J).toLowerCase();
I = C.charAt(J).toLowerCase();
if (G == I) {
if (G == "/")H = J
} else {
$ = E.substring(H + 1, E.length);
$ = $.substring(0, $.lastIndexOf("/"));
D = C.substring(H + 1, C.length);
D = D.substring(0, D.lastIndexOf("/"));
break
}
}
if ($ != "")for (J = 0; J < $.split("/").length; J++)B += "../";
if (D != "")B += D + "/";
F = E.substring(0, E.lastIndexOf("/") + 1) + B + F
}
_.$dpPath = F
}
function M(A, $, B) {
var D = X[O][C]("HEAD").item(0),_ = X[O].createElement("link");
if (D) {
_.href = A;
_.rel = "stylesheet";
_.type = "text/css";
if ($)_.title = $;
if (B)_.charset = B;
D.appendChild(_)
}
}
function Z($, _) {
E($, "onload", _)
}
function G($) {
$ = $ || V;
var A = 0,_ = 0;
while ($ != V) {
var D = $.parent[O][C]("iframe");
for (var F = 0; F < D.length; F++) {
try {
if (D[F].contentWindow == $) {
var E = W(D[F]);
A += E.left;
_ += E.top;
break
}
} catch(B) {
}
}
$ = $.parent
}
return{"leftM":A,"topM":_}
}
function W(F) {
if (F.getBoundingClientRect)return F.getBoundingClientRect(); else {
var A = {ROOT_TAG:/^body|html$/i,OP_SCROLL:/^(?:inline|table-row)$/i},E = false,H = null,_ = F.offsetTop,G = F.offsetLeft,D = F.offsetWidth,B = F.offsetHeight,C = F.offsetParent;
if (C != F)while (C) {
G += C.offsetLeft;
_ += C.offsetTop;
if (S(C, "position").toLowerCase() == "fixed")E = true; else if (C.tagName.toLowerCase() == "body")H = C.ownerDocument.defaultView;
C = C.offsetParent
}
C = F.parentNode;
while (C.tagName && !A.ROOT_TAG.test(C.tagName)) {
if (C.scrollTop || C.scrollLeft)if (!A.OP_SCROLL.test(Q(C)))if (!b || C.style.overflow !== "visible") {
G -= C.scrollLeft;
_ -= C.scrollTop
}
C = C.parentNode
}
if (!E) {
var $ = a(H);
G -= $.left;
_ -= $.top
}
D += G;
B += _;
return{"left":G,"top":_,"right":D,"bottom":B}
}
}
function N($) {
$ = $ || V;
var B = $[O],A = ($.innerWidth) ? $.innerWidth : (B[J] && B[J].clientWidth) ? B[J].clientWidth : B.body.offsetWidth,_ = ($.innerHeight) ? $.innerHeight : (B[J] && B[J].clientHeight) ? B[J].clientHeight : B.body.offsetHeight;
return{"width":A,"height":_}
}
function a($) {
$ = $ || V;
var B = $[O],A = B[J],_ = B.body;
B = (A && A.scrollTop != null && (A.scrollTop > _.scrollTop || A.scrollLeft > _.scrollLeft)) ? A : _;
return{"top":B.scrollTop,"left":B.scrollLeft}
}
function D($) {
src = $ ? ($.srcElement || $.target) : null;
if ($dp && $dp.cal && !$dp.eCont && $dp.dd && src != $dp.el && $dp.dd.style.display == "block")$dp.cal.close()
}
function Y() {
$dp.status = 2;
H()
}
function H() {
if ($dp.flatCfgs.length > 0) {
var $ = $dp.flatCfgs.shift();
$.el = {innerHTML:""};
$.autoPickDate = true;
$.qsEnabled = false;
K($)
}
}
var R,$;
function U(J, C) {
$dp.win = X;
B();
J = J || {};
if (C) {
if (!G()) {
$ = $ || setInterval(function() {
if (V[O].readyState == "complete")clearInterval($);
U(null, true)
}, 50);
return
}
if ($dp.status == 0) {
$dp.status = 1;
K({el:{innerHTML:""}}, true)
} else return
} else if (J.eCont) {
J.eCont = $dp.$(J.eCont);
$dp.flatCfgs.push(J);
if ($dp.status == 2)H()
} else {
if ($dp.status == 0) {
U(null, true);
return
}
if ($dp.status != 2)return;
var F = D();
if (F) {
$dp.srcEl = F.srcElement || F.target;
F.cancelBubble = true
}
J.el = $dp.$(J.el || $dp.srcEl);
if (!J.el || J.el["My97Mark"] === true || J.el.disabled || (J.el == $dp.el && Q($dp.dd) != "none" && $dp.dd.style.left != "-1970px")) {
J.el["My97Mark"] = false;
return
}
K(J);
if (J.el.nodeType == 1 && J.el["My97Mark"] === undefined) {
$dp.el["My97Mark"] = false;
var _,A;
if (F.type == "focus") {
_ = "onclick";
A = "onfocus"
} else {
_ = "onfocus";
A = "onclick"
}
E(J.el, _, J.el[A])
}
}
function G() {
if (T && V != X && V[O].readyState != "complete")return false;
return true
}
function D() {
if (I) {
func = D.caller;
while (func != null) {
var $ = func.arguments[0];
if ($ && ($ + "").indexOf("Event") >= 0)return $;
func = func.caller
}
return null
}
return event
}
}
function S(_, $) {
return _.currentStyle ? _.currentStyle[$] : document.defaultView.getComputedStyle(_, false)[$]
}
function Q(_, $) {
if (_)if ($ != null)_.style.display = $; else return S(_, "display")
}
function K(H, $) {
for (var D in _)if (D.substring(0, 1) != "$")$dp[D] = _[D];
for (D in H)if ($dp[D] !== undefined)$dp[D] = H[D];
var E = $dp.el ? $dp.el.nodeName : "INPUT";
if ($ || $dp.eCont || new RegExp(/input|textarea|div|span|p|a/ig).test(E))$dp.elProp = E == "INPUT" ? "value" : "innerHTML"; else return;
if ($dp.lang == "auto")$dp.lang = T ? navigator.browserLanguage.toLowerCase() : navigator.language.toLowerCase();
if (!$dp.dd || $dp.eCont || ($dp.lang && $dp.realLang && $dp.realLang.name != $dp.lang && $dp.getLangIndex && $dp.getLangIndex($dp.lang) >= 0)) {
if ($dp.dd && !$dp.eCont)V[O].body.removeChild($dp.dd);
if (_.$dpPath == "")F(A);
var B = "<iframe style=\"width:1px;height:1px\" src=\"" + _.$dpPath + "DatePicker.htm\" frameborder=\"0\" border=\"0\" scrolling=\"no\"></iframe>";
if ($dp.eCont) {
$dp.eCont.innerHTML = B;
Z($dp.eCont.childNodes[0], Y)
} else {
$dp.dd = V[O].createElement("DIV");
$dp.dd.style.cssText = "position:absolute;z-index:19700";
$dp.dd.innerHTML = B;
V[O].body.appendChild($dp.dd);
Z($dp.dd.childNodes[0], Y);
if ($)$dp.dd.style.left = $dp.dd.style.top = "-1970px"; else {
$dp.show();
C()
}
}
} else if ($dp.cal) {
$dp.show();
$dp.cal.init();
if (!$dp.eCont)C()
}
function C() {
var F = $dp.position.left,B = $dp.position.top,C = $dp.el;
if (C != $dp.srcEl && (Q(C) == "none" || C.type == "hidden"))C = $dp.srcEl;
var H = W(C),$ = G(X),D = N(V),A = a(V),E = $dp.dd.offsetHeight,_ = $dp.dd.offsetWidth;
if (isNaN(B)) {
if (B == "above" || (B != "under" && (($.topM + H.bottom + E > D.height) && ($.topM + H.top - E > 0))))B = A.top + $.topM + H.top - E - 3; else B = A.top + $.topM + Math.min(H.bottom, D.height - E);
B += T ? -1 : 1
} else B += A.top + $.topM;
if (isNaN(F))F = A.left + Math.min($.leftM + H.left, D.width - _ - 5) - (T ? 2 : 0); else F += A.left + $.leftM;
$dp.dd.style.top = B + "px";
$dp.dd.style.left = F + "px"
}
}
})()
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/calendar.js
================================================
/*
* My97 DatePicker 4.7 Beta5
* License: http://www.my97.net/dp/license.asp
*/
eval(function(B,D,A,G,E,F){function C(A){return A<62?String.fromCharCode(A+=A<26?65:A<52?71:-4):A<63?'_':A<64?'$':C(A>>6)+C(A&63)}while(A>0)E[C(G--)]=D[--A];return B.replace(/[\w\$]+/g,function(A){return E[A]==F[A]?A:E[A]})}('l f;e(FP){FD.Co.__defineSetter__("Fd",9(c){e(!c){q.Bq();}4 c;});FD.Co.__defineGetter__("FL",9(){l c=q.GG;DH(c.FZ!=V){c=c.parentNode;}4 c;});HTMLElement.Co.C8=9(b,A){l c=b.6(/Ez/,"");A.El=9(c){GA.BZ=c;4 A();};q.addEventListener(c,A.El,2);};}9 EX(){f=q;q.Cj=[];d=Bs.createElement("m");d._="EN";d.BW=\'<m BM=dpTitle><m x="C3 NavImgll"><L DJ="###"></L></m><m x="C3 NavImgl"><L DJ="###"></L></m><m y="CF:Bz"><m x="CX MMenu"></m><BJ x=Da></m><m y="CF:Bz"><m x="CX YMenu"></m><BJ x=Da></m><m x="C3 NavImgrr"><L DJ="###"></L></m><m x="C3 NavImgr"><L DJ="###"></L></m><m y="CF:EZ"></m></m><m y="position:absolute;overflow:hidden"></m><m></m><m BM=dpTime><m x="CX hhMenu"></m><m x="CX mmMenu"></m><m x="CX ssMenu"></m><BC B_=U B5=U B3=U><i><h rowspan=W><Dt BM=dpTimeStr></Dt>&Dw;<BJ x=tB ED=W><BJ 1=":" x=Fc Ek><BJ x=Fi ED=W><BJ 1=":" x=Fc Ek><BJ x=Fi ED=W></h><h><BU BM=dpTimeUp></BU></h></i><i><h><BU BM=dpTimeDown></BU></h></i></BC></m><m BM=dpQS></m><m BM=dpControl><BJ x=Dc BM=dpClearInput DC=BU><BJ x=Dc BM=dpTodayInput DC=BU><BJ x=Dc BM=dpOkInput DC=BU></m>\';GC(d,9(){C5();});c();j.Bb=[Bs,d.BV,d.BA,d.CT,d.DF,d.DR,d.CR,d.Bp,d.Bc];p(l A=U;A<j.Bb.5;A++){l B=j.Bb[A];B.Ct=A==j.Bb.5-V?j.Bb[V]:j.Bb[A+V];j.C8(B,"EP",EK);}q.Fj();b();EJ("T,K,H,Q,S");d.EW.7=9(){EI(V);};d.Es.7=9(){EI(-V);};d.EO.7=9(){e(d.BK.y.CM!="F5"){f.EC();DG(d.BK);}r{v(d.BK);}};Bs.En.EV(d);9 c(){l b=c("L");w=c("m"),BX=c("BJ"),EM=c("BU"),FS=c("Dt");d.DW=b[U];d.Cx=b[V];d.DX=b[X];d.DA=b[W];d.DE=w[a];d.BV=BX[U];d.BA=BX[V];d.D1=w[U];d.C7=w[BL];d.Cb=w[BQ];d.BK=w[B9];d.Cg=w[EA];d.Cv=w[Cf];d.Eg=w[FX];d.FG=w[14];d.Fr=w[D$];d.EO=w[16];d.C0=w[17];d.CT=BX[W];d.DF=BX[BL];d.DR=BX[BQ];d.CR=BX[Z];d.Bp=BX[Dh];d.Bc=BX[a];d.EW=EM[U];d.Es=EM[V];d.Fx=FS[U];9 c(c){4 d.Dj(c);}}9 b(){d.DW.7=9(){BS=BS<=U?BS-V:-V;e(BS%Y==U){d.BA.Bw();4;}d.BA.1=k.T-V;d.BA.CK();};d.Cx.7=9(){k.B4("K",-V);d.BV.CK();};d.DX.7=9(){k.B4("K",V);d.BV.CK();};d.DA.7=9(){BS=BS>=U?BS+V:V;e(BS%Y==U){d.BA.Bw();4;}d.BA.1=k.T+V;d.BA.CK();};}}EX.Co={Fj:9(){BS=U;j.cal=q;e(j.Cz&&j.g.Cz!=u){j.g.Cz=s;j.g.D6();}c();q.FC();k=q.E2=o BN();BI=o BN();BF=q.B8=o BN();q.Bl=q.CW(j.Bl);q.CL=j.CL==u?(j.n.Bu&&j.n.Bu?2:s):j.CL;j.CD=j.CD==u?(j.D4&&j.n.N?2:s):j.CD;q.D8=q.Cs("disabledDates");q.FK=q.Cs("disabledDays");q.E$=q.Cs("specialDates");q.Fk=q.Cs("specialDays");q.Bd=q.DB(j.Bd,j.Bd!=j.Eq?j.Bk:j.CY,j.Eq);q.Bh=q.DB(j.Bh,j.Bh!=j.GB?j.Bk:j.CY,j.GB);e(q.Bd.By(q.Bh)>U){j.EE=0.err_1;}e(q.Ba()){q.Ep();q.CH=j.g[j.BH];}r{q.Bx(2,W);}Dz(k);d.Fx.BW=0.timeStr;d.CR.1=0.clearStr;d.Bp.1=0.todayStr;d.Bc.1=0.okStr;d.Bc.BT=!f.BB(BF);q.Ef();q.E5();e(j.EE){alert(j.EE);}q.EL();e(j.g.FZ==V&&j.g.D5===EH){j.C8(j.g,"EP",EK);}f.$=j.g;C5();9 c(){l b,c;p(b=U;(c=Bs.Dj("link")[b]);b++){e(c.rel.8("y")!=-V&&c.F6){c.BT=s;e(c.F6==j.skin){c.BT=2;}}}}},Ep:9(){l b=q.CE();e(b!=U){l c;e(b>U){c=q.Bh;}r{c=q.Bd;}e(j.n.DO){k.T=c.T;k.K=c.K;k.N=c.N;}e(j.n.Bu){k.H=c.H;k.Q=c.Q;k.S=c.S;}}},C2:9(K,F,Ee,b,D,B,A,Ed,G){l E;e(K&&K.Ba){E=K;}r{E=o BN();e(K!=""){F=F||j.Bl;l J,Dk=U,I,C=/C9|Cu|Db|T|CC|Ce|Dy|K|Bm|N|%CV|FA|H|E9|Q|Ff|S|CG|D|FY|Cy|Dl/BR,CI=F.ES(C);C.DL=U;e(G){I=K.D9(/\\Cy+/);}r{l c=U,H="^";DH((I=C.DP(F))!==u){e(c>=U){H+=F.Ca(c,I.DN);}c=I.DN-c;c=C.DL;Cp(I[U]){t"C9":H+="(\\\\N{BL})";z;t"Cu":H+="(\\\\N{X})";z;t"CC":t"Ce":t"CG":t"D":H+="(\\\\D+)";z;F$:H+="(\\\\N\\\\N?)";z;}}H+=".*c";I=o Dd(H).DP(K);Dk=V;}e(I){p(J=U;J<CI.5;J++){l BD=I[J+Dk];e(BD){Cp(CI[J]){t"CC":t"Ce":E.K=BE(CI[J],BD);z;t"T":t"Db":BD=CO(BD,U);e(BD<50){BD+=Em;}r{BD+=1900;}E.T=BD;z;t"Cu":E.T=CO(BD,U)+j.E4;z;F$:E[CI[J].EB(-V)]=BD;z;}}}}r{E.N=32;}}}E.FH(Ee,b,D,B,A,Ed);4 E;9 BE(c,A){l B=c=="CC"?0.FN:0.B2;p(l b=U;b<Cf;b++){e(B[b].Ea()==A.substr(U,B[b].5).Ea()){4 b+V;}}4-V;}},Cs:9(B){l A,b=j[B],c="(?:";e(b){p(A=U;A<b.5;A++){c+=q.CW(b[A]);e(A!=b.5-V){c+="|";}}c=o Dd(c+")");}r{c=u;}4 c;},B1:9(){l c=q.Dm();e(j.g[j.BH]!=c){j.g[j.BH]=c;}q.C$();},C$:9(c){l b=j.c(j.vel),c=Cl(c,q.Dm(j.Bk));e(b){b.1=c;}j.g.DU=c;},CW:9(S){l DT="Ck",BP,B7,Fq=/#?\\{(.*?)\\}/;S=S+"";p(l O=U;O<DT.5;O++){S=S.6("%"+DT.CZ(O),q.Bf(DT.CZ(O),u,BI));}e(S.Ca(U,X)=="#F{"){S=S.Ca(X,S.5-V);e(S.8("4 ")<U){S="4 "+S;}S=j.win.Cc(\'o Function("\'+S+\'");\');S=S();}r{DH((BP=Fq.DP(S))!=u){BP.DL=BP.DN+BP[V].5+BP[U].5-BP[V].5-V;B7=Cn(Cc(BP[V]));e(B7<U){B7="Bt"+(-B7);}S=S.Ca(U,BP.DN)+B7+S.Ca(BP.DL+V);}}4 S;},DB:9(c,A,B){l b;c=q.CW(c);e(!c||c==""){c=B;}e(typeof c=="object"){b=c;}r{b=q.C2(c,A,u,u,V,U,U,U,s);b.T=(""+b.T).6(/^Bt/,"-");b.K=(""+b.K).6(/^Bt/,"-");b.N=(""+b.N).6(/^Bt/,"-");b.H=(""+b.H).6(/^Bt/,"-");b.Q=(""+b.Q).6(/^Bt/,"-");b.S=(""+b.S).6(/^Bt/,"-");e(c.8("%CV")>=U){c=c.6(/%CV/BR,"U");b.N=U;b.K=Cn(b.K)+V;}b.Be();}4 b;},Ba:9(){l A,b;e(j.alwaysUseStartDate||(j.Eb!=""&&j.g[j.BH]=="")){A=q.CW(j.Eb);b=j.Bk;}r{A=j.g[j.BH];b=q.Bl;}k.CA(q.C2(A,b));e(A!=""){l c=V;e(j.n.DO&&!q.EQ(k)){k.T=BI.T;k.K=BI.K;k.N=BI.N;c=U;}e(j.n.Bu&&!q.Do(k)){k.H=BI.H;k.Q=BI.Q;k.S=BI.S;c=U;}4 c&&q.BB(k);}4 V;},EQ:9(c){e(c.T!=u){c=CQ(c.T,BL)+"-"+c.K+"-"+c.N;}4 c.ES(/^((\\N{W}(([Et][048])|([E6][26]))[\\-\\/\\S]?((((U?[E8])|(V[Fb]))[\\-\\/\\S]?((U?[V-a])|([V-W][U-a])|(X[Fa])))|(((U?[Ev])|(EA))[\\-\\/\\S]?((U?[V-a])|([V-W][U-a])|(Cd)))|(U?W[\\-\\/\\S]?((U?[V-a])|([V-W][U-a])))))|(\\N{W}(([Et][1235679])|([E6][01345789]))[\\-\\/\\S]?((((U?[E8])|(V[Fb]))[\\-\\/\\S]?((U?[V-a])|([V-W][U-a])|(X[Fa])))|(((U?[Ev])|(EA))[\\-\\/\\S]?((U?[V-a])|([V-W][U-a])|(Cd)))|(U?W[\\-\\/\\S]?((U?[V-a])|(V[U-a])|(W[U-Dh]))))))(\\S(((U?[U-a])|([V-W][U-X]))\\:([U-Y]?[U-a])((\\S)|(\\:([U-Y]?[U-a])))))?c/);},Do:9(c){e(c.H!=u){c=c.H+":"+c.Q+":"+c.S;}4 c.ES(/^([U-a]|([U-V][U-a])|([W][U-X])):([U-a]|([U-Y][U-a])):([U-a]|([U-Y][U-a]))c/);},CE:9(b,c){b=b||k;l A=b.By(q.Bd,c);e(A>U){A=b.By(q.Bh,c);e(A<U){A=U;}}4 A;},BB:9(A,c,b){c=c||j.n.Cw;l B=q.CE(A,c);e(B==U){B=V;e(c=="N"&&b==u){b=o BO(A.T,A.K-V,A.N).Bi();}B=!q.E3(b)&&!q.Fe(A);}r{B=U;}4 B;},FT:9(){l A=j.g,c=q,b=j.g[j.BH];e(b!=u){e(b!=""&&!j.Cz){c.B8.CA(c.C2(b,c.Bl));}e(b==""||(c.EQ(c.B8)&&c.Do(c.B8)&&c.BB(c.B8))){e(b!=""){c.E2.CA(c.B8);c.B1();}r{c.C$("");}}r{4 2;}}4 s;},Dp:9(c){C5();e(q.FT()){q.Bx(s);j.v();}r{e(c){DM(c);q.Bx(2,W);j.Bj();}r{q.Bx(2);}}},C4:9(){l b,F,c,I,C,G=o B$(),A=0.F9,B=j.F8,H="",E="",J=o BN(k.T,k.K,k.N,U,U,U),BE=J.T,D=J.K;C=V-o BO(BE,D-V,V).Bi()+B;e(C>V){C-=Z;}G.L("<BC x=F4 Cm=Cr% B3=U B_=U B5=U>");G.L("<i x=E7 Dr=F1>");e(j.Fg){G.L("<h>"+A[U]+"</h>");}p(b=U;b<Z;b++){G.L("<h>"+A[(B+b)%Z+V]+"</h>");}G.L("</i>");p(b=V,F=C;b<Z;b++){G.L("<i>");p(c=U;c<Z;c++){J.Ba(BE,D,F++);J.Be();e(J.K==D){I=s;e(J.By(BF,"N")==U){H="Wselday";}r{e(J.By(BI,"N")==U){H="Wtoday";}r{H=(j.Eu&&(U==(B+c)%Z||BQ==(B+c)%Z)?"Wwday":"Wday");}}E=(j.Eu&&(U==(B+c)%Z||BQ==(B+c)%Z)?"WwdayOn":"WdayOn");}r{e(j.Ew){I=s;H="WotherDay";E="WotherDayOn";}r{I=2;}}e(j.Fg&&c==U&&(b<BL||I)){G.L("<h x=Wweek>"+Dx(J,j.F8==U?V:U)+"</h>");}G.L("<h ");e(I){e(q.BB(J,"N",c)){e(q.FV(o BO(J.T,J.K-V,J.N).Bi())||q.F0(J)){H="WspecialDay";}G.L(\'7="CP(\'+J.T+","+J.K+","+J.N+\');" \');G.L("CB=\\"q._=\'"+E+"\'\\" ");G.L("B0=\\"q._=\'"+H+"\'\\" ");}r{H="WinvalidDay";}G.L("x="+H);G.L(">"+J.N+"</h>");}r{G.L("></h>");}}G.L("</i>");}G.L("</BC>");4 G.P();},Fe:9(b){l c=q.D3(b,q.D8);4(q.D8&&j.Fo)?!c:c;},E3:9(c){4 q.D2(c,q.FK);},F0:9(c){4 q.D3(c,q.E$,V);},FV:9(c){4 q.D2(c,q.Fk,V);},D3:9(c,b){4 b?b.Fz(q.DI(j.Bk,c)):U;},D2:9(b,c){4 c?c.Fz(b):U;},Cq:9(R,M,Dn,Eh,Bv){l S=o B$(),Df=Bv?"Dn"+R:R;E1=k[R];S.L("<BC B_=U B5=X B3=U");p(l O=U;O<Dn;O++){S.L(\'<i CN="CN">\');p(l P=U;P<M;P++){S.L("<h CN ");k[R]=Cc(Eh);e((j.Fo&&q.CE(k,R)==U)||q.BB(k,R)){S.L("x=\'BG\' CB=\\"q._=\'Ci\'\\" B0=\\"q._=\'BG\'\\" C_=\\"");S.L("v(d."+R+"D);d."+Df+"BE.1="+k[R]+";d."+Df+\'BE.D6();"\');}r{S.L("x=\'D0\'");}S.L(">"+(R=="K"?0.B2[k[R]-V]:k[R])+"</h>");}S.L("</i>");}S.L("</BC>");k[R]=E1;4 S.P();},De:9(b,A){e(b){l c=b.offsetLeft;e(Ei){c=b.getBoundingClientRect().Bz;}A.y.Bz=c;}},_fM:9(c){q.De(c,d.C7);d.C7.BW=q.Cq("K",W,BQ,"O+P*BQ+V",c==d.Br);},Dq:9(A,c){l b=o B$();c=Cl(c,k.T-Y);b.L(q.Cq("T",W,Y,c+"+O+P*Y",A==d.B6));b.L("<BC B_=U B5=X B3=U Dr=F1><i><h ");b.L(q.Bd.T<c?"x=\'BG\' CB=\\"q._=\'Ci\'\\" B0=\\"q._=\'BG\'\\" C_=\'e(BZ.Bq)BZ.Bq();BZ.Dg=s;f.Dq(U,"+(c-B9)+")\'":"x=\'D0\'");b.L(">\\u2190</h><h x=\'BG\' CB=\\"q._=\'Ci\'\\" B0=\\"q._=\'BG\'\\" C_=\\"v(d.Cb);d.BA.D6();\\">\\FE</h><h ");b.L(q.Bh.T>c+B9?"x=\'BG\' CB=\\"q._=\'Ci\'\\" B0=\\"q._=\'BG\'\\" C_=\'e(BZ.Bq)BZ.Bq();BZ.Dg=s;f.Dq(U,"+(c+B9)+")\'":"x=\'D0\'");b.L(">\\u2192</h></i></BC>");q.De(A,d.Cb);d.Cb.BW=b.P();},DV:9(c,A,b){d[c+"D"].BW=q.Cq(c,BQ,A,b);},_fH:9(){q.DV("H",BL,"O * BQ + P");},_fm:9(){q.DV("Q",W,"O * Cd + P * Y");},_fs:9(){q.DV("S",V,"P * B9");},EC:9(c){q.Fv();l C=q.Cj,B=C.y,A=o B$();A.L("<BC x=F4 Cm=Cr% Bo=Cr% B3=U B_=U B5=U>");A.L(\'<i x=E7><h><m y="CF:Bz">\'+0.quickStr+"</m>");e(!c){A.L(\'<m y="CF:EZ;cursor:pointer" 7="v(d.BK);">\\FE</m>\');}A.L("</h></i>");p(l b=U;b<C.5;b++){e(C[b]){A.L("<i><h y=\'text-Dr:Bz\' CN=\'CN\' x=\'BG\' CB=\\"q._=\'Ci\'\\" B0=\\"q._=\'BG\'\\" 7=\\"");A.L("CP("+C[b].T+", "+C[b].K+", "+C[b].N+","+C[b].H+","+C[b].Q+","+C[b].S+\');">\');A.L("&Dw;"+q.DI(u,C[b]));A.L("</h></i>");}r{A.L("<i><h x=\'BG\'>&Dw;</h></i>");}}A.L("</BC>");d.BK.BW=A.P();},FC:9(){c(/Dl/);c(/FY|Cy/);c(/CG|D/);c(/C9|Cu|Db|T/);c(/CC|Ce|Dy|K/);c(/Bm|N/);c(/FA|H/);c(/E9|Q/);c(/Ff|S/);j.n.DO=(j.n.T||j.n.K||j.n.N)?s:2;j.n.Bu=(j.n.H||j.n.Q||j.n.S)?s:2;j.CY=j.CY.6(/%BO/,j.GD).6(/%Time/,j.Fp);e(j.n.DO){e(j.n.Bu){j.Bk=j.CY;}r{j.Bk=j.GD;}}r{j.Bk=j.Fp;}9 c(b){l c=(b+"").EB(V,W);j.n[c]=b.DP(j.Bl)?(j.n.Cw=c,s):2;}},Ef:9(){l c=U;j.n.T?(c=V,Bj(d.BA,d.DW,d.DA)):v(d.BA,d.DW,d.DA);j.n.K?(c=V,Bj(d.BV,d.Cx,d.DX)):v(d.BV,d.Cx,d.DX);c?Bj(d.D1):v(d.D1);e(j.n.Bu){Bj(d.Cv);DS(d.CT,j.n.H);DS(d.DF,j.n.Q);DS(d.DR,j.n.S);}r{v(d.Cv);}CS(d.CR,j.E0);CS(d.Bp,j.FI);CS(d.Bc,j.D4);CS(d.EO,(!j.Fy&&j.n.N&&j.qsEnabled));e(j.Fn||!(j.E0||j.FI||j.D4)){v(d.C0);}r{Bj(d.C0);}},Bx:9(B,c){l b=j.g,D=FP?"x":"_";e(B){C(b);}r{e(c==u){c=j.errDealMode;}Cp(c){t U:e(confirm(0.errAlertMsg)){b[j.BH]=q.CH;C(b);}r{A(b);}z;t V:b[j.BH]=q.CH;C(b);z;t W:A(b);z;}}9 C(c){l A=c._;e(A){l b=A.6(/F2/BR,"");e(A!=b){c.FU(D,b);}}}9 A(c){c.FU(D,c._+" F2");}},Bf:9(c,G,E){E=E||BF;l H,F=[c+c,c],b,C=E[c],A=9(c){4 CQ(C,c.5);};Cp(c){t"Dl":C=Bi(E);z;t"D":l B=Bi(E)+V;A=9(c){4 c.5==W?0.aLongWeekStr[B]:0.F9[B];};z;t"Cy":C=Dx(E);z;t"T":F=["C9","Cu","Db","T"];G=G||F[U];A=9(c){4 CQ((c.5<BL)?(c.5<X?E.T%Cr:(E.T+Em-j.E4)%1000):C,c.5);};z;t"K":F=["CC","Ce","Dy","K"];A=9(c){4(c.5==BL)?0.FN[C-V]:(c.5==X)?0.B2[C-V]:CQ(C,c.5);};z;}G=G||c+c;e("Ck".8(c)>-V&&c!="T"&&!j.n[c]){e("Hms".8(c)>-V){C=U;}r{C=V;}}l D=[];p(H=U;H<F.5;H++){b=F[H];e(G.8(b)>=U){D[H]=A(b);G=G.6(b,"{"+H+"}");}}p(H=U;H<D.5;H++){G=G.6(o Dd("\\\\{"+H+"\\\\}","BR"),D[H]);}4 G;},DI:9(D,B){B=B||BF;D=D||q.Bl;e(D.8("%CV")>=U){l b=o BN();b.CA(B);b.N=U;b.K=Cn(b.K)+V;b.Be();D=D.6(/%CV/BR,b.N);}l A="ydHmswW";p(l c=U;c<A.5;c++){l C=A.CZ(c);D=q.Bf(C,D,B);}e(j.n.D){D=D.6(/CG/BR,"%Bm").6(/D/BR,"%N");D=q.Bf("K",D,B);D=D.6(/\\%Bm/BR,q.Bf("D","CG")).6(/\\%N/BR,q.Bf("D","D"));}r{D=q.Bf("K",D,B);}4 D;},getNewP:9(b,c){4 q.Bf(b,c,k);},Dm:9(c){4 q.DI(c,k);},EL:9(){d.DE.BW="";e(j.Fy){f.CL=s;j.Ew=2;d._="EN WdateDiv2";l c=o B$();c.L("<BC x=WdayTable2 Cm=Cr% B_=U B5=U B3=V><i><h Ex=Fs>");c.L(q.C4());c.L("</h><h Ex=Fs>");k.B4("K",V);c.L(q.C4());d.Br=d.BV.FJ(s);d.B6=d.BA.FJ(s);d.DE.EV(d.Br);d.DE.EV(d.B6);d.Br.1=0.B2[k.K-V];d.Br.DU=k.K;d.B6.1=k.T;EJ("Fu,Fl");d.Br._=d.B6._="Da";k.B4("K",-V);c.L("</h></i></BC>");d.Cg.BW=c.P();}r{d._="EN";d.Cg.BW=q.C4();}e(!j.n.N){q.EC(s);DG(d.BK);}r{v(d.BK);}q.FB();},FB:9(){l C=parent.Bs.Dj("iframe");p(l B=U;B<C.5;B++){l A=d.y.Bo;d.y.Bo="";l c=d.CJ;e(C[B].contentWindow==GA&&c){C[B].y.Cm=d.FM+"Fw";l b=d.Cv.CJ;e(b&&d.C0.y.CM=="DD"&&d.Cv.y.CM!="DD"&&Bs.En.scrollHeight-c>=b){c+=b;d.y.Bo=c;}r{d.y.Bo=A;}C[B].y.Bo=D7.max(c,d.CJ)+"Fw";}}d.BK.y.Cm=d.Cg.FM;d.BK.y.Bo=d.Cg.CJ;},Di:9(){k.N=D7.min(o BO(k.T,k.K,U).CU(),k.N);q.B1();e(!j.Fn){e(q.BB(k)){f.Bx(s);j.g.D5=s;j.g.Bw();v(j.Bm);}r{f.Bx(2);}}e(j.Ec){Bn("Ec");}r{e(q.CH!=j.g[j.BH]&&j.g.GE){DK(j.g,"Eo");}}},E5:9(){d.CR.7=9(){e(!Bn("onclearing")){j.g[j.BH]="";f.C$("");j.g.D5=s;j.g.Bw();v(j.Bm);e(j.F3){Bn("F3");}r{e(f.CH!=j.g[j.BH]&&j.g.GE){DK(j.g,"Eo");}}}};d.Bc.7=9(){CP();};e(q.BB(BI)){d.Bp.BT=2;d.Bp.7=9(){k.CA(BI);CP();};}r{d.Bp.BT=s;}},Fv:9(){l H,B,C,A,F=[],E=Y,b=j.FF.5,G=j.n.Cw;e(b>E){b=E;}r{e(G=="Q"||G=="S"){F=[U,D$,Cd,Ft,Fm,-60,-Ft,-Cd,-D$,-V];}r{p(H=U;H<E*W;H++){F[H]=k[G]-E+V+H;}}}p(H=B=U;H<b;H++){C=q.DB(j.FF[H]);e(q.BB(C)){q.Cj[B++]=C;}}l D="Ck",c=[V,V,V,U,U,U];p(H=U;H<=D.8(G);H++){c[H]=k[D.CZ(H)];}p(H=U;B<E;H++){e(H<F.5){C=o BN(c[U],c[V],c[W],c[X],c[BL],c[Y]);C[G]=F[H];C.Be();e(q.BB(C)){q.Cj[B++]=C;}}r{q.Cj[B++]=u;}}}};9 B$(){q.S=o Array();q.O=U;q.L=9(c){q.S[q.O++]=c;};q.P=9(){4 q.S.join("");};}9 Dx(A,b){b=b||U;l B=o BO(A.T,A.K-V,A.N+b);B.GF(B.CU()-(B.Bi()+BQ)%Z+j.whichDayIsfirstWeek-V);l c=B.F7();B.setMonth(U);B.GF(BL);4 D7.round((c-B.F7())/(Z*86400000))+V;}9 Bi(c){l b=o BO(c.T,c.K-V,c.N);4 b.Bi();}9 Bj(){DZ(Ch,"");}9 DG(){DZ(Ch,"F5");}9 v(){DZ(Ch,"DD");}9 DZ(b,c){p(O=U;O<b.5;O++){b[O].y.CM=c;}}9 CS(b,c){c?Bj(b):v(b);}9 DS(b,c){e(c){b.BT=2;}r{b.BT=s;b.1="00";}}9 M(R,BY){e(R=="K"){BY=C1(BY,V,Cf);}r{e(R=="H"){BY=C1(BY,U,23);}r{e("ms".8(R)>=U){BY=C1(BY,U,Fm);}}}e(BF[R]!=BY&&!Bn(R+"changing")){l F_=\'Bg("\'+R+\'",\'+BY+")",DQ=f.CE();e(DQ==U){Cc(F_);}r{e(DQ<U){EU(f.Bd);}r{e(DQ>U){EU(f.Bh);}}}d.Bc.BT=!f.BB(BF);e("yMd".8(R)>=U){f.EL();}Bn(R+"changed");}9 EU(c){Dz(f.BB(c)?c:BF);}}9 Dz(c){Bg("T",c.T);Bg("K",c.K);Bg("N",c.N);Bg("H",c.H);Bg("Q",c.Q);Bg("S",c.S);}9 CP(A,D,F,c,E,B){l C=o BN(k.T,k.K,k.N,k.H,k.Q,k.S);k.Ba(A,D,F,c,E,B);e(!Bn("onpicking")){l b=C.T==A&&C.K==D&&C.N==F;e(!b&&Ch.5!=U){M("T",A);M("K",D);M("N",F);f.$=j.g;e(j.CD){f.B1();}}e(f.CL||b||Ch.5==U){f.Di();}}r{k=C;}}9 Bn(c){l b;e(j[c]){b=j[c].ET(j.g,j);}4 b;}9 Bg(b,c){e(c==u){c=k[b];}BF[b]=k[b]=c;e("yHms".8(b)>=U){d[b+"BE"].1=c;}e(b=="K"){d.BV.DU=c;d.BV.1=0.B2[c-V];}}9 C1(A,b,c){e(A<b){A=b;}r{e(A>c){A=c;}}4 A;}9 GC(c,b){c.C8("EP",9(){l A=BZ,c=(A.Dv==EH)?A.EG:A.Dv;e(c==a){b();}});}9 CQ(c,b){c=c+"";DH(c.5<b){c="U"+c;}4 c;}9 C5(){v(d.Cb,d.C7,d.Eg,d.FG,d.Fr);}9 EI(c){e(f.$==EH){f.$=d.CT;}Cp(f.$){t d.CT:M("H",k.H+c);z;t d.DF:M("Q",k.Q+c);z;t d.DR:M("S",k.S+c);z;}e(j.CD){f.B1();}}9 BN(c,b,B,C,A,D){q.Ba(c,b,B,C,A,D);}BN.Co={Ba:9(b,C,E,c,D,A){l B=o BO();q.T=3(b,q.T,B.EF());q.K=3(C,q.K,B.ER()+V);q.N=j.n.N?3(E,q.N,B.CU()):V;q.H=3(c,q.H,B.Du());q.Q=3(D,q.Q,B.Ds());q.S=3(A,q.S,B.D_());},CA:9(c){e(c){q.Ba(c.T,c.K,c.N,c.H,c.Q,c.S);}},FH:9(b,C,E,c,D,A){l B=o BO();q.T=3(q.T,b,B.EF());q.K=3(q.K,C,B.ER()+V);q.N=j.n.N?3(q.N,E,B.CU()):V;q.H=3(q.H,c,B.Du());q.Q=3(q.Q,D,B.Ds());q.S=3(q.S,A,B.D_());},By:9(B,C){l b="Ck",D,A;C=b.8(C);C=C>=U?C:Y;p(l c=U;c<=C;c++){A=b.CZ(c);D=q[A]-B[A];e(D>U){4 V;}r{e(D<U){4-V;}}}4 U;},Be:9(){l c=o BO(q.T,q.K-V,q.N,q.H,q.Q,q.S);q.T=c.EF();q.K=c.ER()+V;q.N=c.CU();q.H=c.Du();q.Q=c.Ds();q.S=c.D_();4!FW(q.T);},B4:9(A,b){e("Ck".8(A)>=U){l c=q.N;e(A=="K"){q.N=V;}q[A]+=b;q.Be();q.N=c;}}};9 Cn(c){4 parseInt(c,B9);}9 CO(c,b){4 Cl(Cn(c),b);}9 3(b,c,A){4 CO(b,Cl(c,A));}9 Cl(c,b){4 c==u||FW(c)?b:c;}9 DK(c,b){e(Ei){c.DK("Ez"+b);}r{l A=Bs.createEvent("HTMLEvents");A.initEvent(b,s,s);c.dispatchEvent(A);}}9 DY(A){l c,b,B="T,K,H,Q,S,Fl,Fu".D9(",");p(b=U;b<B.5;b++){c=B[b];e(d[c+"BE"]==A){4 c.EB(c.5-V,c.5);}}4 U;}9 Er(c){l b=DY(q);e(!b){4;}f.$=q;e(b=="T"){q._="E_";}r{e(b=="K"){q._="E_";q.1=q["DU"];}}q.Fh();f["Cq"+b](q);DG(d[b+"D"]);}9 C6(EY){l R=DY(q),Bv,Ej=q.1,Ey=k[R];e(R==U){4;}k[R]=CO(Ej,k[R]);e(R=="T"){Bv=q==d.B6;e(Bv&&k.K==Cf){k.T-=V;}}r{e(R=="K"){Bv=q==d.Br;e(Bv){e(Ey==Cf){k.T+=V;}k.B4("K",-V);}e(BF.K==k.K){q.1=0.B2[k[R]-V];}e((BF.T!=k.T)){M("T",k.T);}}}Cc(\'M("\'+R+\'",\'+k[R]+")");e(EY!==s){e(R=="T"||R=="K"){q._="Da";}v(d[R+"D"]);}e(j.CD){f.B1();}}9 DM(c){e(c.Bq){c.Bq();c.stopPropagation();}r{c.Dg=s;c.Fd=2;}e($OPERA){c.EG=U;}}9 EJ(A){l c=A.D9(",");p(l b=U;b<c.5;b++){l B=c[b]+"BE";d[B].onfocus=Er;d[B].CK=C6;}}9 EK(B){l A=B.FL||B.GG,C=B.Dv||B.EG;e(j.enableKeyboard){e(!A.Ct){A.Ct=j.Bb[V];f.$=j.g;}e(A==j.g){f.$=j.g;}e(C==27){e(A==j.g){f.Dp();4;}r{j.g.Bw();}}e(C>=FQ&&C<=40){l b;e(f.$==j.g||f.$==d.Bc){e(j.n.N){b="N";e(C==FR){k[b]-=Z;}r{e(C==FO){k[b]+=V;}r{e(C==FQ){k[b]-=V;}r{k[b]+=Z;}}}k.Be();M("T",k.T);M("K",k.K);M("N",k[b]);DM(B);4;}r{b=j.n.Cw;d[b+"BE"].Bw();}}b=b||DY(f.$);e(b){e(C==FR||C==FO){k[b]+=V;}r{k[b]-=V;}k.Be();f.$.1=k[b];C6.ET(f.$,s);f.$.Fh();}}r{e(f.$==j.g&&j.Bm.y.CM=="DD"){4;}e(C==a){l D=A.Ct;p(l c=U;c<j.Bb.5;c++){e(D.BT==s||D.CJ==U){D=D.Ct;}r{z;}}e(f.$!=D){f.$=D;D.Bw();}}r{e(C==FX){C6.ET(f.$);e(f.$.DC=="BU"){f.$.click();}r{f.Di();}f.$=j.g;}}}}r{e(C==a&&A==j.g){f.Dp();}}e(f.$!=j.g&&!((C>=48&&C<=57)||(C>=96&&C<=105)||C==Dh||C==46)){DM(B);}}','J|K|M|a|c|d|i|j|m|p|s|y|0|1|2|3|5|7|9|_|$|$d|if|$c|el|td|tr|$dp|$dt|var|div|has|new|for|this|else|true|case|null|hide|divs|class|style|break|$lang|value|false|pInt3|return|length|replace|onclick|indexOf|function|className|currFocus|yI|checkValid|table|L|I|$sdt|menu|elProp|$tdt|input|qsDivSel|4|id|DPDate|Date|arr|6|g|$ny|disabled|button|MI|innerHTML|ipts|pv|event|loadDate|focusArr|okI|minDate|refresh|getP|sv|maxDate|getDay|show|realFmt|dateFmt|dd|callFunc|height|todayI|preventDefault|rMI|document|9700|st|isR|focus|mark|compareWith|left|onmouseout|update|aMonStr|border|attr|cellpadding|ryI|tmpEval|date|10|cellspacing|sb|loadFromDate|onmouseover|MMMM|autoUpdateOnChanged|checkRange|float|DD|oldValue|Q|offsetHeight|onblur|autoPickDate|display|nowrap|pInt2|day_Click|doStr|clearI|shorH|HI|getDate|ld|doExp|menuSel|realFullFmt|charAt|substring|yD|eval|30|MMM|12|dDiv|arguments|menuOn|QS|yMdHms|rtn|width|pInt|prototype|switch|_f|100|_initRe|nextCtrl|yyy|tDiv|minUnit|leftImg|W|readOnly|bDiv|makeInRange|splitDate|navImg|_fd|hideSel|_blur|MD|attachEvent|yyyy|onmousedown|setRealValue|navRightImg|doCustomDate|type|none|rMD|mI|showB|while|getDateStr|href|fireEvent|lastIndex|_cancelKey|index|sd|exec|rv|sI|disHMS|ps|realValue|_fHMS|navLeftImg|rightImg|_foundInput|setDisp|yminput|yy|dpButton|RegExp|_fMyPos|fp|cancelBubble|8|pickDate|getElementsByTagName|P|w|getNewDateStr|r|isTime|close|_fy|align|getMinutes|span|getHours|which|nbsp|getWeek|MM|_setAll|invalidMenu|titleDiv|testDay|testDate|isShowOK|My97Mark|blur|Math|ddateRe|split|getSeconds|15|11|slice|_fillQS|maxlength|errMsg|getFullYear|keyCode|undefined|updownEvent|_inputBindEvent|_tab|draw|btns|WdateDiv|qsDiv|onkeydown|isDate|getMonth|match|call|_setFrom|appendChild|upButton|My97DP|showDiv|right|toLowerCase|startDate|onpicked|N|O|initShowAndHide|HD|e|$IE|v|readonly|_ieEmuEventHandler|2000|body|change|_makeDateInRange|defMinDate|_focus|downButton|02468|highLineWeekDay|469|isShowOthers|valign|oldv|on|isShowClear|bak|newdate|testDisDay|yearOffset|initBtn|13579|MTitle|13578|mm|yminputfocus|sdateRe|HH|autoSize|_dealFmt|Event|xd7|quickSel|mD|coverDate|isShowToday|cloneNode|ddayRe|srcElement|offsetWidth|aLongMonStr|39|$FF|37|38|spans|checkAndUpdate|setAttribute|testSpeDay|isNaN|13|WW|nodeType|01|02|tm|returnValue|testDisDate|ss|isShowWeek|select|tE|init|sdayRe|ry|59|eCont|opposite|realTimeFmt|re|sD|top|45|rM|initQS|px|timeSpan|doubleCalendar|test|testSpeDate|center|WdateFmtErr|oncleared|WdayTable|block|title|valueOf|firstDayOfWeek|aWeekStr|func|default|window|defMaxDate|attachTabEvent|realDateFmt|onchange|setDate|target'.split('|'),383,390,{},{}))
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/config.js
================================================
var langList =
[
{name:'en', charset:'UTF-8'},
{name:'zh-cn', charset:'UTF-8'},
{name:'zh-tw', charset:'UTF-8'}
];
var skinList =
[
{name:'default', charset:'UTF-8'},
{name:'whyGreen', charset:'UTF-8'},
{name:'ext', charset:'UTF-8'}
];
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/lang/en.js
================================================
var $lang={
errAlertMsg: "Invalid date or the date out of range,redo or not?",
aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
aLongWeekStr:["wk","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"],
aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"],
aLongMonStr: ["January","February","March","April","May","June","July","August","September","October","November","December"],
clearStr: "Clear",
todayStr: "Today",
okStr: "OK",
updateStr: "OK",
timeStr: "Time",
quickStr: "Quick Selection",
err_1: 'MinDate Cannot be bigger than MaxDate!'
}
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/lang/zh-cn.js
================================================
var $lang={
errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u8303\u56F4,\u9700\u8981\u64A4\u9500\u5417?",
aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"],
aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],
aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"],
aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"],
clearStr: "\u6E05\u7A7A",
todayStr: "\u4ECA\u5929",
okStr: "\u786E\u5B9A",
updateStr: "\u786E\u5B9A",
timeStr: "\u65F6\u95F4",
quickStr: "\u5FEB\u901F\u9009\u62E9",
err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u4E8E\u6700\u5927\u65E5\u671F!'
}
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/lang/zh-tw.js
================================================
var $lang={
errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u7BC4\u570D,\u9700\u8981\u64A4\u92B7\u55CE?",
aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"],
aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"],
aMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00","\u5341\u4E8C"],
aLongMonStr: ["\u4E00\u6708","\u4E8C\u6708","\u4E09\u6708","\u56DB\u6708","\u4E94\u6708","\u516D\u6708","\u4E03\u6708","\u516B\u6708","\u4E5D\u6708","\u5341\u6708","\u5341\u4E00\u6708","\u5341\u4E8C\u6708"],
clearStr: "\u6E05\u7A7A",
todayStr: "\u4ECA\u5929",
okStr: "\u78BA\u5B9A",
updateStr: "\u78BA\u5B9A",
timeStr: "\u6642\u9593",
quickStr: "\u5FEB\u901F\u9078\u64C7",
err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u65BC\u6700\u5927\u65E5\u671F!'
}
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/skin/WdatePicker.css
================================================
.Wdate{
border:#999 1px solid;
height:20px;
background:#fff url(datePicker.gif) no-repeat right;
}
.WdateFmtErr{
font-weight:bold;
color:red;
}
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/skin/default/datepicker.css
================================================
/*
* My97 DatePicker 4.7
*/
.WdateDiv{
width:180px;
background-color:#FFFFFF;
border:#bbb 1px solid;
padding:2px;
}
.WdateDiv2{
width:360px;
}
.WdateDiv *{font-size:9pt;}
.WdateDiv .NavImg a{
display:block;
cursor:pointer;
height:16px;
width:16px;
}
.WdateDiv .NavImgll a{
float:left;
background:transparent url(img.gif) no-repeat scroll 0 0;
}
.WdateDiv .NavImgl a{
float:left;
background:transparent url(img.gif) no-repeat scroll -16px 0;
}
.WdateDiv .NavImgr a{
float:right;
background:transparent url(img.gif) no-repeat scroll -32px 0;
}
.WdateDiv .NavImgrr a{
float:right;
background:transparent url(img.gif) no-repeat scroll -48px 0;
}
.WdateDiv #dpTitle{
height:24px;
margin-bottom:2px;
padding:1px;
}
.WdateDiv .yminput{
margin-top:2px;
text-align:center;
height:20px;
border:0px;
width:50px;
cursor:pointer;
}
.WdateDiv .yminputfocus{
margin-top:2px;
text-align:center;
font-weight:bold;
height:20px;
color:blue;
border:#ccc 1px solid;
width:50px;
}
.WdateDiv .menuSel{
z-index:1;
position:absolute;
background-color:#FFFFFF;
border:#ccc 1px solid;
display:none;
}
.WdateDiv .menu{
cursor:pointer;
background-color:#fff;
}
.WdateDiv .menuOn{
cursor:pointer;
background-color:#BEEBEE;
}
.WdateDiv .invalidMenu{
color:#aaa;
}
.WdateDiv .YMenu{
margin-top:20px;
}
.WdateDiv .MMenu{
margin-top:20px;
*width:62px;
}
.WdateDiv .hhMenu{
margin-top:-90px;
margin-left:26px;
}
.WdateDiv .mmMenu{
margin-top:-46px;
margin-left:26px;
}
.WdateDiv .ssMenu{
margin-top:-24px;
margin-left:26px;
}
.WdateDiv .Wweek {
text-align:center;
background:#DAF3F5;
border-right:#BDEBEE 1px solid;
}
.WdateDiv .MTitle{
background-color:#BDEBEE;
}
.WdateDiv .WdayTable2{
border-collapse:collapse;
border:#c5d9e8 1px solid;
}
.WdateDiv .WdayTable2 table{
border:0;
}
.WdateDiv .WdayTable{
line-height:20px;
border:#c5d9e8 1px solid;
}
.WdateDiv .WdayTable td{
text-align:center;
}
.WdateDiv .Wday{
cursor:pointer;
}
.WdateDiv .WdayOn{
cursor:pointer;
background-color:#C0EBEF;
}
.WdateDiv .Wwday{
cursor:pointer;
color:#FF2F2F;
}
.WdateDiv .WwdayOn{
cursor:pointer;
color:#000;
background-color:#C0EBEF;
}
.WdateDiv .Wtoday{
cursor:pointer;
color:blue;
}
.WdateDiv .Wselday{
background-color:#A9E4E9;
}
.WdateDiv .WspecialDay{
background-color:#66F4DF;
}
.WdateDiv .WotherDay{
cursor:pointer;
color:#6A6AFF;
}
.WdateDiv .WotherDayOn{
cursor:pointer;
background-color:#C0EBEF;
}
.WdateDiv .WinvalidDay{
color:#aaa;
}
.WdateDiv #dpTime{
float:left;
margin-top:3px;
margin-right:30px;
}
.WdateDiv #dpTime #dpTimeStr{
margin-left:1px;
}
.WdateDiv #dpTime input{
width:18px;
height:20px;
text-align:center;
border:#ccc 1px solid;
}
.WdateDiv #dpTime .tB{
border-right:0px;
}
.WdateDiv #dpTime .tE{
border-left:0;
border-right:0;
}
.WdateDiv #dpTime .tm{
width:7px;
border-left:0;
border-right:0;
}
.WdateDiv #dpTime #dpTimeUp{
height:10px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -32px -16px;
}
.WdateDiv #dpTime #dpTimeDown{
height:10px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -48px -16px;
}
.WdateDiv #dpQS {
float:left;
margin-right:3px;
margin-top:3px;
background:url(img.gif) no-repeat 0px -16px;
width:20px;
height:20px;
cursor:pointer;
}
.WdateDiv #dpControl {
text-align:right;
}
.WdateDiv .dpButton{
height:20px;
width:45px;
border:#ccc 1px solid;
margin-top:2px;
margin-right:1px;
}
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/skin/ext/datepicker.css
================================================
/* ѡ DIV */
.WdateDiv{
width:180px;
background-color:#fff;
border:1px solid #718BB7;
}
/* ˫Ŀ */
.WdateDiv2{
width:360px;
}
.WdateDiv *{font-size:9pt;}
/****************************
* ͼ ȫAǩ
***************************/
.WdateDiv .NavImg a{
margin-top:3px;
cursor:pointer;
display:block;
width:15px;
height:15px;
}
.WdateDiv .NavImgll a{
background:url(left-btn2.gif) no-repeat center center;
float:left;
margin-left:2px;
}
.WdateDiv .NavImgl a{
background:url(left-btn.gif) no-repeat center center;
float:left;
margin-left:2px;
}
.WdateDiv .NavImgr a{
background:url(right-btn.gif) no-repeat center center;
float:right;
margin-right:2px;
}
.WdateDiv .NavImgrr a{
background:url(right-btn2.gif) no-repeat center center;
float:right;
margin-right:2px;
}
/****************************
* ·
***************************/
/* · DIV */
.WdateDiv #dpTitle{
height:22px;
background:transparent url(hd-sprite.gif) repeat-x scroll 0 -83px;
color:#FFFFFF;
font-family:"sans serif",tahoma,verdana,helvetica;
font-size:12px;
font-size-adjust:none;
font-stretch:normal;
font-style:normal;
font-variant:normal;
font-weight:bold;
padding-top:2px;
}
/* · INPUT */
.WdateDiv .yminput{
margin-top:2px;
text-align:center;
border:0px;
height:20px;
width:50px;
color:#FFF;
background-color:transparent;
cursor:pointer;
}
/* ·ýʱʽ INPUT */
.WdateDiv .yminputfocus{
margin-top:2px;
text-align:center;
border:#939393 1px solid;
font-weight:bold;
color:#034c50;
height:16px;
width:50px;
}
/* ˵ѡ DIV */
.WdateDiv .menuSel{
z-index:1;
position:absolute;
background-color:#FFFFFF;
border:1px solid #718BB7;
display:none;
}
/* ˵ʽ TD */
.WdateDiv .menu{
cursor:pointer;
background-color:#fff;
color:#11777C;
}
/* ˵mouseoverʽ TD */
.WdateDiv .menuOn{
cursor:pointer;
background-color: #B3CEEF;
}
/* ˵Чʱʽ TD */
.WdateDiv .invalidMenu{
color:#aaa;
}
/* ѡƫ DIV */
.WdateDiv .YMenu{
margin-top:16px;
}
/* ѡƫ DIV */
.WdateDiv .MMenu{
margin-top:16px;
*width:62px;
}
/* ʱѡλ DIV */
.WdateDiv .hhMenu{
margin-top:-90px;
margin-left:26px;
}
/* ѡλ DIV */
.WdateDiv .mmMenu{
margin-top:-46px;
margin-left:26px;
}
/* ѡλ DIV */
.WdateDiv .ssMenu{
margin-top:-24px;
margin-left:26px;
}
/****************************
*
***************************/
.WdateDiv .Wweek {
text-align:center;
background:#DAF3F5;
border-right:#BDEBEE 1px solid;
}
/****************************
* ,
***************************/
/* TR */
.WdateDiv .MTitle{
color:#233D6D;
background:#DFECFB url(glass-bg.gif) repeat-x scroll left top;
color:#233D6D;
cursor:default;
font-size:10px;
padding-top:2px;
}
.WdateDiv .MTitle td{
border-bottom:1px solid #A3BAD9;
}
.WdateDiv .WdayTable2{
border-collapse:collapse;
border:black 1px solid;
}
.WdateDiv .WdayTable2 table{
border:0;
}
/* TABLE */
.WdateDiv .WdayTable{
line-height:20px;
color:black;
}
.WdateDiv .WdayTable td{
text-align:center;
}
/* ڸʽ TD */
.WdateDiv .Wday{
cursor:pointer;
}
/* ڸmouseoverʽ TD */
.WdateDiv .WdayOn{
cursor:pointer;
background-color:#B3CEEF;
}
/* ĩڸʽ TD */
.WdateDiv .Wwday{
cursor:pointer;
color:#ab1e1e;
}
/* ĩڸmouseoverʽ TD */
.WdateDiv .WwdayOn{
cursor:pointer;
background-color:#B3CEEF;
}
.WdateDiv .Wtoday{
cursor:pointer;
color:red;
}
.WdateDiv .Wselday{
background-color:#B3CEEF;
}
.WdateDiv .WspecialDay{
background-color:#66F4DF;
}
/* ·ݵ */
.WdateDiv .WotherDay{
cursor:pointer;
color:#AAAAAA;
}
/* ·ݵmouseoverʽ */
.WdateDiv .WotherDayOn{
cursor:pointer;
background-color:#B3CEEF;
}
/* Чڵʽ,ڷΧڸʽ,ѡ */
.WdateDiv .WinvalidDay{
color:#aaa;
}
/****************************
* ʱ
***************************/
/* ʱ DIV */
.WdateDiv #dpTime{
width:120px;
text-align:left;
margin-left:32px;
height:20px;
line-height:20px;
padding-top:1px;
}
/* ʱ SPAN */
.WdateDiv #dpTime #dpTimeStr{
margin-left:1px;
color:#233D6D;
}
/* ʱ INPUT */
.WdateDiv #dpTime input{
height:16px;
width:18px;
text-align:center;
color:#333;
border:#A3BAD9 1px solid;
}
/* ʱ ʱ INPUT */
.WdateDiv #dpTime .tB{
border-right:0px;
}
/* ʱ ֺͼ ':' INPUT */
.WdateDiv #dpTime .tE{
border-left:0;
border-right:0;
}
/* ʱ INPUT */
.WdateDiv #dpTime .tm{
width:7px;
border-left:0;
border-right:0;
}
/* ʱұߵϰť BUTTON */
.WdateDiv #dpTime #dpTimeUp{
height:8px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -32px -16px;
cursor:pointer;
margin-bottom:0;
padding-bottom:0;
}
/* ʱұߵ°ť BUTTON */
.WdateDiv #dpTime #dpTimeDown{
height:8px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -48px -16px;
cursor:pointer;
margin-top:0;
padding-top:0;
}
/****************************
*
***************************/
.WdateDiv #dpQS {
float:left;
margin-left:3px;
margin-top:9px;
background:url(dateselect.gif) no-repeat;
width:20px;
height:20px;
cursor:pointer;
}
.WdateDiv #dpControl {
text-align:right;
margin-top:3px;
background:#DFECFB url(glass-bg.gif) repeat-x scroll left top;
border-top:1px solid #A3BAD9;
padding:4px;
}
.WdateDiv .dpButton{
width:44px;
height:22px;
background:#083772 none repeat scroll 0 0;
border-color:#3366CC #000055 #000055 #3366CC;
border-style:solid;
border-width:1px;
color:white;
cursor:pointer;
}
================================================
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/skin/whyGreen/datepicker.css
================================================
/*
* My97 DatePicker 4.7 Skin:whyGreen
*/
.WdateDiv{
width:180px;
background-color:#fff;
border:#C5E1E4 1px solid;
padding:2px;
}
.WdateDiv2{
width:360px;
}
.WdateDiv *{font-size:9pt;}
.WdateDiv .NavImg a{
cursor:pointer;
display:block;
width:16px;
height:16px;
margin-top:1px;
}
.WdateDiv .NavImgll a{
float:left;
background:url(img.gif) no-repeat;
}
.WdateDiv .NavImgl a{
float:left;
background:url(img.gif) no-repeat -16px 0px;
}
.WdateDiv .NavImgr a{
float:right;
background:url(img.gif) no-repeat -32px 0px;
}
.WdateDiv .NavImgrr a{
float:right;
background:url(img.gif) no-repeat -48px 0px;
}
.WdateDiv #dpTitle{
height:24px;
padding:1px;
border:#c5d9e8 1px solid;
background:url(bg.jpg);
margin-bottom:2px;
}
.WdateDiv .yminput{
margin-top:2px;
text-align:center;
border:0px;
height:20px;
width:50px;
color:#034c50;
background-color:transparent;
cursor:pointer;
}
.WdateDiv .yminputfocus{
margin-top:2px;
text-align:center;
border:#939393 1px solid;
font-weight:bold;
color:#034c50;
height:20px;
width:50px;
}
.WdateDiv .menuSel{
z-index:1;
position:absolute;
background-color:#FFFFFF;
border:#A3C6C8 1px solid;
display:none;
}
.WdateDiv .menu{
cursor:pointer;
background-color:#fff;
color:#11777C;
}
.WdateDiv .menuOn{
cursor:pointer;
background-color:#BEEBEE;
}
.WdateDiv .invalidMenu{
color:#aaa;
}
.WdateDiv .YMenu{
margin-top:20px;
}
.WdateDiv .MMenu{
margin-top:20px;
*width:62px;
}
.WdateDiv .hhMenu{
margin-top:-90px;
margin-left:26px;
}
.WdateDiv .mmMenu{
margin-top:-46px;
margin-left:26px;
}
.WdateDiv .ssMenu{
margin-top:-24px;
margin-left:26px;
}
.WdateDiv .Wweek {
text-align:center;
background:#DAF3F5;
border-right:#BDEBEE 1px solid;
}
.WdateDiv .MTitle{
color:#13777e;
background-color:#bdebee;
}
.WdateDiv .WdayTable2{
border-collapse:collapse;
border:#BEE9F0 1px solid;
}
.WdateDiv .WdayTable2 table{
border:0;
}
.WdateDiv .WdayTable{
line-height:20px;
color:#13777e;
background-color:#edfbfb;
border:#BEE9F0 1px solid;
}
.WdateDiv .WdayTable td{
text-align:center;
}
.WdateDiv .Wday{
cursor:pointer;
}
.WdateDiv .WdayOn{
cursor:pointer;
background-color:#74d2d9 ;
}
.WdateDiv .Wwday{
cursor:pointer;
color:#ab1e1e;
}
.WdateDiv .WwdayOn{
cursor:pointer;
background-color:#74d2d9;
}
.WdateDiv .Wtoday{
cursor:pointer;
color:blue;
}
.WdateDiv .Wselday{
background-color:#A7E2E7;
}
.WdateDiv .WspecialDay{
background-color:#66F4DF;
}
.WdateDiv .WotherDay{
cursor:pointer;
color:#0099CC;
}
.WdateDiv .WotherDayOn{
cursor:pointer;
background-color:#C0EBEF;
}
.WdateDiv .WinvalidDay{
color:#aaa;
}
.WdateDiv #dpTime{
float:left;
margin-top:3px;
margin-right:30px;
}
.WdateDiv #dpTime #dpTimeStr{
margin-left:1px;
color:#497F7F;
}
.WdateDiv #dpTime input{
height:20px;
width:18px;
text-align:center;
color:#333;
border:#61CAD0 1px solid;
}
.WdateDiv #dpTime .tB{
border-right:0px;
}
.WdateDiv #dpTime .tE{
border-left:0;
border-right:0;
}
.WdateDiv #dpTime .tm{
width:7px;
border-left:0;
border-right:0;
}
.WdateDiv #dpTime #dpTimeUp{
height:10px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -32px -16px;
}
.WdateDiv #dpTime #dpTimeDown{
height:10px;
width:13px;
border:0px;
background:url(img.gif) no-repeat -48px -16px;
}
.WdateDiv #dpQS {
float:left;
margin-right:3px;
margin-top:3px;
background:url(img.gif) no-repeat 0px -16px;
width:20px;
height:20px;
cursor:pointer;
}
.WdateDiv #dpControl {
text-align:right;
margin-top:3px;
}
.WdateDiv .dpButton{
height:20px;
width:45px;
margin-top:2px;
border:#38B1B9 1px solid;
background-color:#CFEBEE;
color:#08575B;
}
================================================
FILE: clover/clover-admin/src/main/webapp/js/Map.js
================================================
/*
* MAP对象,实现MAP功能
*
* 接口:
* size() 获取MAP元素个数
* isEmpty() 判断MAP是否为空
* clear() 删除MAP所有元素
* put(key, value) 向MAP中增加元素(key, value)
* remove(key) 删除指定KEY的元素,成功返回True,失败返回False
* get(key) 获取指定KEY的元素值VALUE,失败返回NULL
* element(index) 获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
* containsKey(key) 判断MAP中是否含有指定KEY的元素
* containsValue(value) 判断MAP中是否含有指定VALUE的元素
* values() 获取MAP中所有VALUE的数组(ARRAY)
* keys() 获取MAP中所有KEY的数组(ARRAY)
*
* 例子:
* var map = new Map();
*
* map.put("key", "value");
* var val = map.get("key")
* ……
*
*/
function Map() {
this.elements = new Array();
//获取MAP元素个数
this.size = function() {
return this.elements.length;
};
//判断MAP是否为空
this.isEmpty = function() {
return (this.elements.length < 1);
};
//删除MAP所有元素
this.clear = function() {
this.elements = new Array();
};
//向MAP中增加元素(key, value)
this.put = function(_key, _value) {
this.elements.push( {
key : _key,
value : _value
});
};
//删除指定KEY的元素,成功返回True,失败返回False
this.removeByKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
};
//删除指定VALUE的元素,成功返回True,失败返回False
this.removeByValue = function(_value) {//removeByValueAndKey
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
};
//删除指定VALUE的元素,成功返回True,失败返回False
this.removeByValueAndKey = function(_key,_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && this.elements[i].key == _key) {
this.elements.splice(i, 1);
return true;
}
}
} catch (e) {
bln = false;
}
return bln;
};
//获取指定KEY的元素值VALUE,失败返回NULL
this.get = function(_key) {
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
return this.elements[i].value;
}
}
} catch (e) {
return false;
}
return false;
};
//获取指定索引的元素(使用element.key,element.value获取KEY和VALUE),失败返回NULL
this.element = function(_index) {
if (_index < 0 || _index >= this.elements.length) {
return null;
}
return this.elements[_index];
};
//判断MAP中是否含有指定KEY的元素
this.containsKey = function(_key) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
};
//判断MAP中是否含有指定VALUE的元素
this.containsValue = function(_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
};
//判断MAP中是否含有指定VALUE的元素
this.containsObj = function(_key,_value) {
var bln = false;
try {
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].value == _value && this.elements[i].key == _key) {
bln = true;
}
}
} catch (e) {
bln = false;
}
return bln;
};
//获取MAP中所有VALUE的数组(ARRAY)
this.values = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].value);
}
return arr;
};
//获取MAP中所有VALUE的数组(ARRAY)
this.valuesByKey = function(_key) {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
if (this.elements[i].key == _key) {
arr.push(this.elements[i].value);
}
}
return arr;
};
//获取MAP中所有KEY的数组(ARRAY)
this.keys = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
arr.push(this.elements[i].key);
}
return arr;
};
//获取key通过value
this.keysByValue = function(_value) {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
if(_value == this.elements[i].value){
arr.push(this.elements[i].key);
}
}
return arr;
};
//获取MAP中所有KEY的数组(ARRAY)
this.keysRemoveDuplicate = function() {
var arr = new Array();
for (i = 0; i < this.elements.length; i++) {
var flag = true;
for(var j=0;j<arr.length;j++){
if(arr[j] == this.elements[i].key){
flag = false;
break;
}
}
if(flag){
arr.push(this.elements[i].key);
}
}
return arr;
};
}
================================================
FILE: clover/clover-admin/src/main/webapp/js/bootstrap-popover.js
================================================
/* ===========================================================
* bootstrap-popover.js v2.3.2
* http://twbs.github.com/bootstrap/javascript.html#popovers
* ===========================================================
* Copyright 2013 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* =========================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* POPOVER PUBLIC CLASS DEFINITION
* =============================== */
var Popover = function (element, options) {
this.init('popover', element, options)
}
/* NOTE: POPOVER EXTENDS BOOTSTRAP-TOOLTIP.js
========================================== */
Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype, {
constructor: Popover
, setContent: function () {
var $tip = this.tip()
, title = this.getTitle()
, content = this.getContent()
$tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)
$tip.find('.popover-content')[this.options.html ? 'html' : 'text'](content)
$tip.removeClass('fade top bottom left right in')
}
, hasContent: function () {
return this.getTitle() || this.getContent()
}
, getContent: function () {
var content
, $e = this.$element
, o = this.options
content = (typeof o.content == 'function' ? o.content.call($e[0]) : o.content)
|| $e.attr('data-content')
return content
}
, tip: function () {
if (!this.$tip) {
this.$tip = $(this.options.template)
}
return this.$tip
}
, destroy: function () {
this.hide().$element.off('.' + this.type).removeData(this.type)
}
})
/* POPOVER PLUGIN DEFINITION
* ======================= */
var old = $.fn.popover
$.fn.popover = function (option) {
return this.each(function () {
var $this = $(this)
, data = $this.data('popover')
, options = typeof option == 'object' && option
if (!data) $this.data('popover', (data = new Popover(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.popover.Constructor = Popover
$.fn.popover.defaults = $.extend({} , $.fn.tooltip.defaults, {
placement: 'right'
, trigger: 'click'
, content: ''
, template: '<div class="popover"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'
})
/* POPOVER NO CONFLICT
* =================== */
$.fn.popover.noConflict = function () {
$.fn.popover = old
return this
}
}(window.jQuery);
================================================
FILE: clover/clover-admin/src/main/webapp/js/bootstrap-tooltip.js
================================================
/* ===========================================================
* bootstrap-tooltip.js v2.3.2
* http://twbs.github.com/bootstrap/javascript.html#tooltips
* Inspired by the original jQuery.tipsy by Jason Frame
* ===========================================================
* Copyright 2013 Twitter, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
* ========================================================== */
!function ($) {
"use strict"; // jshint ;_;
/* TOOLTIP PUBLIC CLASS DEFINITION
* =============================== */
var Tooltip = function (element, options) {
this.init('tooltip', element, options)
}
Tooltip.prototype = {
constructor: Tooltip
, init: function (type, element, options) {
var eventIn
, eventOut
, triggers
, trigger
, i
this.type = type
this.$element = $(element)
this.options = this.getOptions(options)
this.enabled = true
triggers = this.options.trigger.split(' ')
for (i = triggers.length; i--;) {
trigger = triggers[i]
if (trigger == 'click') {
this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))
} else if (trigger != 'manual') {
eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'
eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'
this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))
this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))
}
}
this.options.selector ?
(this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :
this.fixTitle()
}
, getOptions: function (options) {
options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)
if (options.delay && typeof options.delay == 'number') {
options.delay = {
show: options.delay
, hide: options.delay
}
}
return options
}
, enter: function (e) {
var defaults = $.fn[this.type].defaults
, options = {}
, self
this._options && $.each(this._options, function (key, value) {
if (defaults[key] != value) options[key] = value
}, this)
self = $(e.currentTarget)[this.type](options).data(this.type)
if (!self.options.delay || !self.options.delay.show) return self.show()
clearTimeout(this.timeout)
self.hoverState = 'in'
this.timeout = setTimeout(function() {
if (self.hoverState == 'in') self.show()
}, self.options.delay.show)
}
, leave: function (e) {
var self = $(e.currentTarget)[this.type](this._options).data(this.type)
if (this.timeout) clearTimeout(this.timeout)
if (!self.options.delay || !self.options.delay.hide) return self.hide()
self.hoverState = 'out'
this.timeout = setTimeout(function() {
if (self.hoverState == 'out') self.hide()
}, self.options.delay.hide)
}
, show: function () {
var $tip
, pos
, actualWidth
, actualHeight
, placement
, tp
, e = $.Event('show')
if (this.hasContent() && this.enabled) {
this.$element.trigger(e)
if (e.isDefaultPrevented()) return
$tip = this.tip()
this.setContent()
if (this.options.animation) {
$tip.addClass('fade')
}
placement = typeof this.options.placement == 'function' ?
this.options.placement.call(this, $tip[0], this.$element[0]) :
this.options.placement
$tip
.detach()
.css({ top: 0, left: 0, display: 'block' })
this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)
pos = this.getPosition()
actualWidth = $tip[0].offsetWidth
actualHeight = $tip[0].offsetHeight
switch (placement) {
case 'bottom':
tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'top':
tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}
break
case 'left':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}
break
case 'right':
tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}
break
}
this.applyPlacement(tp, placement)
this.$element.trigger('shown')
}
}
, applyPlacement: function(offset, placement){
var $tip = this.tip()
, width = $tip[0].offsetWidth
, height = $tip[0].offsetHeight
, actualWidth
, actualHeight
, delta
, replace
$tip
.offset(offset)
.addClass(placement)
.addClass('in')
actualWidth = $tip[0].offsetWidth
actualHeight = $tip[0].offsetHeight
if (placement == 'top' && actualHeight != height) {
offset.top = offset.top + height - actualHeight
replace = true
}
if (placement == 'bottom' || placement == 'top') {
delta = 0
if (offset.left < 0){
delta = offset.left * -2
offset.left = 0
$tip.offset(offset)
actualWidth = $tip[0].offsetWidth
actualHeight = $tip[0].offsetHeight
}
this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')
} else {
this.replaceArrow(actualHeight - height, actualHeight, 'top')
}
if (replace) $tip.offset(offset)
}
, replaceArrow: function(delta, dimension, position){
this
.arrow()
.css(position, delta ? (50 * (1 - delta / dimension) + "%") : '')
}
, setContent: function () {
var $tip = this.tip()
, title = this.getTitle()
$tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)
$tip.removeClass('fade in top bottom left right')
}
, hide: function () {
var that = this
, $tip = this.tip()
, e = $.Event('hide')
this.$element.trigger(e)
if (e.isDefaultPrevented()) return
$tip.removeClass('in')
function removeWithAnimation() {
var timeout = setTimeout(function () {
$tip.off($.support.transition.end).detach()
}, 500)
$tip.one($.support.transition.end, function () {
clearTimeout(timeout)
$tip.detach()
})
}
$.support.transition && this.$tip.hasClass('fade') ?
removeWithAnimation() :
$tip.detach()
this.$element.trigger('hidden')
return this
}
, fixTitle: function () {
var $e = this.$element
if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {
$e.attr('data-original-title', $e.attr('title') || '').attr('title', '')
}
}
, hasContent: function () {
return this.getTitle()
}
, getPosition: function () {
var el = this.$element[0]
return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {
width: el.offsetWidth
, height: el.offsetHeight
}, this.$element.offset())
}
, getTitle: function () {
var title
, $e = this.$element
, o = this.options
title = $e.attr('data-original-title')
|| (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)
return title
}
, tip: function () {
return this.$tip = this.$tip || $(this.options.template)
}
, arrow: function(){
return this.$arrow = this.$arrow || this.tip().find(".tooltip-arrow")
}
, validate: function () {
if (!this.$element[0].parentNode) {
this.hide()
this.$element = null
this.options = null
}
}
, enable: function () {
this.enabled = true
}
, disable: function () {
this.enabled = false
}
, toggleEnabled: function () {
this.enabled = !this.enabled
}
, toggle: function (e) {
var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this
self.tip().hasClass('in') ? self.hide() : self.show()
}
, destroy: function () {
this.hide().$element.off('.' + this.type).removeData(this.type)
}
}
/* TOOLTIP PLUGIN DEFINITION
* ========================= */
var old = $.fn.tooltip
$.fn.tooltip = function ( option ) {
return this.each(function () {
var $this = $(this)
, data = $this.data('tooltip')
, options = typeof option == 'object' && option
if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))
if (typeof option == 'string') data[option]()
})
}
$.fn.tooltip.Constructor = Tooltip
$.fn.tooltip.defaults = {
animation: true
, placement: 'top'
, selector: false
, template: '<div class="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>'
, trigger: 'hover focus'
, title: ''
, delay: 0
, html: false
, container: false
}
/* TOOLTIP NO CONFLICT
* =================== */
$.fn.tooltip.noConflict = function () {
$.fn.tooltip = old
return this
}
}(window.jQuery);
================================================
FILE: clover/clover-admin/src/main/webapp/js/exporting.js
================================================
/*
Highcharts JS v3.0.1 (2013-04-09)
Exporting module
(c) 2010-2013 Torstein Hønsi
License: www.highcharts.com/license
*/
(function(e){var y=e.Chart,v=e.addEvent,B=e.removeEvent,m=e.createElement,j=e.discardElement,t=e.css,k=e.merge,r=e.each,p=e.extend,C=Math.max,i=document,z=window,D=e.isTouchDevice,E=e.Renderer.prototype.symbols,s=e.getOptions(),w;p(s.lang,{printChart:"Print chart",downloadPNG:"Download PNG image",downloadJPEG:"Download JPEG image",downloadPDF:"Download PDF document",downloadSVG:"Download SVG vector image",contextButtonTitle:"Chart context menu"});s.navigation={menuStyle:{border:"1px solid #A0A0A0",
background:"#FFFFFF",padding:"5px 0"},menuItemStyle:{padding:"0 10px",background:"none",color:"#303030",fontSize:D?"14px":"11px"},menuItemHoverStyle:{background:"#4572A5",color:"#FFFFFF"},buttonOptions:{symbolFill:"#E0E0E0",symbolSize:14,symbolStroke:"#666",symbolStrokeWidth:3,symbolX:12.5,symbolY:10.5,align:"right",buttonSpacing:3,height:22,theme:{fill:"white",stroke:"none"},verticalAlign:"top",width:24}};s.exporting={type:"image/png",url:"http://export.highcharts.com/",buttons:{contextButton:{symbol:"menu",
_titleKey:"contextButtonTitle",menuItems:[{textKey:"printChart",onclick:function(){this.print()}},{separator:!0},{textKey:"downloadPNG",onclick:function(){this.exportChart()}},{textKey:"downloadJPEG",onclick:function(){this.exportChart({type:"image/jpeg"})}},{textKey:"downloadPDF",onclick:function(){this.exportChart({type:"application/pdf"})}},{textKey:"downloadSVG",onclick:function(){this.exportChart({type:"image/svg+xml"})}}]}}};e.post=function(a,b){var c,d;d=m("form",{method:"post",action:a,enctype:"multipart/form-data"},
{display:"none"},i.body);for(c in b)m("input",{type:"hidden",name:c,value:b[c]},null,d);d.submit();j(d)};p(y.prototype,{getSVG:function(a){var b=this,c,d,x,g,f=k(b.options,a);if(!i.createElementNS)i.createElementNS=function(a,b){return i.createElement(b)};a=m("div",null,{position:"absolute",top:"-9999em",width:b.chartWidth+"px",height:b.chartHeight+"px"},i.body);d=b.renderTo.style.width;g=b.renderTo.style.height;d=f.exporting.sourceWidth||f.chart.width||/px$/.test(d)&&parseInt(d,10)||600;g=f.exporting.sourceHeight||
f.chart.height||/px$/.test(g)&&parseInt(g,10)||400;p(f.chart,{animation:!1,renderTo:a,forExport:!0,width:d,height:g});f.exporting.enabled=!1;f.chart.plotBackgroundImage=null;f.series=[];r(b.series,function(a){x=k(a.options,{animation:!1,showCheckbox:!1,visible:a.visible});x.isInternal||f.series.push(x)});c=new e.Chart(f,b.callback);r(["xAxis","yAxis"],function(a){r(b[a],function(b,d){var f=c[a][d],e=b.getExtremes(),g=e.userMin,e=e.userMax;(g!==void 0||e!==void 0)&&f.setExtremes(g,e,!0,!1)})});d=c.container.innerHTML;
f=null;c.destroy();j(a);d=d.replace(/zIndex="[^"]+"/g,"").replace(/isShadow="[^"]+"/g,"").replace(/symbolName="[^"]+"/g,"").replace(/jQuery[0-9]+="[^"]+"/g,"").replace(/url\([^#]+#/g,"url(#").replace(/<svg /,'<svg xmlns:xlink="http://www.w3.org/1999/xlink" ').replace(/ href=/g," xlink:href=").replace(/\n/," ").replace(/<\/svg>.*?$/,"</svg>").replace(/ /g," ").replace(/­/g,"").replace(/<IMG /g,"<image ").replace(/height=([^" ]+)/g,'height="$1"').replace(/width=([^" ]+)/g,'width="$1"').replace(/hc-svg-href="([^"]+)">/g,
'xlink:href="$1"/>').replace(/id=([^" >]+)/g,'id="$1"').replace(/class=([^" ]+)/g,'class="$1"').replace(/ transform /g," ").replace(/:(path|rect)/g,"$1").replace(/style="([^"]+)"/g,function(a){return a.toLowerCase()});d=d.replace(/(url\(#highcharts-[0-9]+)"/g,"$1").replace(/"/g,"'");d.match(/ xmlns="/g).length===2&&(d=d.replace(/xmlns="[^"]+"/,""));return d},exportChart:function(a,b){var a=a||{},c=this.options.exporting,c=this.getSVG(k({chart:{borderRadius:0}},c,b,{exporting:{sourceWidth:a.sourceWidth||
c.sourceWidth,sourceHeight:a.sourceHeight||c.sourceHeight}})),a=k(this.options.exporting,a);e.post(a.url,{filename:a.filename||"chart",type:a.type,width:a.width||0,scale:a.scale||2,svg:c})},print:function(){var a=this,b=a.container,c=[],d=b.parentNode,e=i.body,g=e.childNodes;if(!a.isPrinting)a.isPrinting=!0,r(g,function(a,b){if(a.nodeType===1)c[b]=a.style.display,a.style.display="none"}),e.appendChild(b),z.focus(),z.print(),setTimeout(function(){d.appendChild(b);r(g,function(a,b){if(a.nodeType===
1)a.style.display=c[b]});a.isPrinting=!1},1E3)},contextMenu:function(a,b,c,d,e,g,f){var h=this,q=h.options.navigation,n=q.menuItemStyle,o=h.chartWidth,i=h.chartHeight,A="cache-"+a,l=h[A],k=C(e,g),u,j,s;if(!l)h[A]=l=m("div",{className:"highcharts-"+a},{position:"absolute",zIndex:1E3,padding:k+"px"},h.container),u=m("div",null,p({MozBoxShadow:"3px 3px 10px #888",WebkitBoxShadow:"3px 3px 10px #888",boxShadow:"3px 3px 10px #888"},q.menuStyle),l),j=function(){t(l,{display:"none"});f&&f.setState(0)},v(l,
"mouseleave",function(){s=setTimeout(j,500)}),v(l,"mouseenter",function(){clearTimeout(s)}),r(b,function(a){if(a){var b=a.separator?m("hr",null,null,u):m("div",{onmouseover:function(){t(this,q.menuItemHoverStyle)},onmouseout:function(){t(this,n)},onclick:function(){j();a.onclick.apply(h,arguments)},innerHTML:a.text||h.options.lang[a.textKey]},p({cursor:"pointer"},n),u);h.exportDivElements.push(b)}}),h.exportDivElements.push(u,l),h.exportMenuWidth=l.offsetWidth,h.exportMenuHeight=l.offsetHeight;a=
{display:"block"};c+h.exportMenuWidth>o?a.right=o-c-e-k+"px":a.left=c-k+"px";d+g+h.exportMenuHeight>i?a.bottom=i-d-k+"px":a.top=d+g-k+"px";t(l,a)},addButton:function(a){var b=this,c=b.renderer,a=k(b.options.navigation.buttonOptions,a),d=a.onclick,i=a.menuItems,g,f,h={stroke:a.symbolStroke,fill:a.symbolFill},q=a.symbolSize||12;if(!b.btnCount)b.btnCount=0;b.btnCount++;if(!b.exportDivElements)b.exportDivElements=[],b.exportSVGElements=[];if(a.enabled!==!1){var n=a.theme,o=n.states,m=o&&o.hover,o=o&&
o.select,j;delete n.states;d?j=function(){d.apply(b,arguments)}:i&&(j=function(){b.contextMenu("contextmenu",i,f.translateX,f.translateY,f.width,f.height,f);f.setState(2)});a.text&&a.symbol?n.paddingLeft=e.pick(n.paddingLeft,25):a.text||p(n,{width:a.width,height:a.height,padding:0});f=c.button(a.text,0,0,j,n,m,o).attr({title:b.options.lang[a._titleKey],"stroke-linecap":"round"});a.symbol&&(g=c.symbol(a.symbol,a.symbolX-q/2,a.symbolY-q/2,q,q).attr(p(h,{"stroke-width":a.symbolStrokeWidth||1,zIndex:1})).add(f));
f.add().align(p(a,{width:f.width,x:e.pick(a.x,w)}),!0,"spacingBox");w+=(f.width+a.buttonSpacing)*(a.align==="right"?-1:1);b.exportSVGElements.push(f,g)}},destroyExport:function(a){var a=a.target,b,c;for(b=0;b<a.exportSVGElements.length;b++)c=a.exportSVGElements[b],c.onclick=c.ontouchstart=null,a.exportSVGElements[b]=c.destroy();for(b=0;b<a.exportDivElements.length;b++)c=a.exportDivElements[b],B(c,"mouseleave"),a.exportDivElements[b]=c.onmouseout=c.onmouseover=c.ontouchstart=c.onclick=null,j(c)}});
E.menu=function(a,b,c,d){return["M",a,b+2.5,"L",a+c,b+2.5,"M",a,b+d/2+0.5,"L",a+c,b+d/2+0.5,"M",a,b+d-1.5,"L",a+c,b+d-1.5]};y.prototype.callbacks.push(function(a){var b,c=a.options.exporting,d=c.buttons;w=0;if(c.enabled!==!1){for(b in d)a.addButton(d[b]);v(a,"destroy",a.destroyExport)}})})(Highcharts);
================================================
FILE: clover/clover-admin/src/main/webapp/js/highcharts.js
================================================
/*
Highcharts JS v3.0.1 (2013-04-09)
(c) 2009-2013 Torstein Hønsi
License: www.highcharts.com/license
*/
(function(){function v(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}function y(){var a,b=arguments.length,c={},d=function(a,b){var c,h;for(h in b)b.hasOwnProperty(h)&&(c=b[h],typeof a!=="object"&&(a={}),a[h]=c&&typeof c==="object"&&Object.prototype.toString.call(c)!=="[object Array]"&&typeof c.nodeType!=="number"?d(a[h]||{},c):b[h]);return a};for(a=0;a<b;a++)c=d(c,arguments[a]);return c}function u(a,b){return parseInt(a,b||10)}function fa(a){return typeof a==="string"}function V(a){return typeof a===
"object"}function Ba(a){return Object.prototype.toString.call(a)==="[object Array]"}function Ca(a){return typeof a==="number"}function ka(a){return I.log(a)/I.LN10}function da(a){return I.pow(10,a)}function ga(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}function r(a){return a!==x&&a!==null}function A(a,b,c){var d,e;if(fa(b))r(c)?a.setAttribute(b,c):a&&a.getAttribute&&(e=a.getAttribute(b));else if(r(b)&&V(b))for(d in b)a.setAttribute(d,b[d]);return e}function ha(a){return Ba(a)?
a:[a]}function o(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],typeof c!=="undefined"&&c!==null)return c}function L(a,b){if(Da&&b&&b.opacity!==x)b.filter="alpha(opacity="+b.opacity*100+")";v(a.style,b)}function U(a,b,c,d,e){a=z.createElement(a);b&&v(a,b);e&&L(a,{padding:0,border:S,margin:0});c&&L(a,c);d&&d.appendChild(a);return a}function ea(a,b){var c=function(){};c.prototype=new a;v(c.prototype,b);return c}function Na(a,b,c,d){var e=N.lang,f=b===-1?((a||0).toString().split(".")[1]||
"").length:isNaN(b=Q(b))?2:b,b=c===void 0?e.decimalPoint:c,d=d===void 0?e.thousandsSep:d,e=a<0?"-":"",c=String(u(a=Q(+a||0).toFixed(f))),g=c.length>3?c.length%3:0;return e+(g?c.substr(0,g)+d:"")+c.substr(g).replace(/(\d{3})(?=\d)/g,"$1"+d)+(f?b+Q(a-c).toFixed(f).slice(2):"")}function ua(a,b){return Array((b||2)+1-String(a).length).join(0)+a}function Ea(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1;){e=a.slice(0,c);if(d){f=e.split(":");g=f.shift().split(".");i=g.length;e=b;for(h=0;h<
i;h++)e=e[g[h]];if(f.length)f=f.join(":"),g=/\.([0-9])/,h=N.lang,i=void 0,/f$/.test(f)?(i=(i=f.match(g))?i[1]:-1,e=Na(e,i,h.decimalPoint,f.indexOf(",")>-1?h.thousandsSep:"")):e=Ua(f,e)}j.push(e);a=a.slice(c+1);c=(d=!d)?"}":"{"}j.push(a);return j.join("")}function ib(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allowDecimals===!1&&(c===1?b=[1,2,5,10]:c<=0.1&&(b=[1/c])));for(d=0;d<b.length;d++)if(a=b[d],e<=(b[d]+(b[d+1]||b[d]))/2)break;a*=c;return a}function yb(a,b){var c=b||[[zb,[1,2,5,
10,20,25,50,100,200,500]],[jb,[1,2,5,10,15,30]],[Va,[1,2,5,10,15,30]],[Oa,[1,2,3,4,6,8,12]],[oa,[1,2]],[Wa,[1,2]],[Pa,[1,2,3,4,6]],[va,null]],d=c[c.length-1],e=E[d[0]],f=d[1],g;for(g=0;g<c.length;g++)if(d=c[g],e=E[d[0]],f=d[1],c[g+1]&&a<=(e*f[f.length-1]+E[c[g+1][0]])/2)break;e===E[va]&&a<5*e&&(f=[1,2,5]);e===E[va]&&a<5*e&&(f=[1,2,5]);c=ib(a/e,f);return{unitRange:e,count:c,unitName:d[0]}}function Ab(a,b,c,d){var e=[],f={},g=N.global.useUTC,h,i=new Date(b),j=a.unitRange,k=a.count;if(r(b)){j>=E[jb]&&
(i.setMilliseconds(0),i.setSeconds(j>=E[Va]?0:k*T(i.getSeconds()/k)));if(j>=E[Va])i[Bb](j>=E[Oa]?0:k*T(i[kb]()/k));if(j>=E[Oa])i[Cb](j>=E[oa]?0:k*T(i[lb]()/k));if(j>=E[oa])i[mb](j>=E[Pa]?1:k*T(i[Qa]()/k));j>=E[Pa]&&(i[Db](j>=E[va]?0:k*T(i[Xa]()/k)),h=i[Ya]());j>=E[va]&&(h-=h%k,i[Eb](h));if(j===E[Wa])i[mb](i[Qa]()-i[nb]()+o(d,1));b=1;h=i[Ya]();for(var d=i.getTime(),m=i[Xa](),l=i[Qa](),i=g?0:(864E5+i.getTimezoneOffset()*6E4)%864E5;d<c;)e.push(d),j===E[va]?d=Za(h+b*k,0):j===E[Pa]?d=Za(h,m+b*k):!g&&(j===
E[oa]||j===E[Wa])?d=Za(h,m,l+b*k*(j===E[oa]?1:7)):(j<=E[Oa]&&d%E[oa]===i&&(f[d]=oa),d+=j*k),b++;e.push(d)}e.info=v(a,{higherRanks:f,totalRange:j*k});return e}function Fb(){this.symbol=this.color=0}function Gb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(function(a,c){d=b(a,c);return d===0?a.ss_i-c.ss_i:d});for(e=0;e<c;e++)delete a[e].ss_i}function Fa(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}function pa(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}function Ga(a,
b){for(var c in a)a[c]&&a[c]!==b&&a[c].destroy&&a[c].destroy(),delete a[c]}function Ra(a){$a||($a=U(wa));a&&$a.appendChild(a);$a.innerHTML=""}function qa(a,b){var c="Highcharts error #"+a+": www.highcharts.com/errors/"+a;if(b)throw c;else O.console&&console.log(c)}function ia(a){return parseFloat(a.toPrecision(14))}function Ha(a,b){xa=o(a,b.animation)}function Hb(){var a=N.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set";Za=a?Date.UTC:function(a,b,c,g,h,i){return(new Date(a,b,o(c,1),o(g,0),o(h,
0),o(i,0))).getTime()};kb=b+"Minutes";lb=b+"Hours";nb=b+"Day";Qa=b+"Date";Xa=b+"Month";Ya=b+"FullYear";Bb=c+"Minutes";Cb=c+"Hours";mb=c+"Date";Db=c+"Month";Eb=c+"FullYear"}function ra(){}function Ia(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!0;!c&&!d&&this.addLabel()}function ob(a,b){this.axis=a;if(b)this.options=b,this.id=b.id}function Ib(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegative=c;this.options=b;this.x=d;this.stack=e;this.percent=f==="percent";this.alignOptions=
{align:b.align||(g?c?"left":"right":"center"),verticalAlign:b.verticalAlign||(g?"middle":c?"bottom":"top"),y:o(b.y,g?4:c?14:-6),x:o(b.x,g?c?-6:6:0)};this.textAlign=b.textAlign||(g?c?"right":"left":"center")}function ab(){this.init.apply(this,arguments)}function pb(){this.init.apply(this,arguments)}function qb(a,b){this.init(a,b)}function rb(a,b){this.init(a,b)}function sb(){this.init.apply(this,arguments)}var x,z=document,O=window,I=Math,t=I.round,T=I.floor,ja=I.ceil,q=I.max,K=I.min,Q=I.abs,Y=I.cos,
ca=I.sin,Ja=I.PI,bb=Ja*2/360,ya=navigator.userAgent,Jb=O.opera,Da=/msie/i.test(ya)&&!Jb,cb=z.documentMode===8,db=/AppleWebKit/.test(ya),eb=/Firefox/.test(ya),Kb=/(Mobile|Android|Windows Phone)/.test(ya),sa="http://www.w3.org/2000/svg",Z=!!z.createElementNS&&!!z.createElementNS(sa,"svg").createSVGRect,Rb=eb&&parseInt(ya.split("Firefox/")[1],10)<4,$=!Z&&!Da&&!!z.createElement("canvas").getContext,Sa,fb=z.documentElement.ontouchstart!==x,Lb={},tb=0,$a,N,Ua,xa,ub,E,ta=function(){},za=[],wa="div",S="none",
Mb="rgba(192,192,192,"+(Z?1.0E-4:0.002)+")",zb="millisecond",jb="second",Va="minute",Oa="hour",oa="day",Wa="week",Pa="month",va="year",Nb="stroke-width",Za,kb,lb,nb,Qa,Xa,Ya,Bb,Cb,mb,Db,Eb,aa={};O.Highcharts=O.Highcharts?qa(16,!0):{};Ua=function(a,b,c){if(!r(b)||isNaN(b))return"Invalid date";var a=o(a,"%Y-%m-%d %H:%M:%S"),d=new Date(b),e,f=d[lb](),g=d[nb](),h=d[Qa](),i=d[Xa](),j=d[Ya](),k=N.lang,m=k.weekdays,d=v({a:m[g].substr(0,3),A:m[g],d:ua(h),e:h,b:k.shortMonths[i],B:k.months[i],m:ua(i+1),y:j.toString().substr(2,
2),Y:j,H:ua(f),I:ua(f%12||12),l:f%12||12,M:ua(d[kb]()),p:f<12?"AM":"PM",P:f<12?"am":"pm",S:ua(d.getSeconds()),L:ua(t(b%1E3),3)},Highcharts.dateFormats);for(e in d)for(;a.indexOf("%"+e)!==-1;)a=a.replace("%"+e,typeof d[e]==="function"?d[e](b):d[e]);return c?a.substr(0,1).toUpperCase()+a.substr(1):a};Fb.prototype={wrapColor:function(a){if(this.color>=a)this.color=0},wrapSymbol:function(a){if(this.symbol>=a)this.symbol=0}};E=function(){for(var a=0,b=arguments,c=b.length,d={};a<c;a++)d[b[a++]]=b[a];return d}(zb,
1,jb,1E3,Va,6E4,Oa,36E5,oa,864E5,Wa,6048E5,Pa,26784E5,va,31556952E3);ub={init:function(a,b,c){var b=b||"",d=a.shift,e=b.indexOf("C")>-1,f=e?7:3,g,b=b.split(" "),c=[].concat(c),h,i,j=function(a){for(g=a.length;g--;)a[g]==="M"&&a.splice(g+1,0,a[g+1],a[g+2],a[g+1],a[g+2])};e&&(j(b),j(c));a.isArea&&(h=b.splice(b.length-6,6),i=c.splice(c.length-6,6));if(d<=c.length/f)for(;d--;)c=[].concat(c).splice(0,f).concat(c);a.shift=0;if(b.length)for(a=c.length;b.length<a;)d=[].concat(b).splice(b.length-f,f),e&&(d[f-
6]=d[f-2],d[f-5]=d[f-1]),b=b.concat(d);h&&(b=b.concat(h),c=c.concat(i));return[b,c]},step:function(a,b,c,d){var e=[],f=a.length;if(c===1)e=d;else if(f===b.length&&c<1)for(;f--;)d=parseFloat(a[f]),e[f]=isNaN(d)?a[f]:c*parseFloat(b[f]-d)+d;else e=b;return e}};(function(a){O.HighchartsAdapter=O.HighchartsAdapter||a&&{init:function(b){var c=a.fx,d=c.step,e,f=a.Tween,g=f&&f.propHooks;a.extend(a.easing,{easeOutQuad:function(a,b,c,d,e){return-d*(b/=e)*(b-2)+c}});a.each(["cur","_default","width","height",
"opacity"],function(a,b){var e=d,k,m;b==="cur"?e=c.prototype:b==="_default"&&f&&(e=g[b],b="set");(k=e[b])&&(e[b]=function(c){c=a?c:this;m=c.elem;return m.attr?m.attr(c.prop,b==="cur"?x:c.now):k.apply(this,arguments)})});e=function(a){var c=a.elem,d;if(!a.started)d=b.init(c,c.d,c.toD),a.start=d[0],a.end=d[1],a.started=!0;c.attr("d",b.step(a.start,a.end,a.pos,c.toD))};f?g.d={set:e}:d.d=e;this.each=Array.prototype.forEach?function(a,b){return Array.prototype.forEach.call(a,b)}:function(a,b){for(var c=
0,d=a.length;c<d;c++)if(b.call(a[c],a[c],c,a)===!1)return c};a.fn.highcharts=function(){var a="Chart",b=arguments,c,d;fa(b[0])&&(a=b[0],b=Array.prototype.slice.call(b,1));c=b[0];if(c!==x)c.chart=c.chart||{},c.chart.renderTo=this[0],new Highcharts[a](c,b[1]),d=this;c===x&&(d=za[A(this[0],"data-highcharts-chart")]);return d}},getScript:a.getScript,inArray:a.inArray,adapterRun:function(b,c){return a(b)[c]()},grep:a.grep,map:function(a,c){for(var d=[],e=0,f=a.length;e<f;e++)d[e]=c.call(a[e],a[e],e,a);
return d},offset:function(b){return a(b).offset()},addEvent:function(b,c,d){a(b).bind(c,d)},removeEvent:function(b,c,d){var e=z.removeEventListener?"removeEventListener":"detachEvent";z[e]&&b&&!b[e]&&(b[e]=function(){});a(b).unbind(c,d)},fireEvent:function(b,c,d,e){var f=a.Event(c),g="detached"+c,h;!Da&&d&&(delete d.layerX,delete d.layerY);v(f,d);b[c]&&(b[g]=b[c],b[c]=null);a.each(["preventDefault","stopPropagation"],function(a,b){var c=f[b];f[b]=function(){try{c.call(f)}catch(a){b==="preventDefault"&&
(h=!0)}}});a(b).trigger(f);b[g]&&(b[c]=b[g],b[g]=null);e&&!f.isDefaultPrevented()&&!h&&e(f)},washMouseEvent:function(a){var c=a.originalEvent||a;if(c.pageX===x)c.pageX=a.pageX,c.pageY=a.pageY;return c},animate:function(b,c,d){var e=a(b);if(c.d)b.toD=c.d,c.d=1;e.stop();c.opacity!==x&&b.attr&&(c.opacity+="px");e.animate(c,d)},stop:function(b){a(b).stop()}}})(O.jQuery);var W=O.HighchartsAdapter,M=W||{};W&&W.init.call(W,ub);var gb=M.adapterRun,Sb=M.getScript,la=M.inArray,n=M.each,Ob=M.grep,Tb=M.offset,
Ka=M.map,J=M.addEvent,ba=M.removeEvent,D=M.fireEvent,Pb=M.washMouseEvent,vb=M.animate,Ta=M.stop,M={enabled:!0,align:"center",x:0,y:15,style:{color:"#666",cursor:"default",fontSize:"11px",lineHeight:"14px"}};N={colors:"#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a".split(","),symbols:["circle","diamond","square","triangle","triangle-down"],lang:{loading:"Loading...",months:"January,February,March,April,May,June,July,August,September,October,November,December".split(","),
shortMonths:"Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(","),weekdays:"Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split(","),decimalPoint:".",numericSymbols:"k,M,G,T,P,E".split(","),resetZoom:"Reset zoom",resetZoomTitle:"Reset zoom level 1:1",thousandsSep:","},global:{useUTC:!0,canvasToolsURL:"http://code.highcharts.com/3.0.1/modules/canvas-tools.js",VMLRadialGradientURL:"http://code.highcharts.com/3.0.1/gfx/vml-radial-gradient.png"},chart:{borderColor:"#4572A7",borderRadius:5,
defaultSeriesType:"line",ignoreHiddenSeries:!0,spacingTop:10,spacingRight:10,spacingBottom:15,spacingLeft:10,style:{fontFamily:'"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif',fontSize:"12px"},backgroundColor:"#FFFFFF",plotBorderColor:"#C0C0C0",resetZoomButton:{theme:{zIndex:20},position:{align:"right",x:-10,y:10}}},title:{text:"Chart title",align:"center",y:15,style:{color:"#274b6d",fontSize:"16px"}},subtitle:{text:"",align:"center",y:30,style:{color:"#4d759e"}},plotOptions:{line:{allowPointSelect:!1,
showCheckbox:!1,animation:{duration:1E3},events:{},lineWidth:2,marker:{enabled:!0,lineWidth:0,radius:4,lineColor:"#FFFFFF",states:{hover:{enabled:!0},select:{fillColor:"#FFFFFF",lineColor:"#000000",lineWidth:2}}},point:{events:{}},dataLabels:y(M,{enabled:!1,formatter:function(){return this.y},verticalAlign:"bottom",y:0}),cropThreshold:300,pointRange:0,showInLegend:!0,states:{hover:{marker:{}},select:{marker:{}}},stickyTracking:!0}},labels:{style:{position:"absolute",color:"#3E576F"}},legend:{enabled:!0,
align:"center",layout:"horizontal",labelFormatter:function(){return this.name},borderWidth:1,borderColor:"#909090",borderRadius:5,navigation:{activeColor:"#274b6d",inactiveColor:"#CCC"},shadow:!1,itemStyle:{cursor:"pointer",color:"#274b6d",fontSize:"12px"},itemHoverStyle:{color:"#000"},itemHiddenStyle:{color:"#CCC"},itemCheckboxStyle:{position:"absolute",width:"13px",height:"13px"},symbolWidth:16,symbolPadding:5,verticalAlign:"bottom",x:0,y:0,title:{style:{fontWeight:"bold"}}},loading:{labelStyle:{fontWeight:"bold",
position:"relative",top:"1em"},style:{position:"absolute",backgroundColor:"white",opacity:0.5,textAlign:"center"}},tooltip:{enabled:!0,animation:Z,backgroundColor:"rgba(255, 255, 255, .85)",borderWidth:1,borderRadius:3,dateTimeLabelFormats:{millisecond:"%A, %b %e, %H:%M:%S.%L",second:"%A, %b %e, %H:%M:%S",minute:"%A, %b %e, %H:%M",hour:"%A, %b %e, %H:%M",day:"%A, %b %e, %Y",week:"Week from %A, %b %e, %Y",month:"%B %Y",year:"%Y"},headerFormat:'<span style="font-size: 10px">{point.key}</span><br/>',
pointFormat:'<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>',shadow:!0,snap:Kb?25:10,style:{color:"#333333",cursor:"default",fontSize:"12px",padding:"8px",whiteSpace:"nowrap"}},credits:{enabled:!0,text:"Highcharts.com",href:"http://www.highcharts.com",position:{align:"right",x:-10,verticalAlign:"bottom",y:-5},style:{cursor:"pointer",color:"#909090",fontSize:"9px"}}};var X=N.plotOptions,W=X.line;Hb();var ma=function(a){var b=[],c,d;(function(a){a&&a.stops?d=Ka(a.stops,
function(a){return ma(a[1])}):(c=/rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/.exec(a))?b=[u(c[1]),u(c[2]),u(c[3]),parseFloat(c[4],10)]:(c=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(a))?b=[u(c[1],16),u(c[2],16),u(c[3],16),1]:(c=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(a))&&(b=[u(c[1]),u(c[2]),u(c[3]),1])})(a);return{get:function(c){var f;d?(f=y(a),f.stops=[].concat(f.stops),n(d,function(a,b){f.stops[b]=[f.stops[b][0],
a.get(c)]})):f=b&&!isNaN(b[0])?c==="rgb"?"rgb("+b[0]+","+b[1]+","+b[2]+")":c==="a"?b[3]:"rgba("+b.join(",")+")":a;return f},brighten:function(a){if(d)n(d,function(b){b.brighten(a)});else if(Ca(a)&&a!==0){var c;for(c=0;c<3;c++)b[c]+=u(a*255),b[c]<0&&(b[c]=0),b[c]>255&&(b[c]=255)}return this},rgba:b,setOpacity:function(a){b[3]=a;return this}}};ra.prototype={init:function(a,b){this.element=b==="span"?U(b):z.createElementNS(sa,b);this.renderer=a;this.attrSetters={}},opacity:1,animate:function(a,b,c){b=
o(b,xa,!0);Ta(this);if(b){b=y(b);if(c)b.complete=c;vb(this,a,b)}else this.attr(a),c&&c()},attr:function(a,b){var c,d,e,f,g=this.element,h=g.nodeName.toLowerCase(),i=this.renderer,j,k=this.attrSetters,m=this.shadows,l,p,s=this;fa(a)&&r(b)&&(c=a,a={},a[c]=b);if(fa(a))c=a,h==="circle"?c={x:"cx",y:"cy"}[c]||c:c==="strokeWidth"&&(c="stroke-width"),s=A(g,c)||this[c]||0,c!=="d"&&c!=="visibility"&&(s=parseFloat(s));else{for(c in a)if(j=!1,d=a[c],e=k[c]&&k[c].call(this,d,c),e!==!1){e!==x&&(d=e);if(c==="d")d&&
d.join&&(d=d.join(" ")),/(NaN| {2}|^$)/.test(d)&&(d="M 0 0");else if(c==="x"&&h==="text")for(e=0;e<g.childNodes.length;e++)f=g.childNodes[e],A(f,"x")===A(g,"x")&&A(f,"x",d);else if(this.rotation&&(c==="x"||c==="y"))p=!0;else if(c==="fill")d=i.color(d,g,c);else if(h==="circle"&&(c==="x"||c==="y"))c={x:"cx",y:"cy"}[c]||c;else if(h==="rect"&&c==="r")A(g,{rx:d,ry:d}),j=!0;else if(c==="translateX"||c==="translateY"||c==="rotation"||c==="verticalAlign"||c==="scaleX"||c==="scaleY")j=p=!0;else if(c==="stroke")d=
i.color(d,g,c);else if(c==="dashstyle")if(c="stroke-dasharray",d=d&&d.toLowerCase(),d==="solid")d=S;else{if(d){d=d.replace("shortdashdotdot","3,1,1,1,1,1,").replace("shortdashdot","3,1,1,1").replace("shortdot","1,1,").replace("shortdash","3,1,").replace("longdash","8,3,").replace(/dot/g,"1,3,").replace("dash","4,3,").replace(/,$/,"").split(",");for(e=d.length;e--;)d[e]=u(d[e])*a["stroke-width"];d=d.join(",")}}else if(c==="width")d=u(d);else if(c==="align")c="text-anchor",d={left:"start",center:"middle",
right:"end"}[d];else if(c==="title")e=g.getElementsByTagName("title")[0],e||(e=z.createElementNS(sa,"title"),g.appendChild(e)),e.textContent=d;c==="strokeWidth"&&(c="stroke-width");if(c==="stroke-width"||c==="stroke"){this[c]=d;if(this.stroke&&this["stroke-width"])A(g,"stroke",this.stroke),A(g,"stroke-width",this["stroke-width"]),this.hasStroke=!0;else if(c==="stroke-width"&&d===0&&this.hasStroke)g.removeAttribute("stroke"),this.hasStroke=!1;j=!0}this.symbolName&&/^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/.test(c)&&
(l||(this.symbolAttr(a),l=!0),j=!0);if(m&&/^(width|height|visibility|x|y|d|transform)$/.test(c))for(e=m.length;e--;)A(m[e],c,c==="height"?q(d-(m[e].cutHeight||0),0):d);if((c==="widt
gitextract_k4y1i56_/
├── README.md
├── clover/
│ ├── .gitignore
│ ├── README.md
│ ├── clover-admin/
│ │ ├── pom.xml
│ │ └── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ └── com/
│ │ │ │ └── gome/
│ │ │ │ ├── clover/
│ │ │ │ │ ├── listener/
│ │ │ │ │ │ └── Log4jConfigListener.java
│ │ │ │ │ └── servlet/
│ │ │ │ │ └── CloverServletHandle.java
│ │ │ │ └── testclover/
│ │ │ │ └── spring/
│ │ │ │ ├── RemoteCronJobWithSpringAnnotation.java
│ │ │ │ ├── RemoteFixedDateJobWithSpring.java
│ │ │ │ ├── RemoteFixedDateJobWithSpringAnnotation.java
│ │ │ │ ├── RemoteJobWithSpring.java
│ │ │ │ └── TestProperties.java
│ │ │ ├── resources/
│ │ │ │ ├── bak_log4j.properties
│ │ │ │ ├── conf/
│ │ │ │ │ └── config.properties
│ │ │ │ ├── log4j.xml
│ │ │ │ └── spring/
│ │ │ │ └── spring-config.xml
│ │ │ └── webapp/
│ │ │ ├── WEB-INF/
│ │ │ │ └── web.xml
│ │ │ ├── common/
│ │ │ │ ├── head.jsp
│ │ │ │ └── nav.jsp
│ │ │ ├── contactList.jsp
│ │ │ ├── css/
│ │ │ │ └── style.css
│ │ │ ├── error.jsp
│ │ │ ├── index.jsp
│ │ │ ├── jobList.jsp
│ │ │ ├── js/
│ │ │ │ ├── DatePicker/
│ │ │ │ │ ├── DatePicker.htm
│ │ │ │ │ ├── WdatePicker.js
│ │ │ │ │ ├── calendar.js
│ │ │ │ │ ├── config.js
│ │ │ │ │ ├── lang/
│ │ │ │ │ │ ├── en.js
│ │ │ │ │ │ ├── zh-cn.js
│ │ │ │ │ │ └── zh-tw.js
│ │ │ │ │ └── skin/
│ │ │ │ │ ├── WdatePicker.css
│ │ │ │ │ ├── default/
│ │ │ │ │ │ └── datepicker.css
│ │ │ │ │ ├── ext/
│ │ │ │ │ │ └── datepicker.css
│ │ │ │ │ └── whyGreen/
│ │ │ │ │ └── datepicker.css
│ │ │ │ ├── Map.js
│ │ │ │ ├── bootstrap-popover.js
│ │ │ │ ├── bootstrap-tooltip.js
│ │ │ │ ├── exporting.js
│ │ │ │ ├── highcharts.js
│ │ │ │ ├── html5.js
│ │ │ │ ├── jquery.validate.js
│ │ │ │ ├── ui.datepicker-zh-CN.js
│ │ │ │ └── ui.datepicker.js
│ │ │ ├── logList.jsp
│ │ │ ├── login.jsp
│ │ │ ├── monitorList.jsp
│ │ │ ├── register.jsp
│ │ │ └── zkList.jsp
│ │ └── test/
│ │ └── java/
│ │ └── TestAnnotationWithSpring.java
│ ├── clover-client/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── gome/
│ │ └── bg/
│ │ └── clover/
│ │ └── client/
│ │ ├── job/
│ │ │ ├── LocalJob.java
│ │ │ ├── RemoteJob.java
│ │ │ ├── SimpleJob.java
│ │ │ └── TransactionJob.java
│ │ └── module/
│ │ └── SchedulerClientInitial.java
│ ├── clover-common/
│ │ └── pom.xml
│ ├── clover-core/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ ├── java/
│ │ │ └── com/
│ │ │ └── gome/
│ │ │ └── clover/
│ │ │ ├── common/
│ │ │ │ ├── annotation/
│ │ │ │ │ ├── CloverConfigBeanDefinitionParser.java
│ │ │ │ │ ├── CloverConfigInit.java
│ │ │ │ │ ├── CloverJobAnnotation.java
│ │ │ │ │ ├── CloverJobAnnotationBean.java
│ │ │ │ │ ├── CloverJobBeanDefinitionParser.java
│ │ │ │ │ └── CloverJobNamespaceHandler.java
│ │ │ │ ├── cache/
│ │ │ │ │ ├── LRUCache.java
│ │ │ │ │ └── LRUCache2.java
│ │ │ │ ├── compile/
│ │ │ │ │ ├── CreateAndCompileClassFile.java
│ │ │ │ │ ├── DynamicClassLoader.java
│ │ │ │ │ └── MyClassLoader.java
│ │ │ │ ├── compress/
│ │ │ │ │ └── CompressUtil.java
│ │ │ │ ├── encryption/
│ │ │ │ │ ├── DesUtil.java
│ │ │ │ │ └── MD5Util.java
│ │ │ │ ├── exception/
│ │ │ │ │ └── AppException.java
│ │ │ │ ├── file/
│ │ │ │ │ └── ConfigFile.java
│ │ │ │ ├── hash/
│ │ │ │ │ └── HashTimes.java
│ │ │ │ ├── mongodb/
│ │ │ │ │ ├── BuildMongoDBData.java
│ │ │ │ │ ├── DBTableInfo.java
│ │ │ │ │ └── MongoDBUtil.java
│ │ │ │ ├── netty/
│ │ │ │ │ ├── client/
│ │ │ │ │ │ ├── ObjectReqClient.java
│ │ │ │ │ │ └── SubReqClientHandel.java
│ │ │ │ │ ├── protol/
│ │ │ │ │ │ ├── SubScribeResp.java
│ │ │ │ │ │ └── SubscribeReq.java
│ │ │ │ │ └── server/
│ │ │ │ │ ├── ObjectRespServer.java
│ │ │ │ │ └── SubReqServerHandel.java
│ │ │ │ ├── rocketmq/
│ │ │ │ │ ├── ConsumerUtil.java
│ │ │ │ │ └── ProducerUtil.java
│ │ │ │ ├── rpc/
│ │ │ │ │ ├── HttpRequestEntity.java
│ │ │ │ │ ├── HttpRequestHandler.java
│ │ │ │ │ ├── HttpResponseEntity.java
│ │ │ │ │ ├── QueueDaemon.java
│ │ │ │ │ └── QueueServer.java
│ │ │ │ ├── systeminfo/
│ │ │ │ │ ├── IMonitorService.java
│ │ │ │ │ ├── MonitorInfoBean.java
│ │ │ │ │ ├── MonitorServiceImpl.java
│ │ │ │ │ ├── SystemInfoUtil.java
│ │ │ │ │ └── WindowsInfoUtil.java
│ │ │ │ ├── thread/
│ │ │ │ │ └── MyThreadPool.java
│ │ │ │ ├── tools/
│ │ │ │ │ ├── ClassUtil.java
│ │ │ │ │ ├── CommonConstants.java
│ │ │ │ │ ├── ConfigUtil.java
│ │ │ │ │ ├── DateUtil.java
│ │ │ │ │ ├── HttpRequest.java
│ │ │ │ │ ├── IpUtil.java
│ │ │ │ │ ├── KeyGen.java
│ │ │ │ │ ├── List2StringUtil.java
│ │ │ │ │ ├── NetUtils.java
│ │ │ │ │ ├── NettyUtil.java
│ │ │ │ │ ├── ProgressUtil.java
│ │ │ │ │ ├── PropertiesUtil.java
│ │ │ │ │ ├── RandomNumUtil.java
│ │ │ │ │ ├── SendMailUtil.java
│ │ │ │ │ └── StringUtil.java
│ │ │ │ ├── zeromq/
│ │ │ │ │ ├── AsyncSendMsg.java
│ │ │ │ │ ├── AsyncStartZeroMQ.java
│ │ │ │ │ ├── AsyncZMQPull.java
│ │ │ │ │ ├── ZeroMQEntity.java
│ │ │ │ │ ├── ZeroMQPub.java
│ │ │ │ │ ├── ZeroMQPull.java
│ │ │ │ │ ├── ZeroMQPush.java
│ │ │ │ │ └── ZeroMQSub.java
│ │ │ │ └── zk/
│ │ │ │ ├── ClientDict.java
│ │ │ │ ├── ClientListener.java
│ │ │ │ ├── ClientNodes.java
│ │ │ │ ├── CommonNodes.java
│ │ │ │ ├── ServerDict.java
│ │ │ │ ├── ServerListener.java
│ │ │ │ ├── ServerNodes.java
│ │ │ │ ├── ZKConnect.java
│ │ │ │ ├── ZKManager.java
│ │ │ │ ├── ZKUtil.java
│ │ │ │ └── ZooKeeperWatch.java
│ │ │ └── core/
│ │ │ ├── job/
│ │ │ │ ├── ClientJob.java
│ │ │ │ ├── ClientJobBuilder.java
│ │ │ │ ├── ClientJobFactory.java
│ │ │ │ ├── MyJobListener.java
│ │ │ │ ├── ServerJob.java
│ │ │ │ └── ServerJobFactory.java
│ │ │ ├── module/
│ │ │ │ ├── AbstractModuleScheduler.java
│ │ │ │ ├── ModuleSchedulerClient.java
│ │ │ │ └── ModuleSchedulerServer.java
│ │ │ ├── monitor/
│ │ │ │ ├── client/
│ │ │ │ │ └── ClientHeartBeat.java
│ │ │ │ └── server/
│ │ │ │ └── ServerHeartBeat.java
│ │ │ └── scheduler/
│ │ │ └── MyScheduler.java
│ │ └── resources/
│ │ ├── META-INF/
│ │ │ ├── cloverjob-1.0.0.xsd
│ │ │ ├── spring.handlers
│ │ │ └── spring.schemas
│ │ ├── commonConfig.properties
│ │ ├── dev/
│ │ │ ├── commonConfig.properties
│ │ │ ├── mongoDBConfig.properties
│ │ │ ├── redisConfig.properties
│ │ │ └── zkConfig.properties
│ │ ├── mongoDBConfig.properties
│ │ ├── redisConfig.properties
│ │ ├── uat/
│ │ │ ├── commonConfig.properties
│ │ │ ├── mongoDBConfig.properties
│ │ │ ├── redisConfig.properties
│ │ │ └── zkConfig.properties
│ │ └── zkConfig.properties
│ ├── clover-examples/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── gome/
│ │ └── clover/
│ │ ├── DeleteGomeVipAdPlanJob.java
│ │ ├── ObjectToByte.java
│ │ ├── TestEum.java
│ │ ├── TestThread.java
│ │ ├── akka/
│ │ │ └── serverclient/
│ │ │ └── pubsub/
│ │ │ ├── MyActorSystem.java
│ │ │ ├── PublisherActor.java
│ │ │ ├── WorkerTaskA.java
│ │ │ └── WorkerTaskB.java
│ │ ├── common/
│ │ │ └── compile/
│ │ │ └── TestCompile.java
│ │ ├── cron/
│ │ │ └── TestCron.java
│ │ ├── job/
│ │ │ ├── MyJob.java
│ │ │ ├── MyJob1.java
│ │ │ └── MyJobWithSimpleJob.java
│ │ ├── json/
│ │ │ └── TestJson.java
│ │ ├── mongo/
│ │ │ └── TestMongoDB.java
│ │ ├── scheduler/
│ │ │ ├── TestSchedulerWithInsertMongoDB.java
│ │ │ └── TestSchedulerWithRegister.java
│ │ ├── systeminfo/
│ │ │ └── TestMem.java
│ │ ├── thread/
│ │ │ ├── MyThread.java
│ │ │ ├── TestMyThreadPool.java
│ │ │ ├── ThreadDemo.java
│ │ │ ├── ThreadPool.java
│ │ │ └── ThreadPoolTest.java
│ │ ├── time/
│ │ │ └── TestTime.java
│ │ ├── zeromq/
│ │ │ ├── Helper.java
│ │ │ ├── Pub.java
│ │ │ ├── Publisher.java
│ │ │ ├── RandomNum.java
│ │ │ ├── Sub1.java
│ │ │ ├── Subscriber.java
│ │ │ ├── TestPubsubTcp.java
│ │ │ └── TestReqrepTcp.java
│ │ └── zk/
│ │ ├── CuratorDemo.java
│ │ ├── CuratorTest.java
│ │ ├── MonitorServerZKListener.java
│ │ ├── SyncServer.java
│ │ └── TestZK.java
│ ├── clover-monitor/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── gome/
│ │ └── clover/
│ │ └── monitor/
│ │ ├── MonitorHeartBeat.java
│ │ ├── MonitorTimerTask.java
│ │ ├── ServerHeartBeatBak.java
│ │ └── ServerTimerTask.java
│ ├── clover-server/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── com/
│ │ └── gome/
│ │ └── clover/
│ │ └── server/
│ │ └── module/
│ │ └── SchedulerServerInitial.java
│ └── pom.xml
├── docs/
│ ├── clover结构图.vsd
│ ├── clover部署结构图/
│ │ ├── clover部署结构图 - pre.vsd
│ │ ├── clover部署结构图 - sit.vsd
│ │ ├── clover部署结构图 - uat.vsd
│ │ └── clover部署结构图.vsd
│ ├── clover部署结构图.vsd
│ └── clover项目技术分享和使用_2014121_V1.0.pptx
└── test-clover/
├── .classpath
├── .idea/
│ ├── .name
│ ├── artifacts/
│ │ ├── test_clover_war.xml
│ │ └── test_clover_war_exploded.xml
│ ├── compiler.xml
│ ├── copyright/
│ │ └── profiles_settings.xml
│ ├── encodings.xml
│ ├── libraries/
│ │ ├── Maven__aopalliance_aopalliance_1_0.xml
│ │ ├── Maven__c3p0_c3p0_0_9_1_1.xml
│ │ ├── Maven__com_101tec_zkclient_0_3.xml
│ │ ├── Maven__com_alibaba_fastjson_1_1_31.xml
│ │ ├── Maven__com_alibaba_rocketmq_rocketmq_client_3_1_8.xml
│ │ ├── Maven__com_alibaba_rocketmq_rocketmq_common_3_1_8.xml
│ │ ├── Maven__com_alibaba_rocketmq_rocketmq_remoting_3_1_8.xml
│ │ ├── Maven__com_github_jnr_jnr_constants_0_8_2.xml
│ │ ├── Maven__com_gome_clover_client_dev_1_0.xml
│ │ ├── Maven__com_gome_clover_core_dev_1_0.xml
│ │ ├── Maven__com_google_guava_guava_16_0_1.xml
│ │ ├── Maven__com_google_protobuf_protobuf_java_2_4_1.xml
│ │ ├── Maven__com_sun_jdmk_jmxtools_1_2_1.xml
│ │ ├── Maven__com_sun_jmx_jmxri_1_2_1.xml
│ │ ├── Maven__com_sun_tools_1_5_0.xml
│ │ ├── Maven__com_typesafe_akka_akka_actor_2_0_2.xml
│ │ ├── Maven__com_typesafe_akka_akka_actor_2_10_2_1_0.xml
│ │ ├── Maven__com_typesafe_akka_akka_zeromq_2_10_2_1_0.xml
│ │ ├── Maven__com_typesafe_config_1_0_0.xml
│ │ ├── Maven__com_yammer_metrics_metrics_core_2_2_0.xml
│ │ ├── Maven__commons_logging_commons_logging_1_1_1.xml
│ │ ├── Maven__io_netty_netty_all_4_0_21_Final.xml
│ │ ├── Maven__javax_activation_activation_1_1.xml
│ │ ├── Maven__javax_jms_jms_1_1.xml
│ │ ├── Maven__javax_mail_mail_1_5_0_b01.xml
│ │ ├── Maven__javax_servlet_servlet_api_2_4.xml
│ │ ├── Maven__jline_jline_0_9_94.xml
│ │ ├── Maven__junit_junit_3_8_1.xml
│ │ ├── Maven__junit_junit_4_11.xml
│ │ ├── Maven__log4j_log4j_1_2_15.xml
│ │ ├── Maven__net_java_dev_jna_jna_3_0_9.xml
│ │ ├── Maven__net_sf_jopt_simple_jopt_simple_3_2.xml
│ │ ├── Maven__org_apache_commons_com_springsource_org_apache_commons_codec_1_6_0.xml
│ │ ├── Maven__org_apache_commons_com_springsource_org_apache_commons_logging_1_1_1.xml
│ │ ├── Maven__org_apache_commons_commons_pool2_2_0.xml
│ │ ├── Maven__org_apache_curator_curator_client_2_7_0.xml
│ │ ├── Maven__org_apache_curator_curator_framework_2_7_0.xml
│ │ ├── Maven__org_apache_httpcomponents_com_springsource_org_apache_httpcomponents_httpclient_4_2_1.xml
│ │ ├── Maven__org_apache_httpcomponents_com_springsource_org_apache_httpcomponents_httpclient_cache_4_2_1.xml
│ │ ├── Maven__org_apache_httpcomponents_com_springsource_org_apache_httpcomponents_httpcore_4_2_1.xml
│ │ ├── Maven__org_apache_httpcomponents_com_springsource_org_apache_httpcomponents_httpmime_4_2_1.xml
│ │ ├── Maven__org_apache_kafka_kafka_2_9_2_0_8_1_1.xml
│ │ ├── Maven__org_apache_zookeeper_zookeeper_3_4_5.xml
│ │ ├── Maven__org_hamcrest_hamcrest_core_1_3.xml
│ │ ├── Maven__org_jboss_netty_netty_3_2_2_Final.xml
│ │ ├── Maven__org_jboss_netty_netty_3_2_9_Final.xml
│ │ ├── Maven__org_mongodb_mongo_java_driver_2_11_3.xml
│ │ ├── Maven__org_quartz_scheduler_quartz_2_2_1.xml
│ │ ├── Maven__org_scala_lang_scala_library_2_9_2.xml
│ │ ├── Maven__org_slf4j_slf4j_api_1_6_6.xml
│ │ ├── Maven__org_slf4j_slf4j_log4j12_1_6_1.xml
│ │ ├── Maven__org_springframework_spring_aop_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_beans_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_context_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_core_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_expression_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_web_3_2_4_RELEASE.xml
│ │ ├── Maven__org_springframework_spring_webmvc_3_2_4_RELEASE.xml
│ │ ├── Maven__org_xerial_snappy_snappy_java_1_1_1_6.xml
│ │ ├── Maven__org_zeromq_jeromq_0_3_4.xml
│ │ ├── Maven__org_zeromq_zeromq_scala_binding_2_10_0_0_7.xml
│ │ ├── Maven__redis_clients_jedis_2_6_0.xml
│ │ ├── clover_client_dev_1_0.xml
│ │ └── clover_core_dev_1_0.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── scopes/
│ │ └── scope_settings.xml
│ ├── vcs.xml
│ └── workspace.xml
├── .myeclipse/
│ └── profiler/
│ └── RomoteCronJob.xml
├── .mymetadata
├── .project
├── .settings/
│ ├── .jsdtscope
│ ├── com.genuitec.eclipse.j2eedt.core.prefs
│ ├── org.eclipse.core.resources.prefs
│ ├── org.eclipse.jdt.core.prefs
│ ├── org.eclipse.m2e.core.prefs
│ ├── org.eclipse.wst.common.component
│ ├── org.eclipse.wst.common.project.facet.core.xml
│ ├── org.eclipse.wst.jsdt.ui.superType.container
│ └── org.eclipse.wst.jsdt.ui.superType.name
├── pom.xml
├── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── gome/
│ │ └── testclover/
│ │ ├── init/
│ │ │ ├── InitAllJobWithServlet.java
│ │ │ ├── InitServletWithSchedulerClientInitial.java
│ │ │ ├── InitServletWithStartup.java
│ │ │ └── InitSpringAnnotationWithStartup.java
│ │ ├── localjob/
│ │ │ ├── CronLocalJob.java
│ │ │ ├── FixedTimeLocalJob.java
│ │ │ └── LocalJobTest.java
│ │ ├── remotejob/
│ │ │ └── RemoteCronJob.java
│ │ └── spring/
│ │ ├── MyRemoteJob.java
│ │ ├── RemoteCronJobWithSpringAnnotation.java
│ │ ├── RemoteFixedDateJobWithSpringAnnotation.java
│ │ ├── RemoteJob1WithSpring.java
│ │ ├── RemoteJob1WithSpringAnnotation.java
│ │ ├── RemoteJob2WithSpring.java
│ │ ├── RemoteJob2WithSpringAnnotation.java
│ │ ├── RemoteJob3WithSpring.java
│ │ ├── RemoteJob3WithSpringAnnotation.java
│ │ ├── RemoteJobWithSpring.java
│ │ └── RemoteJobWithSpringAnnotation.java
│ ├── resources/
│ │ └── spring-config.xml
│ └── webapp/
│ ├── META-INF/
│ │ └── MANIFEST.MF
│ ├── WEB-INF/
│ │ └── web.xml
│ └── index.jsp
└── test-clover.iml
SYMBOL INDEX (1029 symbols across 166 files)
FILE: clover/clover-admin/src/main/java/com/gome/clover/listener/Log4jConfigListener.java
class Log4jConfigListener (line 34) | public class Log4jConfigListener implements ServletContextListener{
method contextDestroyed (line 39) | public void contextDestroyed(ServletContextEvent event) {
method contextInitialized (line 43) | public void contextInitialized(ServletContextEvent event) {
FILE: clover/clover-admin/src/main/java/com/gome/clover/servlet/CloverServletHandle.java
class CloverServletHandle (line 64) | public class CloverServletHandle extends HttpServlet {
method doGet (line 68) | protected void doGet(HttpServletRequest request, HttpServletResponse r...
method doPost (line 73) | protected void doPost(HttpServletRequest request, HttpServletResponse ...
method handleJobAdd (line 121) | private String handleJobAdd(HttpServletRequest request) {
method handleJobDataDelete (line 149) | private String handleJobDataDelete(String id) {
method handleJobDelete (line 161) | private String handleJobDelete(String id) {
method handleJobDetail (line 209) | private String handleJobDetail(String id) {
method handleLogDetail (line 268) | private String handleLogDetail(String id) {
method handleContactAdd (line 293) | private String handleContactAdd(HttpServletRequest request) {
method handleContactUpdate (line 317) | private String handleContactUpdate(HttpServletRequest request) {
method handleContactDelete (line 343) | private String handleContactDelete(HttpServletRequest request) {
method handleContactDetail (line 355) | private String handleContactDetail(HttpServletRequest request) {
method handleStartupCloverServer (line 381) | private String handleStartupCloverServer() {
method handleStopCloverServer (line 407) | private String handleStopCloverServer() {
method handleStartupServerHeartBeat (line 434) | private String handleStartupServerHeartBeat() {
method handleStopServerHeartBeat (line 460) | private String handleStopServerHeartBeat() {
method handleStartupMonitorHeartBeat (line 486) | private String handleStartupMonitorHeartBeat() {
method handleStopMonitorHeartBeat (line 512) | private String handleStopMonitorHeartBeat() {
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteCronJobWithSpringAnnotation.java
class RemoteCronJobWithSpringAnnotation (line 35) | @Component
method executeJob (line 39) | @Override
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteFixedDateJobWithSpring.java
class RemoteFixedDateJobWithSpring (line 7) | public class RemoteFixedDateJobWithSpring extends RemoteJob {
method executeJob (line 9) | @Override
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteFixedDateJobWithSpringAnnotation.java
class RemoteFixedDateJobWithSpringAnnotation (line 35) | @CloverJobAnnotation(jobGroup = "RemoteJobWithSpringAnnotationGroup",job...
method executeJob (line 38) | @Override
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteJobWithSpring.java
class RemoteJobWithSpring (line 7) | public class RemoteJobWithSpring extends RemoteJob {
method executeJob (line 9) | @Override
FILE: clover/clover-admin/src/main/java/com/gome/testclover/spring/TestProperties.java
class TestProperties (line 32) | public class TestProperties {
method main (line 33) | public static void main(String[] args) {
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/WdatePicker.js
function B (line 68) | function B() {
function E (line 96) | function E(A, $, _) {
function L (line 106) | function L() {
function F (line 117) | function F(F) {
function M (line 145) | function M(A, $, B) {
function Z (line 157) | function Z($, _) {
function G (line 161) | function G($) {
function W (line 182) | function W(F) {
function N (line 210) | function N($) {
function a (line 216) | function a($) {
function D (line 223) | function D($) {
function Y (line 228) | function Y() {
function H (line 233) | function H() {
function U (line 245) | function U(J, C) {
function S (line 314) | function S(_, $) {
function Q (line 318) | function Q(_, $) {
function K (line 322) | function K(H, $) {
FILE: clover/clover-admin/src/main/webapp/js/DatePicker/calendar.js
function C (line 5) | function C(A){return A<62?String.fromCharCode(A+=A<26?65:A<52?71:-4):A<6...
FILE: clover/clover-admin/src/main/webapp/js/Map.js
function Map (line 25) | function Map() {
FILE: clover/clover-admin/src/main/webapp/js/bootstrap-tooltip.js
function removeWithAnimation (line 233) | function removeWithAnimation() {
FILE: clover/clover-admin/src/main/webapp/js/highcharts.js
function v (line 8) | function v(a,b){var c;a||(a={});for(c in b)a[c]=b[c];return a}
function y (line 8) | function y(){var a,b=arguments.length,c={},d=function(a,b){var c,h;for(h...
function u (line 8) | function u(a,b){return parseInt(a,b||10)}
function fa (line 8) | function fa(a){return typeof a==="string"}
function V (line 8) | function V(a){return typeof a===
function Ba (line 9) | function Ba(a){return Object.prototype.toString.call(a)==="[object Array]"}
function Ca (line 9) | function Ca(a){return typeof a==="number"}
function ka (line 9) | function ka(a){return I.log(a)/I.LN10}
function da (line 9) | function da(a){return I.pow(10,a)}
function ga (line 9) | function ga(a,b){for(var c=a.length;c--;)if(a[c]===b){a.splice(c,1);break}}
function r (line 9) | function r(a){return a!==x&&a!==null}
function A (line 9) | function A(a,b,c){var d,e;if(fa(b))r(c)?a.setAttribute(b,c):a&&a.getAttr...
function ha (line 9) | function ha(a){return Ba(a)?
function o (line 10) | function o(){var a=arguments,b,c,d=a.length;for(b=0;b<d;b++)if(c=a[b],ty...
function L (line 10) | function L(a,b){if(Da&&b&&b.opacity!==x)b.filter="alpha(opacity="+b.opac...
function U (line 10) | function U(a,b,c,d,e){a=z.createElement(a);b&&v(a,b);e&&L(a,{padding:0,b...
function ea (line 10) | function ea(a,b){var c=function(){};c.prototype=new a;v(c.prototype,b);r...
function Na (line 10) | function Na(a,b,c,d){var e=N.lang,f=b===-1?((a||0).toString().split(".")...
function ua (line 11) | function ua(a,b){return Array((b||2)+1-String(a).length).join(0)+a}
function Ea (line 11) | function Ea(a,b){for(var c="{",d=!1,e,f,g,h,i,j=[];(c=a.indexOf(c))!==-1...
function ib (line 12) | function ib(a,b,c,d){var e,c=o(c,1);e=a/c;b||(b=[1,2,2.5,5,10],d&&d.allo...
function yb (line 12) | function yb(a,b){var c=b||[[zb,[1,2,5,
function Ab (line 13) | function Ab(a,b,c,d){var e=[],f={},g=N.global.useUTC,h,i=new Date(b),j=a...
function Fb (line 15) | function Fb(){this.symbol=this.color=0}
function Gb (line 15) | function Gb(a,b){var c=a.length,d,e;for(e=0;e<c;e++)a[e].ss_i=e;a.sort(f...
function Fa (line 15) | function Fa(a){for(var b=a.length,c=a[0];b--;)a[b]<c&&(c=a[b]);return c}
function pa (line 15) | function pa(a){for(var b=a.length,c=a[0];b--;)a[b]>c&&(c=a[b]);return c}
function Ga (line 15) | function Ga(a,
function Ra (line 16) | function Ra(a){$a||($a=U(wa));a&&$a.appendChild(a);$a.innerHTML=""}
function qa (line 16) | function qa(a,b){var c="Highcharts error #"+a+": www.highcharts.com/erro...
function ia (line 16) | function ia(a){return parseFloat(a.toPrecision(14))}
function Ha (line 16) | function Ha(a,b){xa=o(a,b.animation)}
function Hb (line 16) | function Hb(){var a=N.global.useUTC,b=a?"getUTC":"get",c=a?"setUTC":"set...
function ra (line 17) | function ra(){}
function Ia (line 17) | function Ia(a,b,c,d){this.axis=a;this.pos=b;this.type=c||"";this.isNew=!...
function ob (line 17) | function ob(a,b){this.axis=a;if(b)this.options=b,this.id=b.id}
function Ib (line 17) | function Ib(a,b,c,d,e,f){var g=a.chart.inverted;this.axis=a;this.isNegat...
function ab (line 18) | function ab(){this.init.apply(this,arguments)}
function pb (line 18) | function pb(){this.init.apply(this,arguments)}
function qb (line 18) | function qb(a,b){this.init(a,b)}
function rb (line 18) | function rb(a,b){this.init(a,b)}
function sb (line 18) | function sb(){this.init.apply(this,arguments)}
function j (line 70) | function j(){var a,b;a=o.element.style;w=(La===void 0||xb===void 0||s.st...
function k (line 71) | function k(){var a=s.styles,a=a&&a.textAlign,b=hb+q*(1-G),c;c=h?0:A;if(r...
function m (line 71) | function m(a,b){B?B.attr(a,b):u[a]=b}
function l (line 71) | function l(){o.add(s);s.attr({text:a,x:b,y:c});B&&r(e)&&s.attr({anchorX:e,
function a (line 90) | function a(){var a=b.length,d;for(d=0;d<a;d++)b[d]();
function a (line 188) | function a(a){var g=c.width||gb(d,"width"),h=c.height||gb(d,"height"),a=...
function a (line 236) | function a(){var a={width:b.yAxis.len,height:b.xAxis.len};n(["group",
FILE: clover/clover-admin/src/main/webapp/js/html5.js
function h (line 3) | function h(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("hea...
function i (line 3) | function i(){var a=l.elements;return typeof a=="string"?a.split(" "):a}
function j (line 3) | function j(a){var b={},c=a.createElement,f=a.createDocumentFragment,g=f(...
function k (line 3) | function k(a){var b;return a.documentShived?a:(l.shivCSS&&!f&&(b=!!h(a,"...
function p (line 3) | function p(a){var b,c=a.getElementsByTagName("*"),d=c.length,e=RegExp("^...
function q (line 3) | function q(a){var b,c=a.attributes,d=c.length,e=a.ownerDocument.createEl...
function r (line 3) | function r(a){var b,c=a.split("{"),d=c.length,e=RegExp("(^|[\\s,>+~])("+...
function s (line 3) | function s(a){var b=a.length;while(b--)a[b].removeNode()}
function t (line 3) | function t(a){var b,c,d=a.namespaces,e=a.parentWindow;return!o||a.printS...
FILE: clover/clover-admin/src/main/webapp/js/jquery.validate.js
function handle (line 60) | function handle() {
function delegate (line 305) | function delegate(event) {
function handler (line 1132) | function handler(e) {
function checknumber (line 1397) | function checknumber(number){
FILE: clover/clover-admin/src/main/webapp/js/ui.datepicker.js
function Datepicker (line 25) | function Datepicker() {
function extendRemove (line 1578) | function extendRemove(target, props) {
function isArray (line 1587) | function isArray(a) {
FILE: clover/clover-admin/src/test/java/TestAnnotationWithSpring.java
class TestAnnotationWithSpring (line 31) | @ContextConfiguration({"classpath:spring/spring-config.xml"})
method testInit (line 34) | @Test
FILE: clover/clover-client/src/main/java/com/gome/bg/clover/client/job/LocalJob.java
class LocalJob (line 38) | public abstract class LocalJob implements Job {
method execute (line 41) | @Override
method executeJob (line 57) | public abstract void executeJob(JobExecutionContext context);
FILE: clover/clover-client/src/main/java/com/gome/bg/clover/client/job/RemoteJob.java
class RemoteJob (line 38) | public abstract class RemoteJob implements Job {
method execute (line 41) | @Override
method executeJob (line 56) | public abstract void executeJob(JobExecutionContext context);
FILE: clover/clover-client/src/main/java/com/gome/bg/clover/client/job/SimpleJob.java
class SimpleJob (line 38) | public abstract class SimpleJob implements Job {
method execute (line 41) | @Override
method executeJob (line 58) | public abstract void executeJob(JobExecutionContext context);
FILE: clover/clover-client/src/main/java/com/gome/bg/clover/client/job/TransactionJob.java
class TransactionJob (line 38) | public abstract class TransactionJob implements Job {
method execute (line 41) | @Override
method executeJob (line 56) | public abstract void executeJob(JobExecutionContext context);
FILE: clover/clover-client/src/main/java/com/gome/bg/clover/client/module/SchedulerClientInitial.java
class SchedulerClientInitial (line 47) | @Component("SchedulerClientInitial")
method init (line 63) | @Override
method init (line 106) | public void init(List<String> jobClassList, boolean isRegisterToZK, bo...
method SchedulerClientInitial (line 121) | public SchedulerClientInitial() {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverConfigBeanDefinitionParser.java
class CloverConfigBeanDefinitionParser (line 44) | public class CloverConfigBeanDefinitionParser extends AbstractSingleBean...
method getBeanClass (line 49) | @Override
method doParse (line 54) | @Override
method doParseJobConfig (line 71) | private void doParseJobConfig(Element element) {
method resolveId (line 108) | @Override
FILE: clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverConfigInit.java
class CloverConfigInit (line 35) | public class CloverConfigInit {
method init (line 38) | @PostConstruct
method destroy (line 43) | @PreDestroy
method setElement (line 48) | public void setElement(Element element) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverJobAnnotationBean.java
class CloverJobAnnotationBean (line 43) | @Component
method setApplicationContext (line 48) | @Override
method postProcessBeforeInitialization (line 53) | @Override
method postProcessAfterInitialization (line 58) | @Override
method parseBean (line 64) | private void parseBean(Object bean) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverJobBeanDefinitionParser.java
class CloverJobBeanDefinitionParser (line 43) | public class CloverJobBeanDefinitionParser extends AbstractSingleBeanDef...
method getBeanClass (line 47) | @Override
method doParse (line 57) | @Override
method doParseElement (line 72) | private void doParseElement(Element element) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverJobNamespaceHandler.java
class CloverJobNamespaceHandler (line 30) | public class CloverJobNamespaceHandler extends NamespaceHandlerSupport {
method init (line 31) | @Override
FILE: clover/clover-core/src/main/java/com/gome/clover/common/cache/LRUCache.java
class LRUCache (line 30) | public class LRUCache {
method LRUCache (line 37) | public LRUCache(int i) {
method get (line 46) | public Entry get(Object key) {
method put (line 59) | public void put(Object key, Object value) {
method remove (line 82) | public void remove(Object key) {
method removeLast (line 104) | private void removeLast() {
method moveToHead (line 118) | private void moveToHead(Entry node) {
method clear (line 139) | public void clear() {
class Entry (line 147) | class Entry {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/cache/LRUCache2.java
class LRUCache2 (line 33) | public class LRUCache2<K,V> {
method LRUCache2 (line 43) | public LRUCache2 (int cacheSize) {
method get (line 59) | public synchronized V get (K key) {
method put (line 70) | public synchronized void put (K key, V value) {
method clear (line 76) | public synchronized void clear() {
method usedEntries (line 83) | public synchronized int usedEntries() {
method getAll (line 90) | public synchronized Collection<Map.Entry<K,V>> getAll() {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/compile/CreateAndCompileClassFile.java
class CreateAndCompileClassFile (line 33) | public class CreateAndCompileClassFile {
method compileAndLoading (line 35) | public static Class compileAndLoading(String classPath, String classNa...
method main (line 65) | public static void main(String args[]){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/compile/DynamicClassLoader.java
class DynamicClassLoader (line 35) | public class DynamicClassLoader extends ClassLoader {
method DynamicClassLoader (line 37) | public DynamicClassLoader(ClassLoader parent) {
method loadClass (line 41) | @SuppressWarnings("unchecked")
method pathParser (line 69) | private String pathParser(String path) {
method classPathParser (line 73) | private String classPathParser(String path) {
method classNameParser (line 84) | private String classNameParser(String className) {
method noSuffix (line 90) | private String noSuffix(String className) {
method main (line 94) | public static void main(String[] arguments) throws Exception {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/compile/MyClassLoader.java
class MyClassLoader (line 16) | public class MyClassLoader extends ClassLoader {
method MyClassLoader (line 24) | public MyClassLoader() {
method MyClassLoader (line 31) | public MyClassLoader(String MyClasspath) {
method SetMyClasspath (line 42) | public void SetMyClasspath(String myClasspath) {
method findClass (line 52) | public Class findClass(String name) {
method loadClassData (line 69) | private byte[] loadClassData(String name) throws IOException {
method loadClass (line 86) | public Class loadClass(byte[] classData, String className)
method loadClass (line 97) | public Class loadClass(String name) throws ClassNotFoundException {
method loadClass (line 104) | protected Class loadClass(String name, boolean resolve)
method main (line 142) | public static void main(String[] args) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/compress/CompressUtil.java
class CompressUtil (line 30) | public class CompressUtil {
method compress (line 31) | public static byte[] compress(byte[] orig) {
method uncompress (line 39) | public static byte[] uncompress(byte[] compressed) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/encryption/DesUtil.java
class DesUtil (line 15) | public class DesUtil {
method decrypt (line 35) | public final static String decrypt(String data,String cryptKey) throws...
method encrypt (line 47) | public final static String encrypt(String data,String cryptKey) throws...
method encrypt (line 60) | private static byte[] encrypt(byte[] data, byte[] key) throws Exception {
method decrypt (line 88) | private static byte[] decrypt(byte[] data, byte[] key) throws Exception {
method hex2byte (line 106) | public static byte[] hex2byte(byte[] b) {
method byte2hex (line 117) | public static String byte2hex(byte[] b) {
method main (line 131) | public static void main(String args[]) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/encryption/MD5Util.java
class MD5Util (line 13) | public class MD5Util {
method encryptMD5 (line 19) | public static String encryptMD5(String inStr){
method encryptMD5WithKey (line 48) | public static String encryptMD5WithKey(String encryptStr,String encryp...
method convertMD5 (line 95) | public static String convertMD5(String inStr){
method toHex (line 105) | public static String toHex(byte input[])
method main (line 122) | public static void main(String args[]) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/exception/AppException.java
class AppException (line 28) | public class AppException extends RuntimeException{
method AppException (line 30) | public AppException() {
method AppException (line 34) | public AppException(String message) {
method AppException (line 38) | public AppException(String message, Throwable cause) {
method AppException (line 42) | public AppException(Throwable cause) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/file/ConfigFile.java
class ConfigFile (line 36) | public class ConfigFile {
method ConfigFile (line 52) | public ConfigFile(ResourceBundle rb) {
method commonConfig (line 56) | public static ConfigFile commonConfig() {
method mongoDBConfig (line 59) | public static ConfigFile mongoDBConfig() {
method zkConfig (line 62) | public static ConfigFile zkConfig() {return zkConfig;}
method redisConfig (line 63) | public static ConfigFile redisConfig() {return redisConfig;}
method getItem (line 65) | public String getItem(String item,String defaultValue) {
method getIntItem (line 81) | public int getIntItem(String item, String defaultValue) {
method getLongItem (line 91) | public long getLongItem(String item, String defaultValue) {
method getDoubleItem (line 101) | public double getDoubleItem(String item, String defaultValue) {
method getBooleanItem (line 112) | public boolean getBooleanItem(String item, boolean defaultValue) {
method getNodeValue (line 121) | protected String getNodeValue(Node _node) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/hash/HashTimes.java
class HashTimes (line 28) | public class HashTimes
method use33 (line 30) | public static int use33(String key)
method use37 (line 41) | public static int use37(String key) {
method main (line 45) | public static void main(String[] args)
FILE: clover/clover-core/src/main/java/com/gome/clover/common/mongodb/BuildMongoDBData.java
class BuildMongoDBData (line 40) | public class BuildMongoDBData {
method getInsertJobBasicDBObject (line 41) | public static BasicDBObject getInsertJobBasicDBObject(ClientJob client...
method getDeleteJobBasicDBObject (line 62) | public static BasicDBObject getDeleteJobBasicDBObject(ClientJob client...
method getInsertLogBasicDBObject (line 69) | public static BasicDBObject getInsertLogBasicDBObject(String jobKey, S...
method saveTempJobData2DB (line 81) | public static void saveTempJobData2DB(ServerJob serverJob) {
method getDBObjectFromClientJob (line 92) | public static DBObject getDBObjectFromClientJob(ClientJob clientJob){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/mongodb/DBTableInfo.java
class DBTableInfo (line 29) | public class DBTableInfo {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/mongodb/MongoDBUtil.java
type MongoDBUtil (line 41) | public enum MongoDBUtil {
method getDB (line 46) | private static void getDB() {
method getCollection (line 84) | public static DBCollection getCollection(String collectionName) {
method findOneByCondition (line 97) | public static DBObject findOneByCondition(DBObject condition, String c...
method findByCondition (line 102) | public static DBCursor findByCondition(DBObject condition, String coll...
method insert (line 107) | public static boolean insert(BasicDBObject basicDBObject, String colle...
method insertOrUpdate (line 113) | public static boolean insertOrUpdate(BasicDBObject basicDBObject, Stri...
method update (line 168) | public static boolean update(BasicDBObject basicDBObject, String colle...
method delete (line 227) | public static boolean delete(BasicDBObject condition, String collectio...
method update (line 233) | public static boolean update(BasicDBObject queryCondition, BasicDBObje...
method updateOrDeleteDB (line 246) | public static void updateOrDeleteDB(JobExecutionContext context) {
method updateJobTime (line 286) | public static void updateJobTime(JobExecutionContext context, int upda...
method isEnabledDB (line 316) | public static boolean isEnabledDB(){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/netty/client/ObjectReqClient.java
class ObjectReqClient (line 30) | public class ObjectReqClient {
method connect (line 33) | public void connect(int port ,String host, final ZeroMQEntity entity) ...
method main (line 98) | public static void main(String[] args) throws Exception {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/netty/client/SubReqClientHandel.java
class SubReqClientHandel (line 19) | public class SubReqClientHandel extends SimpleChannelInboundHandler {
method SubReqClientHandel (line 22) | public SubReqClientHandel(ZeroMQEntity entity){
method SubReqClientHandel (line 25) | public SubReqClientHandel(){
method channelRead0 (line 38) | @Override
method resetClientJobTriggerAndJobType (line 55) | private void resetClientJobTriggerAndJobType(ClientJob clientJob) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/netty/protol/SubScribeResp.java
class SubScribeResp (line 11) | public class SubScribeResp implements Serializable {
method SubScribeResp (line 22) | public SubScribeResp(String subRespId,String userName,String address){
method getSubReqId (line 28) | public String getSubReqId() {
method setSubReqId (line 32) | public void setSubReqId(String subReqId) {
method getRespCode (line 36) | public String getRespCode() {
method setRespCode (line 40) | public void setRespCode(String respCode) {
method getDesc (line 44) | public String getDesc() {
method setDesc (line 48) | public void setDesc(String desc) {
method toString (line 52) | @Override
FILE: clover/clover-core/src/main/java/com/gome/clover/common/netty/protol/SubscribeReq.java
class SubscribeReq (line 11) | public class SubscribeReq implements Serializable{
method SubscribeReq (line 23) | public SubscribeReq(String subReqId){
method toString (line 32) | @Override
method getSubReqId (line 38) | public String getSubReqId() {
method setSubReqId (line 41) | public void setSubReqId(String subReqId) {
method getUserName (line 44) | public String getUserName() {
method setUserName (line 47) | public void setUserName(String userName) {
method getPorductName (line 50) | public String getPorductName() {
method setPorductName (line 53) | public void setPorductName(String porductName) {
method getPhoneNumber (line 56) | public String getPhoneNumber() {
method setPhoneNumber (line 59) | public void setPhoneNumber(String phoneNumber) {
method getAddress (line 63) | public String getAddress() {
method setAddress (line 67) | public void setAddress(String address) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/netty/server/ObjectRespServer.java
class ObjectRespServer (line 17) | public class ObjectRespServer {
method bind (line 19) | public void bind(int port)throws Exception{
method start (line 50) | public void start(int port) throws Exception {
method main (line 88) | public static void main(String[] args) throws Exception {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/netty/server/SubReqServerHandel.java
class SubReqServerHandel (line 36) | public class SubReqServerHandel extends SimpleChannelInboundHandler {
method channelRead0 (line 38) | @Override
method exceptionCaught (line 50) | @Override
method serverHandelJob (line 58) | public void serverHandelJob(ZeroMQEntity zeroMQEntity,ChannelHandlerC...
method resetClientJobTriggerAndJobType (line 159) | private void resetClientJobTriggerAndJobType(ClientJob clientJob) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/rocketmq/ConsumerUtil.java
class ConsumerUtil (line 48) | public class ConsumerUtil {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/rocketmq/ProducerUtil.java
class ProducerUtil (line 39) | public class ProducerUtil {
method send (line 54) | public static SendResult send(Message msg) throws InterruptedException...
method shutdown (line 58) | public static void shutdown(){
method main (line 61) | public static void main(String args[]){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/rpc/HttpRequestEntity.java
class HttpRequestEntity (line 31) | public class HttpRequestEntity implements Serializable {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/rpc/HttpRequestHandler.java
class HttpRequestHandler (line 40) | public class HttpRequestHandler extends SimpleChannelUpstreamHandler
method decodeUri (line 45) | private String decodeUri(String uri) {
method getParameterFromUri (line 56) | private static String getParameterFromUri(String startPrefix, String uri)
method messageReceived (line 67) | public void messageReceived(ChannelHandlerContext ctx, MessageEvent e)
method getParameterValue (line 87) | private String getParameterValue(String parameterName, Map<String, Lis...
method writeResponse (line 97) | private void writeResponse(MessageEvent e, HttpResponseStatus httpResp...
method exceptionCaught (line 108) | public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e)
FILE: clover/clover-core/src/main/java/com/gome/clover/common/rpc/HttpResponseEntity.java
class HttpResponseEntity (line 30) | public class HttpResponseEntity implements Serializable {
method HttpResponseEntity (line 44) | public HttpResponseEntity() {
method HttpResponseEntity (line 47) | public HttpResponseEntity(String msg, String dest) {
method getSuccess (line 52) | public int getSuccess() {
method setSuccess (line 56) | public void setSuccess(int success) {
method getMsg (line 60) | public String getMsg() {
method setMsg (line 64) | public void setMsg(String msg) {
method getDest (line 68) | public String getDest() {
method setDest (line 72) | public void setDest(String dest) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/rpc/QueueDaemon.java
class QueueDaemon (line 39) | public class QueueDaemon {
method QueueDaemon (line 42) | public QueueDaemon(int port)
method start (line 47) | public void start() {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/rpc/QueueServer.java
type QueueServer (line 31) | public enum QueueServer {
method startup (line 35) | public boolean startup(){
method startup (line 49) | public boolean startup(int port){
method main (line 63) | public static void main(String[] args) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/IMonitorService.java
type IMonitorService (line 28) | public interface IMonitorService {
method getMonitorInfoBean (line 29) | public MonitorInfoBean getMonitorInfoBean() throws Exception;
FILE: clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/MonitorInfoBean.java
class MonitorInfoBean (line 28) | public class MonitorInfoBean {
method getFreeMemory (line 56) | public long getFreeMemory() {
method setFreeMemory (line 60) | public void setFreeMemory(long freeMemory) {
method getFreePhysicalMemorySize (line 64) | public long getFreePhysicalMemorySize() {
method setFreePhysicalMemorySize (line 68) | public void setFreePhysicalMemorySize(long freePhysicalMemorySize) {
method getMaxMemory (line 72) | public long getMaxMemory() {
method setMaxMemory (line 76) | public void setMaxMemory(long maxMemory) {
method getOsName (line 80) | public String getOsName() {
method setOsName (line 84) | public void setOsName(String osName) {
method getTotalMemory (line 88) | public long getTotalMemory() {
method setTotalMemory (line 92) | public void setTotalMemory(long totalMemory) {
method getTotalMemorySize (line 96) | public long getTotalMemorySize() {
method setTotalMemorySize (line 100) | public void setTotalMemorySize(long totalMemorySize) {
method getTotalThread (line 104) | public int getTotalThread() {
method setTotalThread (line 108) | public void setTotalThread(int totalThread) {
method getUsedMemory (line 112) | public long getUsedMemory() {
method setUsedMemory (line 116) | public void setUsedMemory(long usedMemory) {
method getCpuRatio (line 120) | public double getCpuRatio() {
method setCpuRatio (line 124) | public void setCpuRatio(double cpuRatio) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/MonitorServiceImpl.java
class MonitorServiceImpl (line 32) | public class MonitorServiceImpl implements IMonitorService {
method getMonitorInfoBean (line 46) | public MonitorInfoBean getMonitorInfoBean() throws Exception {
method getCpuRateForLinux (line 97) | private static double getCpuRateForLinux(){
method getCpuRatioForWindows (line 174) | private double getCpuRatioForWindows() {
method readCpu (line 205) | private long[] readCpu(final Process proc) {
method main (line 275) | public static void main(String[] args) throws Exception {
class Bytes (line 293) | class Bytes {
method substring (line 294) | public static String substring(String src, int start_idx, int end_idx){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/SystemInfoUtil.java
class SystemInfoUtil (line 35) | public class SystemInfoUtil {
method getMemRatio (line 41) | public static double getMemRatio(){
method getTotalThread (line 47) | public static int getTotalThread(){
method getCpuRatio (line 55) | public static double getCpuRatio(){
method getCpuRatioForWindows (line 69) | private static double getCpuRatioForWindows() {
method readCpu (line 89) | private static long[] readCpu(final Process proc) {
method substring (line 157) | private static String substring(String src, int start_idx, int end_idx) {
method getCpuRateForLinux (line 166) | private static double getCpuRateForLinux(){
method main (line 235) | public static void main(String[] args) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/WindowsInfoUtil.java
class WindowsInfoUtil (line 37) | public class WindowsInfoUtil {
method main (line 42) | public static void main(String[] args) {
method getMemery (line 49) | public static String getMemery(){
method getDisk (line 61) | public static List<String> getDisk() {
method getCpuRatioForWindows (line 79) | public static String getCpuRatioForWindows() {
method readCpu (line 100) | private static long[] readCpu(final Process proc) {
method substring (line 167) | private static String substring(String src, int start_idx, int end_idx) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/thread/MyThreadPool.java
class MyThreadPool (line 29) | public class MyThreadPool {
method MyThreadPool (line 41) | private MyThreadPool() {
method MyThreadPool (line 46) | private MyThreadPool(int workerNum) {
method getThreadPool (line 56) | public static MyThreadPool getThreadPool() {
method getThreadPool (line 62) | public static MyThreadPool getThreadPool(int workerNum) {
method execute (line 71) | public void execute(Runnable task) {
method execute (line 79) | public void execute(Runnable[] task) {
method execute (line 88) | public void execute(List<Runnable> task) {
method destroy (line 97) | public void destroy() {
method getWorkThreadNumber (line 115) | public int getWorkThreadNumber() {
method getFinishedTasknumber (line 120) | public int getFinishedTasknumber() {
method getWaitTasknumber (line 125) | public int getWaitTasknumber() {
method toString (line 130) | @Override
class WorkThread (line 139) | private class WorkThread extends Thread {
method run (line 146) | @Override
method stopWorker (line 170) | public void stopWorker() {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/ClassUtil.java
class ClassUtil (line 35) | public class ClassUtil {
method loggerError (line 41) | private static void loggerError(Exception e) {
method getClass (line 45) | public static Class<?> getClass(String className) {
method getCachedClass (line 56) | private static Class<?> getCachedClass(String className) {
method classForName (line 62) | private static Class<?> classForName(String className) {
method setCachedClass (line 73) | private synchronized static void setCachedClass(String className, Clas...
method getInstance (line 77) | public static Object getInstance(Class<?> cls) {
method BytesToObject (line 90) | public static Object BytesToObject(byte[] bytes) {
method ObjectToBytes (line 113) | public static byte[] ObjectToBytes(Object object) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/CommonConstants.java
class CommonConstants (line 31) | public class CommonConstants {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/ConfigUtil.java
class ConfigUtil (line 14) | public class ConfigUtil {
method ConfigUtil (line 25) | private ConfigUtil(String propFile) {
method getInstance (line 39) | public static ConfigUtil getInstance(String propFile) {
method initPropertFile (line 49) | public void initPropertFile() {
method getValue (line 72) | public String getValue(String key) {
method setValue (line 81) | public synchronized void setValue(String key, String value) {
method checkFileReload (line 89) | private boolean checkFileReload() {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/DateUtil.java
class DateUtil (line 37) | public class DateUtil {
method getServerTime (line 43) | public static long getServerTime() {
method formatWithDefaultPattern (line 52) | public static String formatWithDefaultPattern(Date date) {
method formatWithCurrentTime (line 61) | public static String formatWithCurrentTime(String pattern) {
method format (line 71) | public static String format(Date date, String pattern) {
method formatWithDefaultPattern (line 86) | public static Date formatWithDefaultPattern(String dateStr) {
method format (line 102) | public static Date format(String dateStr, String pattern) {
method dateFormat (line 117) | public static String dateFormat(long time) {
method currentDateTime (line 125) | public static String currentDateTime() {
method getNextValidTimeAfter (line 137) | public static Date getNextValidTimeAfter(String cronExpressionStr, Da...
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/HttpRequest.java
class HttpRequest (line 35) | public class HttpRequest {
method sendGet (line 45) | public static String sendGet(String url, String param) {
method sendPost (line 99) | public static String sendPost(String url, String param) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/IpUtil.java
class IpUtil (line 41) | public class IpUtil {
method getLocalIP (line 45) | public static String getLocalIP() {
method getLocalName (line 82) | public static String getLocalName() {
method closeReader (line 100) | private static void closeReader(Reader reader) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/KeyGen.java
class KeyGen (line 8) | public class KeyGen {
method getCRC (line 9) | public static short getCRC(String s, int i, byte bytes[]){
method encodeGroups (line 31) | public static String encodeGroups(BigInteger biginteger){
method encodeGroup (line 48) | public static String encodeGroup(int i){
method MakeKey (line 68) | public static String MakeKey(String name, int days, int id){
method main (line 105) | public static void main(String[] args){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/List2StringUtil.java
class List2StringUtil (line 35) | public class List2StringUtil {
method json2List (line 41) | public static List json2List(String jsonStr){
method list2JsonStr (line 50) | public static String list2JsonStr(List list){
method getRandomValueFromList (line 59) | public static String getRandomValueFromList(List<String> list){
method addUnDuplicateString2List (line 72) | public static boolean addUnDuplicateString2List(String str, List<Strin...
method addUnDuplicateString2List2 (line 85) | public static boolean addUnDuplicateString2List2(String str, List<Stri...
method listToArray (line 93) | public static String[] listToArray(List<String> list){
method remove (line 102) | public static void remove(List<String> list,String str){
method getServerIpList (line 107) | public static List<String> getServerIpList(List<String> serverDataList){
method toBytes (line 117) | public static byte[] toBytes(String content) {
method toString (line 124) | public static String toString(byte[] bytes) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/NetUtils.java
class NetUtils (line 38) | public class NetUtils
method getRandomPort (line 57) | public static int getRandomPort()
method getAvailablePort (line 62) | public static int getAvailablePort() {
method getAvailablePort (line 84) | public static int getAvailablePort(int port) {
method isInvalidPort (line 112) | public static boolean isInvalidPort(int port)
method isValidAddress (line 117) | public static boolean isValidAddress(String address)
method isLocalHost (line 122) | public static boolean isLocalHost(String host)
method isAnyHost (line 127) | public static boolean isAnyHost(String host)
method isInvalidLocalHost (line 132) | public static boolean isInvalidLocalHost(String host) {
method isValidLocalHost (line 136) | public static boolean isValidLocalHost(String host)
method getLocalSocketAddress (line 141) | public static InetSocketAddress getLocalSocketAddress(String host, int...
method isValidAddress (line 145) | private static boolean isValidAddress(InetAddress address)
method getLocalHost (line 153) | public static String getLocalHost()
method getLocalAddress (line 160) | public static InetAddress getLocalAddress()
method getLogHost (line 169) | public static String getLogHost() {
method getLocalAddress0 (line 174) | private static InetAddress getLocalAddress0() {
method getHostName (line 215) | public static String getHostName(String address)
method getIpByHost (line 239) | public static String getIpByHost(String hostName)
method toAddressString (line 248) | public static String toAddressString(InetSocketAddress address)
method toAddress (line 253) | public static InetSocketAddress toAddress(String address) {
method toURL (line 267) | public static String toURL(String protocol, String host, int port, Str...
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/NettyUtil.java
class NettyUtil (line 19) | public class NettyUtil {
method nettyReqClientConnect (line 21) | public void nettyReqClientConnect(int port,String host)throws Exception{
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/ProgressUtil.java
class ProgressUtil (line 32) | public class ProgressUtil {
method main (line 33) | public static void main(String[] args) throws InterruptedException {
method getPid (line 39) | public static int getPid() {
method getRunTimeInfo (line 49) | public static String getRunTimeInfo() {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/PropertiesUtil.java
class PropertiesUtil (line 34) | public class PropertiesUtil {
method loadProperties (line 36) | public static Properties loadProperties(){
method loadProperties (line 57) | public static Properties loadProperties(String propertiesPath){
method writePropertiesFile (line 79) | public static boolean writePropertiesFile(String propertiesRealPath,Pr...
method main (line 100) | public static void main(String args[]){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/RandomNumUtil.java
class RandomNumUtil (line 30) | public class RandomNumUtil {
method getNextInt (line 34) | public static int getNextInt() {
method getNextIntString (line 41) | public static String getNextIntString() {
method getNextLong (line 47) | public static long getNextLong() {
method getNextLongString (line 52) | public static String getNextLongString() {
method getNextInt (line 58) | public static int getNextInt(int minValue, int maxValue) {
method getNextIntString (line 64) | public static String getNextIntString(int minValue, int maxValue) {
method getNextLong (line 70) | public static long getNextLong(long minValue, long maxValue) {
method getNextLongString (line 76) | public static String getNextLongString(long minValue, long maxValue) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/SendMailUtil.java
class SendMailUtil (line 44) | public class SendMailUtil{
method send (line 62) | public static void send(String str_to, String str_title, String str_co...
method sendEmailAttachment (line 120) | public static void sendEmailAttachment(String[] str_to, String str_title,
method sendMails (line 210) | public static void sendMails(String[] str_to, String str_title,
method sendDefaultMail (line 265) | public static void sendDefaultMail(String title,String content){
method sendMailByJobKey (line 283) | public static void sendMailByJobKey(String jobKey,String title,String ...
method main (line 298) | public static void main(String args[]){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/tools/StringUtil.java
class StringUtil (line 31) | public class StringUtil {
method isEmpty (line 33) | public static boolean isEmpty(String str) {
method isNotEmpty (line 38) | public static boolean isNotEmpty(String str) {
method isBlank (line 43) | public static boolean isBlank(String str) {
method isNotBlank (line 57) | public static boolean isNotBlank(String str) {
method clean (line 61) | public static String clean(String str) {
method trim (line 65) | public static String trim(String str) {
method split (line 68) | public static String[] split(String str, char separatorChar) {
method splitWorker (line 72) | private static String[] splitWorker(String str, char separatorChar, bo...
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zeromq/AsyncSendMsg.java
class AsyncSendMsg (line 38) | public class AsyncSendMsg {
method send (line 43) | public static boolean send(String ip, String port, String msg) {
method sendWithThreadPool (line 72) | public static void sendWithThreadPool(String ip, String port, String m...
method sendWithClientThreadPool (line 85) | public static void sendWithClientThreadPool(String ip, String port, St...
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zeromq/AsyncStartZeroMQ.java
class AsyncStartZeroMQ (line 38) | public class AsyncStartZeroMQ implements Runnable {
method AsyncStartZeroMQ (line 41) | public AsyncStartZeroMQ(String port){
method startup (line 44) | public static void startup(String port){
method run (line 47) | @Override
method main (line 62) | public static void main(String args[]){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zeromq/AsyncZMQPull.java
class AsyncZMQPull (line 28) | public class AsyncZMQPull {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQEntity.java
class ZeroMQEntity (line 35) | public class ZeroMQEntity implements Serializable {
method ZeroMQEntity (line 57) | public ZeroMQEntity() {}
method ZeroMQEntity (line 59) | public ZeroMQEntity(String destServer, String destIp, String jobInfo) {
method ZeroMQEntity (line 65) | public ZeroMQEntity(String destServer, String destIp, String jobInfo, ...
method getDestServer (line 72) | public String getDestServer() {
method setDestServer (line 76) | public void setDestServer(String destServer) {
method getJobInfo (line 80) | public String getJobInfo() {
method setJobInfo (line 84) | public void setJobInfo(String jobInfo) {
method getDestIp (line 88) | public String getDestIp() {
method setDestIp (line 92) | public void setDestIp(String destIp) {
method getMsg (line 96) | public String getMsg() {
method setMsg (line 100) | public void setMsg(String msg) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQPub.java
type ZeroMQPub (line 34) | public enum ZeroMQPub {
method send (line 37) | public boolean send(String addr,String msg,String topic){
method main (line 53) | public static void main(String args[]) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQPull.java
type ZeroMQPull (line 56) | public enum ZeroMQPull {
method recv (line 62) | public void recv(String addr) {
method resetClientJobTriggerAndJobType (line 171) | private void resetClientJobTriggerAndJobType(ClientJob clientJob) {
method stop (line 176) | public boolean stop() {//server 关闭zmq方法
method stop (line 183) | public boolean stop(String ip,String port) {
method main (line 191) | public static void main(String args[]) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQPush.java
type ZeroMQPush (line 33) | public enum ZeroMQPush {
method send (line 35) | public boolean send(String addr,String msg){
method main (line 50) | public static void main(String args[]){
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQSub.java
type ZeroMQSub (line 34) | public enum ZeroMQSub {
method recv (line 37) | public void recv(String addr){
method main (line 52) | public static void main(String args[]) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ClientDict.java
class ClientDict (line 37) | public class ClientDict {
method ClientDict (line 47) | public ClientDict() {
method init (line 51) | public boolean init() {
method getZK (line 63) | public CuratorFramework getZK() {
method hashClient (line 67) | public BasicDBObject hashClient(String jobClass, String hashKey) {
method hashClient4S (line 77) | public Map hashClient4S(String jobClass, String hashKey) {
method hashClientByFixedClientIps (line 81) | public BasicDBObject hashClientByFixedClientIps(String jobClass,String...
method hashClient4SByFixedClientIps (line 91) | public Map hashClient4SByFixedClientIps(String jobClass,String[] fixed...
method hashClientBySystemCapacity (line 95) | public BasicDBObject hashClientBySystemCapacity(String jobClass) {
method hashClient4SBySystemCapacity (line 104) | public Map hashClient4SBySystemCapacity(String jobClass) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ClientListener.java
class ClientListener (line 41) | public class ClientListener implements Watcher {
method ClientListener (line 48) | public ClientListener(String prefixPath, ZKConnect ZKConnect) {
method records (line 53) | public BasicDBList records() {
method hashClient (line 58) | public BasicDBObject hashClient(String jobClass, String hashKey) {
method removeRecord (line 62) | public void removeRecord(String id) {
method addRecord (line 66) | public void addRecord(String id) {
method reload (line 81) | public void reload() {
method process (line 114) | public void process(WatchedEvent event) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ClientNodes.java
class ClientNodes (line 41) | public class ClientNodes extends CommonNodes {
method hashClient (line 48) | public BasicDBObject hashClient(String jobClass, String hashKey) {
method hashClient4S (line 66) | public Map hashClient4S(String jobClass, String hashKey) {
method hashClientByFixedClientIps (line 83) | public BasicDBObject hashClientByFixedClientIps(String jobClass, Strin...
method hashClient4SByFixedClientIps (line 105) | public Map hashClient4SByFixedClientIps(String jobClass, String[] fixe...
method hashClientBySystemCapacity (line 126) | public BasicDBObject hashClientBySystemCapacity(String jobClass) {
method hashClient4SBySystemCapacity (line 182) | public Map hashClient4SBySystemCapacity(String jobClass) {
method containsKey (line 249) | public boolean containsKey(String id) {
method getRecordsByJobClass (line 253) | public BasicDBList getRecordsByJobClass(String jobClass) {
method findRecordsByIP (line 257) | public BasicDBList findRecordsByIP(String ip) {
method add (line 268) | public synchronized void add(BasicDBObject record) {
method remove (line 298) | public synchronized boolean remove(String id) {
method clear (line 319) | public void clear() {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/CommonNodes.java
class CommonNodes (line 33) | public class CommonNodes {
method allocateNo (line 34) | public static String allocateNo() {
method findIndexById (line 42) | public static int findIndexById(String id, BasicDBList items) {
method findIndexByIp (line 55) | public static int findIndexByIp(String ip, BasicDBList items) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ServerDict.java
class ServerDict (line 37) | public class ServerDict {
method ServerDict (line 47) | public ServerDict() {
method init (line 51) | public boolean init() {
method getZK (line 63) | public CuratorFramework getZK() {
method hashServer (line 67) | public BasicDBObject hashServer(String hashKey) {
method hashServer4S (line 76) | public Map hashServer4S(String hashKey) {
method hashServerByFixedServerIps (line 80) | public BasicDBObject hashServerByFixedServerIps(String[] fixedServerIps){
method hashServer4SByFixedServerIps (line 89) | public Map hashServer4SByFixedServerIps(String[] fixedServerIps){
method hashServerBySystemCapacity (line 92) | public BasicDBObject hashServerBySystemCapacity() {
method hashServer4SBySystemCapacity (line 100) | public Map hashServer4SBySystemCapacity() {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ServerListener.java
class ServerListener (line 39) | public class ServerListener implements Watcher {
method ServerListener (line 46) | public ServerListener(String prefixPath, ZKConnect zkConnect) {
method removeRecord (line 51) | public void removeRecord(String id) {
method addRecord (line 56) | public BasicDBObject addRecord(String id) {
method reload (line 73) | public void reload() {
method process (line 106) | public void process(WatchedEvent event) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ServerNodes.java
class ServerNodes (line 40) | public class ServerNodes extends CommonNodes {
method hashServer (line 44) | public BasicDBObject hashServer(String hashKey) {
method hashServer4S (line 61) | public Map hashServer4S(String hashKey) {
method hashServerByFixedServerIps (line 78) | public BasicDBObject hashServerByFixedServerIps(String[] fixedServerIp...
method hashServer4SByFixedServerIps (line 99) | public Map hashServer4SByFixedServerIps(String[] fixedServerIps) {
method hashServerBySystemCapacity (line 121) | public BasicDBObject hashServerBySystemCapacity() {
method hashServer4SBySystemCapacity (line 172) | public Map hashServer4SBySystemCapacity() {
method add (line 238) | public synchronized void add(BasicDBObject record) {
method remove (line 248) | public synchronized boolean remove(String id) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ZKConnect.java
class ZKConnect (line 42) | public class ZKConnect implements CuratorWatcher, CuratorListener, Conne...
method ZKConnect (line 47) | public ZKConnect() {
method start (line 51) | public boolean start() {
method addServerListener (line 64) | public void addServerListener(ServerListener serverListener) {
method addClientListener (line 68) | public void addClientListener(ClientListener clientListener) {
method removeServerListener (line 72) | public void removeServerListener(ServerListener serverListener) {
method removeClientListener (line 76) | public void removeClientListener(ClientListener clientListener) {
method checkAlive (line 80) | public boolean checkAlive() {
method getData (line 84) | public String getData(String path) throws Exception {
method exists (line 88) | public boolean exists(String path) {
method getChildrens (line 92) | public List<String> getChildrens(String path) throws Exception {
method stateChanged (line 99) | public void stateChanged(CuratorFramework client, ConnectionState newS...
method fireEvents (line 107) | private void fireEvents(WatchedEvent e) {
method eventReceived (line 119) | public void eventReceived(CuratorFramework client, CuratorEvent event)...
method process (line 126) | public void process(WatchedEvent event) {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ZKManager.java
class ZKManager (line 44) | public class ZKManager {
type keys (line 49) | public enum keys {
method ZKManager (line 52) | public ZKManager(Properties properties) throws Exception{
method reConnection (line 61) | public synchronized void reConnection() throws Exception{
method connect (line 69) | private void connect() throws Exception {
method createZookeeper (line 75) | private void createZookeeper(final CountDownLatch connectionLatch) thr...
method sessionEvent (line 93) | private void sessionEvent(CountDownLatch connectionLatch, WatchedEvent...
method close (line 107) | public void close() throws InterruptedException {
method createProperties (line 112) | public static Properties createProperties(){
method getRootPath (line 121) | public String getRootPath(){
method getConnectStr (line 124) | public String getConnectStr(){
method checkZookeeperState (line 127) | public boolean checkZookeeperState() throws Exception{
method isExists (line 131) | public boolean isExists(String path) throws Exception{
method setData (line 134) | public void setData(String path,String data) throws Exception{
method getData (line 140) | public String getData(String path)throws Exception{
method createPath (line 146) | public void createPath(ZooKeeper zk, String path,CreateMode createMod...
method delete (line 159) | public void delete(String path)throws Exception {
method getAcl (line 162) | public List<ACL> getAcl() {
method getZooKeeper (line 165) | public ZooKeeper getZooKeeper() throws Exception {
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ZKUtil.java
class ZKUtil (line 54) | public class ZKUtil {
method create (line 57) | public static CuratorFramework create() {
method exists (line 75) | public static boolean exists(CuratorFramework client, String path, Cur...
method exists (line 88) | public static boolean exists(CuratorFramework client, String path)
method createPath (line 93) | public static void createPath(CuratorFramework client, String path, St...
method setPath (line 102) | public static void setPath(CuratorFramework client, String path, Strin...
method updateServerTimestamp (line 115) | public static void updateServerTimestamp(long timestamp, String key) {
method readServerTimestamp (line 125) | public static long readServerTimestamp(String key) {
method getData (line 133) | public static String getData(CuratorFramework client, String path) {
method getData (line 137) | public static String getData(CuratorFramework client, String path, Cur...
method createEphemeralSequential (line 153) | public static String createEphemeralSequential(CuratorFramework client...
method remove (line 162) | public static void remove(CuratorFramework client, String path) {
method delete (line 176) | public static void delete(CuratorFramework client, String path) {
method getChilds (line 185) | public static List<String> getChilds(CuratorFramework client, String p...
method getChilds (line 189) | public static List<String> getChilds(CuratorFramework client, String p...
method getDataByParameter (line 202) | public static String getDataByParameter(String path,String qKey,String...
method getDataByParameter (line 223) | public static BasicDBObject getDataByParameter(String path,String qKey...
method main (line 243) | public static void main(String[] args)
FILE: clover/clover-core/src/main/java/com/gome/clover/common/zk/ZooKeeperWatch.java
type ZooKeeperWatch (line 28) | public interface ZooKeeperWatch {
method zooNodeChange (line 29) | public void zooNodeChange(String paramString1, String paramString2);
method reconnect (line 30) | public void reconnect();
FILE: clover/clover-core/src/main/java/com/gome/clover/core/job/ClientJob.java
class ClientJob (line 36) | public class ClientJob implements Serializable {
method ClientJob (line 54) | public ClientJob() {
method ClientJob (line 57) | public ClientJob(ClientJobFactory.Builder builder) {
type ExecuteType (line 72) | public static enum ExecuteType {
type JobType (line 76) | public static enum JobType {
type JobStrategy (line 80) | public static enum JobStrategy{
method getTrigger (line 84) | public Trigger getTrigger() {
method setTrigger (line 88) | public void setTrigger(Trigger trigger) {
method getJobDetail (line 92) | public JobDetail getJobDetail() {
method setJobDetail (line 96) | public void setJobDetail(JobDetail jobDetail) {
method getExecuteType (line 100) | public ExecuteType getExecuteType() {
method setExecuteType (line 104) | public void setExecuteType(ExecuteType executeType) {
method getJobType (line 108) | public JobType getJobType() {
method setJobType (line 112) | public void setJobType(JobType jobType) {
method getJobStrategy (line 116) | public JobStrategy getJobStrategy() {
method setJobStrategy (line 120) | public void setJobStrategy(JobStrategy jobStrategy) {
method getStartTime (line 124) | public String getStartTime() {
method setStartTime (line 128) | public void setStartTime(String startTime) {
method getCronExpression (line 132) | public String getCronExpression() {
method setCronExpression (line 136) | public void setCronExpression(String cronExpression) {
method getFixedClientIps (line 140) | public String[] getFixedClientIps() {
method setFixedClientIps (line 144) | public void setFixedClientIps(String[] fixedClientIps) {
method getFixedServerIps (line 148) | public String[] getFixedServerIps() {
method setFixedServerIps (line 152) | public void setFixedServerIps(String[] fixedServerIps) {
method getJobClass (line 156) | public Class<? extends Job> getJobClass() {
method setJobClass (line 160) | public void setJobClass(Class<? extends Job> jobClass) {
method getClientIp (line 164) | public String getClientIp() {
method setClientIp (line 168) | public void setClientIp(String clientIp) {
method getServerIp (line 172) | public String getServerIp() {
method setServerIp (line 176) | public void setServerIp(String serverIp) {
method getJobClassName (line 180) | public String getJobClassName() {
method setJobClassName (line 184) | public void setJobClassName(String jobClassName) {
method getJobClassPath (line 188) | public String getJobClassPath() {
method setJobClassPath (line 192) | public void setJobClassPath(String jobClassPath) {
method isRecoverJobFromDB (line 196) | public boolean isRecoverJobFromDB() {
method setRecoverJobFromDB (line 200) | public void setRecoverJobFromDB(boolean isRecoverJobFromDB) {
method toString (line 204) | @Override
FILE: clover/clover-core/src/main/java/com/gome/clover/core/job/ClientJobBuilder.java
class ClientJobBuilder (line 37) | public class ClientJobBuilder {
method quickBuildLocalCronJob (line 48) | public static ClientJob quickBuildLocalCronJob(String jobGroup, String...
method quickBuildRemoteCronJob (line 67) | public static ClientJob quickBuildRemoteCronJob(String jobGroup, Strin...
method quickBuildLocalJobWithStartDate (line 86) | public static ClientJob quickBuildLocalJobWithStartDate(String jobGrou...
method quickBuildRemoteJobWithStartDate (line 105) | public static ClientJob quickBuildRemoteJobWithStartDate(String jobGro...
method quickBuildLocalStartNowJobWithExecuteType (line 124) | public static ClientJob quickBuildLocalStartNowJobWithExecuteType(Stri...
method quickBuildRemoteStartNowJobWithExecuteType (line 143) | public static ClientJob quickBuildRemoteStartNowJobWithExecuteType(Str...
method quickBuildJobWithJobTypeAndExecuteTypeAndStartDate (line 164) | public static ClientJob quickBuildJobWithJobTypeAndExecuteTypeAndStart...
method quickBuildJobWithJobTypeAndExecuteTypeAndJobStrategyAndStartDate (line 188) | public static ClientJob quickBuildJobWithJobTypeAndExecuteTypeAndJobSt...
method quickBuildJobWithJobTypeAndExecuteTypeAndCronExpression (line 212) | public static ClientJob quickBuildJobWithJobTypeAndExecuteTypeAndCronE...
method quickBuildJobWithJobTypeAndExecuteTypeAndJobStrategyAndCronExpression (line 236) | public static ClientJob quickBuildJobWithJobTypeAndExecuteTypeAndJobSt...
FILE: clover/clover-core/src/main/java/com/gome/clover/core/job/ClientJobFactory.java
class ClientJobFactory (line 37) | public class ClientJobFactory {
method builder (line 39) | public static Builder builder(JobDetail jobDetail, Trigger trigger,Str...
method builder (line 42) | public static Builder builder(JobDetail jobDetail, Trigger trigger, Jo...
method builder (line 45) | public static Builder builder(JobDetail jobDetail, Trigger trigger, Jo...
method builder (line 49) | public static Builder builder(JobDetail jobDetail, Trigger trigger, Jo...
class Builder (line 54) | public static class Builder {
method Builder (line 69) | Builder(JobDetail jobDetail, Trigger trigger,String startTime,String...
method Builder (line 79) | Builder(JobDetail jobDetail, Trigger trigger, JobType jobType,String...
method Builder (line 88) | Builder(JobDetail jobDetail, Trigger trigger, JobType jobType,Execut...
method Builder (line 99) | Builder(JobDetail jobDetail, Trigger trigger, JobType jobType,Execut...
method jobClass (line 110) | public Builder jobClass(Class<? extends Job> jobClass) {
method executeType (line 115) | public Builder executeType(ExecuteType executeType) {
method jobStrategy (line 119) | public Builder jobStrategy(JobStrategy jobStrategy) {
method startTime (line 124) | public Builder startTime(String startTime) {
method cronExpression (line 129) | public Builder cronExpression(String cronExpression) {
method fixedClientIps (line 134) | public Builder fixedClientIps(String... fixedClientIps) {
method fixedServerIps (line 139) | public Builder fixedServerIps(String... fixedServerIps) {
method clientIp (line 144) | public Builder clientIp(String ip) {
method build (line 149) | public ClientJob build() {
method getTrigger (line 155) | public Trigger getTrigger() {
method getJobDetail (line 159) | public JobDetail getJobDetail() {
method getExecuteType (line 163) | public ExecuteType getExecuteType() {
method getJobType (line 167) | public JobType getJobType() {
method getJobStrategy (line 171) | public JobStrategy getJobStrategy() {
method getStartTime (line 175) | public String getStartTime() {
method getCronExpression (line 179) | public String getCronExpression() {
method getFixedClientIps (line 183) | public String[] getFixedClientIps() {
method getFixedServerIps (line 187) | public String[] getFixedServerIps() {
method getJobClass (line 191) | public Class<? extends Job> getJobClass() {
method getClientIp (line 195) | public String getClientIp() {
FILE: clover/clover-core/src/main/java/com/gome/clover/core/job/MyJobListener.java
class MyJobListener (line 37) | public class MyJobListener implements JobListener {
method getName (line 41) | @Override
method jobToBeExecuted (line 46) | @Override
method jobExecutionVetoed (line 54) | @Override
method jobWasExecuted (line 60) | @Override
method getJobKey (line 69) | private JobKey getJobKey(JobExecutionContext context) {
FILE: clover/clover-core/src/main/java/com/gome/clover/core/job/ServerJob.java
class ServerJob (line 51) | public class ServerJob extends ClientJob implements Job {
method execute (line 55) | @Override
method handlerJob (line 67) | private boolean handlerJob(ServerJob clientJob) {
method handlerJobType (line 76) | private boolean handlerJobType(ServerJob serverJob) {
method handlerRemoteJob (line 88) | private boolean handlerRemoteJob(ServerJob serverJob) {
method isContainLocalIp (line 166) | private boolean isContainLocalIp(String ips[]) {
method deleteJobFromDB (line 173) | private void deleteJobFromDB(JobExecutionContext context, ServerJob se...
method getUpdateRemoteJobBasicDBObject (line 190) | private BasicDBObject getUpdateRemoteJobBasicDBObject(ServerJob server...
method handlerBroadcastJob (line 212) | private boolean handlerBroadcastJob(ServerJob serverJob) { //该功能慢慢考虑如何实现
FILE: clover/clover-core/src/main/java/com/gome/clover/core/job/ServerJobFactory.java
class ServerJobFactory (line 35) | public class ServerJobFactory {
method createControlJob (line 36) | public static ServerJob createControlJob(ClientJob clientJob) {
method createServerTriggerKey (line 55) | protected static TriggerKey createServerTriggerKey(ClientJob clientJob) {
method createServerJobKey (line 60) | private static JobKey createServerJobKey(ClientJob clientJob) {
method createServerJobName (line 65) | private static String createServerJobName(ClientJob clientJob) {
method getClientJobName (line 69) | private static String getClientJobName(ClientJob clientJob) {
method getClientJobGroup (line 73) | private static String getClientJobGroup(ClientJob clientJob) {
method createJobDetail (line 77) | private static JobDetail createJobDetail(ClientJob clientJob) {
method createTrigger (line 81) | private static Trigger createTrigger(ClientJob clientJob) {
method setJobInfo (line 92) | private static void setJobInfo(ServerJob serverJob, ClientJob clientJo...
FILE: clover/clover-core/src/main/java/com/gome/clover/core/module/AbstractModuleScheduler.java
class AbstractModuleScheduler (line 47) | public abstract class AbstractModuleScheduler {
method registerToZK (line 51) | public void registerToZK(String moduleType, String ip, List<String> jo...
method reloadJobFromDB (line 94) | public void reloadJobFromDB(String moduleType, String ip) {
method resetJobExecuteTime (line 153) | public void resetJobExecuteTime(String clientIp,String serverIp){
method resetFailTimes (line 163) | public void resetFailTimes(String clientIp,String serverIp){
FILE: clover/clover-core/src/main/java/com/gome/clover/core/module/ModuleSchedulerClient.java
class ModuleSchedulerClient (line 57) | public class ModuleSchedulerClient extends AbstractModuleScheduler {
method ModuleSchedulerClient (line 62) | private ModuleSchedulerClient() {
method getInstance (line 66) | public static ModuleSchedulerClient getInstance() {
method startup (line 85) | public boolean startup(List<String> jobClassList, boolean isRegisterTo...
method startupForLocalJobTest (line 128) | public boolean startupForLocalJobTest() {
method addDefaultJob (line 138) | public void addDefaultJob() {
method stop (line 144) | public boolean stop() {
method handlerJob (line 149) | public boolean handlerJob(ClientJob clientJob) {
method handlerJobType (line 162) | private boolean handlerJobType(ClientJob clientJob) {
method handlerLocalJob (line 174) | private boolean handlerLocalJob(ClientJob clientJob) {
method addLocalJob (line 193) | private boolean addLocalJob(ClientJob clientJob) {
method deleteLocalJob (line 212) | private boolean deleteLocalJob(ClientJob clientJob) {
method updateLocalJob (line 230) | private boolean updateLocalJob(ClientJob clientJob) {
method handlerRemoteJob (line 243) | private boolean handlerRemoteJob(ClientJob clientJob) {
method isContainLocalIp (line 308) | private boolean isContainLocalIp(String ips[]) {
method isContainFixedIp (line 315) | private boolean isContainFixedIp(String ip, String fixedIps[]) {
method getDefaultJobs (line 323) | public List<ClientJob> getDefaultJobs() {
method setDefaultJobs (line 327) | public void setDefaultJobs(List<ClientJob> defaultJobs) {
FILE: clover/clover-core/src/main/java/com/gome/clover/core/module/ModuleSchedulerServer.java
class ModuleSchedulerServer (line 48) | public class ModuleSchedulerServer extends AbstractModuleScheduler {
method ModuleSchedulerServer (line 52) | private ModuleSchedulerServer() {
method getInstance (line 55) | public static ModuleSchedulerServer getInstance() {
method handlerJob (line 64) | public boolean handlerJob(ServerJob serverJob) {
method addJob (line 81) | private boolean addJob(ServerJob serverJob) {
method deleteJob (line 97) | private boolean deleteJob(ServerJob serverJob) {
method getDeleteRemoteJobBasicDBObject (line 113) | private BasicDBObject getDeleteRemoteJobBasicDBObject(ServerJob delete...
method updateJob (line 120) | private boolean updateJob(ServerJob serverJob) {
method startup (line 134) | public boolean startup() {
method startup (line 161) | public boolean startup(boolean isRegisterToZK, boolean isStartupMQ,boo...
method stop (line 187) | public boolean stop() {
FILE: clover/clover-core/src/main/java/com/gome/clover/core/monitor/client/ClientHeartBeat.java
type ClientHeartBeat (line 42) | public enum ClientHeartBeat {
method startup (line 47) | public void startup() {
method updateRecordList (line 67) | private void updateRecordList(CuratorFramework curatorFramework, Strin...
method stop (line 86) | public void stop() {
method main (line 92) | public static void main(String args[]) {
FILE: clover/clover-core/src/main/java/com/gome/clover/core/monitor/server/ServerHeartBeat.java
type ServerHeartBeat (line 39) | public enum ServerHeartBeat {
method startup (line 53) | public void startup(){
method updateRecordList (line 76) | private void updateRecordList(ZKManager zkManager, String serverPathSt...
method stop (line 94) | public void stop() {
method main (line 106) | public static void main(String args[]){
FILE: clover/clover-core/src/main/java/com/gome/clover/core/scheduler/MyScheduler.java
type MyScheduler (line 46) | public enum MyScheduler {
method start (line 51) | public boolean start() {
method stop (line 67) | public boolean stop() {
method add (line 82) | public boolean add(ClientJob job) {
method addJobListener (line 106) | public boolean addJobListener(MyJobListener listener, ClientJob job) {
method delete (line 122) | public boolean delete(ClientJob clientJob) {
method update (line 145) | public boolean update(ClientJob job) {
method isExists (line 159) | public boolean isExists(ClientJob job) {
method isExists (line 173) | public boolean isExists(JobKey jobKey) {
FILE: clover/clover-examples/src/main/java/com/gome/clover/DeleteGomeVipAdPlanJob.java
class DeleteGomeVipAdPlanJob (line 32) | public class DeleteGomeVipAdPlanJob implements Job {
method execute (line 33) | @Override
FILE: clover/clover-examples/src/main/java/com/gome/clover/ObjectToByte.java
class ObjectToByte (line 38) | public class ObjectToByte {
method toObj (line 39) | @Test
method toObj1 (line 97) | @Test
method testNewMsg (line 137) | @Test
method testCompress (line 147) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/TestEum.java
class TestEum (line 40) | public class TestEum {
method testEumVal (line 41) | @Test
method testLongMax (line 62) | @Test
method testCommon (line 77) | @Test
method testMap (line 115) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/TestThread.java
class TestThread (line 33) | public class TestThread {
method testPoll (line 34) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/akka/serverclient/pubsub/MyActorSystem.java
class MyActorSystem (line 6) | public class MyActorSystem {
method main (line 11) | public static void main(String[] args) {
FILE: clover/clover-examples/src/main/java/com/gome/clover/akka/serverclient/pubsub/PublisherActor.java
class PublisherActor (line 11) | public class PublisherActor extends UntypedActor {
method preStart (line 18) | @Override
method onReceive (line 27) | @Override
FILE: clover/clover-examples/src/main/java/com/gome/clover/akka/serverclient/pubsub/WorkerTaskA.java
class WorkerTaskA (line 9) | public class WorkerTaskA extends UntypedActor {
method onReceive (line 16) | @Override
FILE: clover/clover-examples/src/main/java/com/gome/clover/akka/serverclient/pubsub/WorkerTaskB.java
class WorkerTaskB (line 9) | public class WorkerTaskB extends UntypedActor {
method onReceive (line 15) | @Override
FILE: clover/clover-examples/src/main/java/com/gome/clover/common/compile/TestCompile.java
class TestCompile (line 38) | public class TestCompile {
method create (line 39) | @Test
method compile (line 66) | @Test
method getObject (line 89) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/cron/TestCron.java
class TestCron (line 34) | public class TestCron {
method getNextTime (line 35) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/job/MyJob.java
class MyJob (line 44) | public class MyJob implements Job {
method execute (line 45) | @Override
method main (line 57) | public static void main(String args[]){
FILE: clover/clover-examples/src/main/java/com/gome/clover/job/MyJob1.java
class MyJob1 (line 47) | public class MyJob1 implements Job,Serializable {
method execute (line 48) | @Override
method main (line 59) | public static void main(String args[]){
FILE: clover/clover-examples/src/main/java/com/gome/clover/job/MyJobWithSimpleJob.java
class MyJobWithSimpleJob (line 40) | public class MyJobWithSimpleJob extends SimpleJob {
method executeJob (line 42) | public void executeJob(JobExecutionContext context) {
method main (line 46) | public static void main(String args[]){
FILE: clover/clover-examples/src/main/java/com/gome/clover/json/TestJson.java
class TestJson (line 15) | public class TestJson {
method setToJson (line 16) | @Test
method jsonToSet (line 28) | @Test
method listToJson (line 40) | @Test
method testList2StringUtil (line 62) | public void testList2StringUtil(){
method testMap (line 66) | @Test
method testArray (line 76) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/mongo/TestMongoDB.java
class TestMongoDB (line 23) | public class TestMongoDB {
method insertOrUpdate (line 24) | @Test
method findByJobKey (line 43) | @Test
method insertConfig (line 56) | @Test
method updateConfig (line 66) | @Test
method testGetOn (line 75) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/scheduler/TestSchedulerWithInsertMongoDB.java
class TestSchedulerWithInsertMongoDB (line 26) | public class TestSchedulerWithInsertMongoDB implements Job {
method execute (line 27) | @Override
method main (line 32) | public static void main(String args[]){
FILE: clover/clover-examples/src/main/java/com/gome/clover/scheduler/TestSchedulerWithRegister.java
class TestSchedulerWithRegister (line 16) | public class TestSchedulerWithRegister implements Job {
method execute (line 17) | @Override
method main (line 22) | public static void main(String args[]){
FILE: clover/clover-examples/src/main/java/com/gome/clover/systeminfo/TestMem.java
class TestMem (line 31) | public class TestMem {
method main (line 32) | public static void main(String[] args) {
FILE: clover/clover-examples/src/main/java/com/gome/clover/thread/MyThread.java
class MyThread (line 35) | class MyThread implements java.lang.Runnable
method MyThread (line 38) | public MyThread(int id)
method run (line 42) | @Override
FILE: clover/clover-examples/src/main/java/com/gome/clover/thread/TestMyThreadPool.java
class TestMyThreadPool (line 33) | public class TestMyThreadPool {
method main (line 35) | public static void main(String[] args) {
method test1 (line 48) | public static void test1(){
method test2 (line 56) | public static void test2(){
method test3 (line 63) | public static void test3(){
class Task (line 72) | static class Task implements Runnable {
method run (line 75) | @Override
FILE: clover/clover-examples/src/main/java/com/gome/clover/thread/ThreadDemo.java
class ThreadDemo (line 30) | public class ThreadDemo
method main (line 36) | public static void main(String[] args) throws InterruptedException
FILE: clover/clover-examples/src/main/java/com/gome/clover/thread/ThreadPool.java
class ThreadPool (line 32) | public class ThreadPool extends ThreadGroup {
method ThreadPool (line 36) | public ThreadPool(int poolSize) { //poolSize 表示线程池中的工作线程的数量
method execute (line 46) | public synchronized void execute(Runnable task) {
method getTask (line 57) | private synchronized Runnable getTask(int threadId) throws Interrupted...
method closePool (line 68) | public synchronized void closePool() {
method waitFinish (line 78) | public void waitFinish() {
class WorkThread (line 98) | private class WorkThread extends Thread {
method WorkThread (line 100) | public WorkThread(int id) {
method run (line 105) | public void run() {
FILE: clover/clover-examples/src/main/java/com/gome/clover/thread/ThreadPoolTest.java
class ThreadPoolTest (line 30) | public class ThreadPoolTest {
method main (line 31) | public static void main(String[] args) throws InterruptedException {
method createTask (line 44) | private static Runnable createTask(final int taskID) {
FILE: clover/clover-examples/src/main/java/com/gome/clover/time/TestTime.java
class TestTime (line 12) | public class TestTime {
method getCurrentTime (line 13) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/zeromq/Helper.java
class Helper (line 42) | public class Helper {
method Helper (line 45) | private Helper()
class DummyCtx (line 49) | public static class DummyCtx extends Ctx
class DummySocketChannel (line 53) | public static class DummySocketChannel implements WritableByteChannel
method DummySocketChannel (line 58) | public DummySocketChannel()
method DummySocketChannel (line 63) | public DummySocketChannel(int bufsize)
method data (line 69) | public byte[] data()
method close (line 74) | @Override
method isOpen (line 79) | @Override
method write (line 85) | @Override
class DummyIOThread (line 101) | public static class DummyIOThread extends IOThread
method DummyIOThread (line 103) | public DummyIOThread()
class DummySocket (line 109) | public static class DummySocket extends SocketBase
method DummySocket (line 111) | public DummySocket()
method xattach_pipe (line 117) | @Override
method xterminated (line 122) | @Override
class DummySession (line 128) | public static class DummySession extends SessionBase
method DummySession (line 132) | public DummySession()
method DummySession (line 137) | public DummySession(IOThread ioThread, boolean connect,
method pushMsg (line 143) | public int pushMsg(Msg msg)
method pullMsg (line 150) | public Msg pullMsg()
method bounce (line 163) | public static void bounce(SocketBase sb, SocketBase sc)
method send (line 201) | public static void send(Socket sa, String data) throws IOException
FILE: clover/clover-examples/src/main/java/com/gome/clover/zeromq/Pub.java
class Pub (line 30) | public class Pub {
method main (line 31) | public static void main(String[] args) throws InterruptedException {
FILE: clover/clover-examples/src/main/java/com/gome/clover/zeromq/Publisher.java
class Publisher (line 30) | public class Publisher {
method main (line 31) | public static void main(String args[]) {
FILE: clover/clover-examples/src/main/java/com/gome/clover/zeromq/RandomNum.java
class RandomNum (line 32) | public class RandomNum {
method testGetRandomNum (line 33) | @Test
method testConnection (line 41) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/zeromq/Sub1.java
class Sub1 (line 32) | public class Sub1 {
method main (line 37) | public static void main(String[] args) {
FILE: clover/clover-examples/src/main/java/com/gome/clover/zeromq/Subscriber.java
class Subscriber (line 31) | public class Subscriber {
method main (line 32) | public static void main(String args[]) {
FILE: clover/clover-examples/src/main/java/com/gome/clover/zeromq/TestPubsubTcp.java
class TestPubsubTcp (line 35) | public class TestPubsubTcp {
method testPubsubTcp (line 36) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/zeromq/TestReqrepTcp.java
class TestReqrepTcp (line 33) | public class TestReqrepTcp {
method testReqrepTcp (line 34) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/zk/CuratorDemo.java
class CuratorDemo (line 36) | public class CuratorDemo {
method curatorDemo (line 38) | public void curatorDemo() throws Exception{
method main (line 58) | public static void main(String[] args) throws Exception {
class ZKWatch (line 63) | public class ZKWatch implements CuratorWatcher {
method getPath (line 66) | public String getPath() {
method ZKWatch (line 69) | public ZKWatch(String path) {
method process (line 72) | @Override
FILE: clover/clover-examples/src/main/java/com/gome/clover/zk/CuratorTest.java
class CuratorTest (line 44) | public class CuratorTest {
method CuratorTest (line 49) | public CuratorTest() {
method addReconnectionWatcher (line 61) | public void addReconnectionWatcher(final String path,final ZookeeperWa...
method create (line 103) | public void create() throws Exception{
method put (line 111) | public void put() throws Exception{
method get (line 117) | public void get() throws Exception{
method register (line 129) | public void register() throws Exception{
method main (line 153) | public static void main(String[] args) throws Exception {
class ZKWatch (line 163) | public class ZKWatch implements CuratorWatcher{
method getPath (line 166) | public String getPath() {
method ZKWatch (line 169) | public ZKWatch(String path) {
method process (line 172) | @Override
class ZKWatchRegister (line 186) | public class ZKWatchRegister implements CuratorWatcher{
method getPath (line 189) | public String getPath() {
method ZKWatchRegister (line 192) | public ZKWatchRegister(String path,byte[] value) {
method process (line 196) | @Override
type ZookeeperWatcherType (line 226) | public enum ZookeeperWatcherType{
FILE: clover/clover-examples/src/main/java/com/gome/clover/zk/MonitorServerZKListener.java
class MonitorServerZKListener (line 46) | public class MonitorServerZKListener implements CuratorListener,Connecti...
method MonitorServerZKListener (line 53) | public MonitorServerZKListener(String prefixPath) {
method addReconnectionWatcher (line 71) | public void addReconnectionWatcher(final String path,final ZookeeperWa...
method eventReceived (line 112) | @Override
method stateChanged (line 117) | @Override
class ZKWatchRegister (line 122) | public class ZKWatchRegister implements CuratorWatcher{
method getPath (line 125) | public String getPath() {
method ZKWatchRegister (line 128) | public ZKWatchRegister(String path) {
method process (line 131) | @Override
type ZookeeperWatcherType (line 160) | public enum ZookeeperWatcherType{
FILE: clover/clover-examples/src/main/java/com/gome/clover/zk/SyncServer.java
class SyncServer (line 32) | public class SyncServer {
method main (line 34) | public static void main(String[] args) {
method test1 (line 39) | @Test
FILE: clover/clover-examples/src/main/java/com/gome/clover/zk/TestZK.java
class TestZK (line 17) | public class TestZK {
method testServerDelete (line 18) | @Test
method testClientDelete (line 28) | @Test
method testGetAllData (line 39) | @Test
method testGet (line 51) | @Test
FILE: clover/clover-monitor/src/main/java/com/gome/clover/monitor/MonitorHeartBeat.java
type MonitorHeartBeat (line 46) | public enum MonitorHeartBeat {
method startup (line 54) | public void startup() {
method transferServerData (line 91) | private void transferServerData(BasicDBList needRemoveNodeList, int in...
method filterNeedRemoveNodeList (line 123) | private void filterNeedRemoveNodeList(BasicDBList needRemoveNodeList, ...
method addOrUpdateRecordList (line 135) | private void addOrUpdateRecordList(CuratorFramework curatorFramework, ...
method add (line 150) | public synchronized void add(BasicDBObject record, BasicDBList dBList) {
method remove (line 160) | public synchronized boolean remove(String id, BasicDBList dBList) {
method stop (line 165) | public void stop() {
method main (line 172) | public static void main(String args[]) {
FILE: clover/clover-monitor/src/main/java/com/gome/clover/monitor/MonitorTimerTask.java
class MonitorTimerTask (line 45) | public class MonitorTimerTask extends TimerTask {
method run (line 48) | @Override
method processServerMonitor (line 71) | private void processServerMonitor(ZKManager zkManager) {
method processClientMonitor (line 112) | private void processClientMonitor(ZKManager zkManager) throws Exception {
method alert (line 140) | private void alert(String ip, String msg) {
FILE: clover/clover-monitor/src/main/java/com/gome/clover/monitor/ServerHeartBeatBak.java
type ServerHeartBeatBak (line 33) | public enum ServerHeartBeatBak {
method startup (line 35) | public void startup(){
method main (line 40) | public static void main(String args[]){
FILE: clover/clover-monitor/src/main/java/com/gome/clover/monitor/ServerTimerTask.java
class ServerTimerTask (line 47) | public class ServerTimerTask extends TimerTask {
method ServerTimerTask (line 52) | public ServerTimerTask(BasicDBList recordDBList) {
method run (line 56) | @Override
method transferServerData (line 81) | private void transferServerData(BasicDBList needRemoveNodeList, int in...
method filterNeedRemoveNodeList (line 113) | private void filterNeedRemoveNodeList(BasicDBList needRemoveNodeList, ...
method addOrUpdateRecordList (line 125) | private void addOrUpdateRecordList(CuratorFramework curatorFramework, ...
method add (line 140) | public synchronized void add(BasicDBObject record, BasicDBList dBList) {
method remove (line 150) | public synchronized boolean remove(String id, BasicDBList dBList) {
FILE: clover/clover-server/src/main/java/com/gome/clover/server/module/SchedulerServerInitial.java
class SchedulerServerInitial (line 42) | public class SchedulerServerInitial extends HttpServlet {
method init (line 46) | @Override
method init (line 81) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/init/InitAllJobWithServlet.java
class InitAllJobWithServlet (line 38) | public class InitAllJobWithServlet extends HttpServlet {
method init (line 39) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/init/InitServletWithSchedulerClientInitial.java
class InitServletWithSchedulerClientInitial (line 35) | public class InitServletWithSchedulerClientInitial {
method init (line 37) | public void init(){
FILE: test-clover/src/main/java/com/gome/testclover/init/InitServletWithStartup.java
class InitServletWithStartup (line 36) | public class InitServletWithStartup extends HttpServlet {
method init (line 37) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/init/InitSpringAnnotationWithStartup.java
class InitSpringAnnotationWithStartup (line 36) | @Component
method init (line 39) | @PostConstruct
FILE: test-clover/src/main/java/com/gome/testclover/localjob/CronLocalJob.java
class CronLocalJob (line 11) | public class CronLocalJob extends LocalJob {
method executeJob (line 13) | @Override
method main (line 19) | public static void main(String[] args) {
FILE: test-clover/src/main/java/com/gome/testclover/localjob/FixedTimeLocalJob.java
class FixedTimeLocalJob (line 13) | public class FixedTimeLocalJob extends LocalJob {
method executeJob (line 15) | @Override
method main (line 21) | public static void main(String[] args) {
FILE: test-clover/src/main/java/com/gome/testclover/localjob/LocalJobTest.java
class LocalJobTest (line 12) | public class LocalJobTest {
method testFixedTimeLocalJob (line 13) | @Test
method main (line 23) | public static void main(String[] args) {
FILE: test-clover/src/main/java/com/gome/testclover/remotejob/RemoteCronJob.java
class RemoteCronJob (line 10) | public class RemoteCronJob extends RemoteJob {
method executeJob (line 12) | @Override
method main (line 17) | public static void main(String[] args) {
FILE: test-clover/src/main/java/com/gome/testclover/spring/MyRemoteJob.java
class MyRemoteJob (line 33) | public class MyRemoteJob implements Job {
method execute (line 34) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteCronJobWithSpringAnnotation.java
class RemoteCronJobWithSpringAnnotation (line 40) | @Component
method executeJob (line 45) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteFixedDateJobWithSpringAnnotation.java
class RemoteFixedDateJobWithSpringAnnotation (line 41) | @CloverJobAnnotation(jobGroup = "RemoteJobWithSpringAnnotationGroup",job...
method executeJob (line 44) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteJob1WithSpring.java
class RemoteJob1WithSpring (line 13) | public class RemoteJob1WithSpring extends RemoteJob {
method executeJob (line 15) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteJob1WithSpringAnnotation.java
class RemoteJob1WithSpringAnnotation (line 16) | @Component
method executeJob (line 22) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteJob2WithSpring.java
class RemoteJob2WithSpring (line 13) | public class RemoteJob2WithSpring extends RemoteJob {
method executeJob (line 15) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteJob2WithSpringAnnotation.java
class RemoteJob2WithSpringAnnotation (line 16) | @Component
method executeJob (line 22) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteJob3WithSpring.java
class RemoteJob3WithSpring (line 13) | public class RemoteJob3WithSpring extends RemoteJob {
method executeJob (line 15) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteJob3WithSpringAnnotation.java
class RemoteJob3WithSpringAnnotation (line 16) | @Component
method executeJob (line 22) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteJobWithSpring.java
class RemoteJobWithSpring (line 14) | public class RemoteJobWithSpring extends RemoteJob {
method executeJob (line 16) | @Override
FILE: test-clover/src/main/java/com/gome/testclover/spring/RemoteJobWithSpringAnnotation.java
class RemoteJobWithSpringAnnotation (line 16) | @Component
method executeJob (line 22) | @Override
Condensed preview — 323 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,455K chars).
[
{
"path": "README.md",
"chars": 1377,
"preview": "# clover\nclover\n\n1、开发server和client端 定时向zk集群发送心跳数据包,利用Java自带的timer程序实现该功能 \n\n2、开发整天的monitor程序,用来定时向zk中获取server和client端的心跳数"
},
{
"path": "clover/.gitignore",
"chars": 300,
"preview": "# maven ignore\r\ntarget/\r\n\r\n# eclipse ignore\r\n.settings/\r\n.project\r\n.classpath\r\n\r\n# idea ignore\r\n.idea/\r\n*.ipr\r\n*.iml\r\n*."
},
{
"path": "clover/README.md",
"chars": 1361,
"preview": "#clover\r\n1、开发server和client端 定时向zk集群发送心跳数据包,利用Java自带的timer程序实现该功能\r\n2、开发整天的monitor程序,用来定时向zk中获取server和client端的心跳数据信息,如果超过指"
},
{
"path": "clover/clover-admin/pom.xml",
"chars": 2370,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project\r\n\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.ap"
},
{
"path": "clover/clover-admin/src/main/java/com/gome/clover/listener/Log4jConfigListener.java",
"chars": 1752,
"preview": "package com.gome.clover.listener;\r\n\r\nimport org.apache.log4j.LogManager;\r\nimport org.apache.log4j.PropertyConfigurator;\r"
},
{
"path": "clover/clover-admin/src/main/java/com/gome/clover/servlet/CloverServletHandle.java",
"chars": 27960,
"preview": "package com.gome.clover.servlet;\r\n\r\nimport com.alibaba.fastjson.JSONObject;\r\nimport com.gome.clover.common.mongodb.DBTab"
},
{
"path": "clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteCronJobWithSpringAnnotation.java",
"chars": 1352,
"preview": "package com.gome.testclover.spring;\r\n\r\nimport com.gome.bg.clover.client.job.RemoteJob;\r\nimport com.gome.clover.common.an"
},
{
"path": "clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteFixedDateJobWithSpring.java",
"chars": 440,
"preview": "package com.gome.testclover.spring;\r\n\r\nimport com.gome.bg.clover.client.job.RemoteJob;\r\nimport com.gome.clover.common.to"
},
{
"path": "clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteFixedDateJobWithSpringAnnotation.java",
"chars": 1307,
"preview": "package com.gome.testclover.spring;\r\n\r\nimport com.gome.bg.clover.client.job.RemoteJob;\r\nimport com.gome.clover.common.an"
},
{
"path": "clover/clover-admin/src/main/java/com/gome/testclover/spring/RemoteJobWithSpring.java",
"chars": 422,
"preview": "package com.gome.testclover.spring;\r\n\r\nimport com.gome.bg.clover.client.job.RemoteJob;\r\nimport com.gome.clover.common.to"
},
{
"path": "clover/clover-admin/src/main/java/com/gome/testclover/spring/TestProperties.java",
"chars": 1228,
"preview": "package com.gome.testclover.spring;\r\n\r\nimport com.gome.clover.common.tools.PropertiesUtil;\r\n\r\nimport java.util.Propertie"
},
{
"path": "clover/clover-admin/src/main/resources/bak_log4j.properties",
"chars": 920,
"preview": "#将ibatis log4j运行级别调到DEBUG可以在控制台打印出ibatis运行的sql语句\r\nlog4j.rootLogger=debug,stdout,logfile\r\n### 把日志信息输出到控制台 ###\r\nlog4j.appe"
},
{
"path": "clover/clover-admin/src/main/resources/conf/config.properties",
"chars": 126,
"preview": "cloverServerStatus=0\r\ncloverServerTS\r\nserverHeartBeatStatus=0\r\nserverHeartBeatTS\r\nmonitorHeartBeatStatus=0\r\nmonitorHeart"
},
{
"path": "clover/clover-admin/src/main/resources/log4j.xml",
"chars": 1652,
"preview": "<?xml version='1.0' encoding='UTF-8' ?>\r\n<!DOCTYPE log4j:configuration SYSTEM \"log4j.dtd\">\r\n<log4j:configuration xmlns:l"
},
{
"path": "clover/clover-admin/src/main/resources/spring/spring-config.xml",
"chars": 1283,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<beans xmlns=\"http://www.springframework.org/schema/beans\"\n xmlns:xsi=\"http"
},
{
"path": "clover/clover-admin/src/main/webapp/WEB-INF/web.xml",
"chars": 3731,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<web-app xmlns=\"http://java.sun.com/xml/ns/javaee\"\r\n xmlns:xsi=\"http://w"
},
{
"path": "clover/clover-admin/src/main/webapp/common/head.jsp",
"chars": 1371,
"preview": " <%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n\tpageEncoding=\"UTF-8\"%>\r\n <%\r\n String path = re"
},
{
"path": "clover/clover-admin/src/main/webapp/common/nav.jsp",
"chars": 1783,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n pageEncoding=\"UTF-8\" %>\r\n<%\r\n String path ="
},
{
"path": "clover/clover-admin/src/main/webapp/contactList.jsp",
"chars": 17231,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n\tpageEncoding=\"UTF-8\"%>\r\n<%@ page import=\"com.gome.clov"
},
{
"path": "clover/clover-admin/src/main/webapp/css/style.css",
"chars": 1991,
"preview": "body {padding-top:60px; padding-bottom:40px;}\r\n.sidebar-nav {padding:9px 0;}\r\n\r\n\r\n/*pagin&&pagin-m*/\r\n.pagin a,.pagin sp"
},
{
"path": "clover/clover-admin/src/main/webapp/error.jsp",
"chars": 905,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n\tpageEncoding=\"UTF-8\"%>\r\n <!DOCTYPE html PUBLIC \"-//W3C"
},
{
"path": "clover/clover-admin/src/main/webapp/index.jsp",
"chars": 2351,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n\tpageEncoding=\"UTF-8\" %>\r\n<%\r\n String path = request"
},
{
"path": "clover/clover-admin/src/main/webapp/jobList.jsp",
"chars": 27135,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n\tpageEncoding=\"UTF-8\"%>\r\n<%@page import=\"com.gome.clove"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/DatePicker.htm",
"chars": 1387,
"preview": "<html>\r\n<head>\r\n<meta http-equiv=\"content-type\" content=\"text/xml; charset=utf-8\" />\r\n<title>DatePicker</title>\r\n<script"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/WdatePicker.js",
"chars": 13372,
"preview": "/*\r\n * jdDate by beiqiu\r\n */\r\nvar $dp,WdatePicker;\r\n(function() {\r\n var _ = {\r\n $wdate:true,\r\n $dpPath:"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/calendar.js",
"chars": 19242,
"preview": "/*\r\n * My97 DatePicker 4.7 Beta5\r\n * License: http://www.my97.net/dp/license.asp\r\n */\r\neval(function(B,D,A,G,E,F){functi"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/config.js",
"chars": 256,
"preview": "var langList = \r\n[\r\n\t{name:'en',\tcharset:'UTF-8'},\r\n\t{name:'zh-cn',\tcharset:'UTF-8'},\r\n\t{name:'zh-tw',\tcharset:'UTF-8'}\r"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/lang/en.js",
"chars": 644,
"preview": "var $lang={\r\nerrAlertMsg: \"Invalid date or the date out of range,redo or not?\",\r\naWeekStr: [\"wk\", \"Sun\", \"Mon\", \"Tue\", \""
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/lang/zh-cn.js",
"chars": 1089,
"preview": "var $lang={\r\nerrAlertMsg: \"\\u4E0D\\u5408\\u6CD5\\u7684\\u65E5\\u671F\\u683C\\u5F0F\\u6216\\u8005\\u65E5\\u671F\\u8D85\\u51FA\\u9650\\u5"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/lang/zh-tw.js",
"chars": 1088,
"preview": "var $lang={\r\nerrAlertMsg: \"\\u4E0D\\u5408\\u6CD5\\u7684\\u65E5\\u671F\\u683C\\u5F0F\\u6216\\u8005\\u65E5\\u671F\\u8D85\\u51FA\\u9650\\u5"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/skin/WdatePicker.css",
"chars": 158,
"preview": ".Wdate{\r\n\tborder:#999 1px solid;\r\n\theight:20px;\r\n\tbackground:#fff url(datePicker.gif) no-repeat right;\r\n}\r\n\r\n.WdateFmtEr"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/skin/default/datepicker.css",
"chars": 3726,
"preview": "/* \r\n * My97 DatePicker 4.7\r\n */\r\n\r\n.WdateDiv{\r\n\twidth:180px;\r\n\tbackground-color:#FFFFFF;\r\n\tborder:#bbb 1px solid;\r\n\tpad"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/skin/ext/datepicker.css",
"chars": 5490,
"preview": "\r\n/* ѡ DIV */\r\n.WdateDiv{\r\n\twidth:180px;\r\n\tbackground-color:#fff;\r\n\tborder:1px solid #718BB7;\r\n}\r\n/* ˫Ŀ */\r\n.WdateDiv2{\r"
},
{
"path": "clover/clover-admin/src/main/webapp/js/DatePicker/skin/whyGreen/datepicker.css",
"chars": 3933,
"preview": "/* \r\n * My97 DatePicker 4.7 Skin:whyGreen\r\n */ \r\n.WdateDiv{\r\n\twidth:180px;\r\n\tbackground-color:#fff;\r\n\tborder:#C5E1E4 1px"
},
{
"path": "clover/clover-admin/src/main/webapp/js/Map.js",
"chars": 5970,
"preview": "/*\r\n * MAP对象,实现MAP功能\r\n *\r\n * 接口:\r\n * size() 获取MAP元素个数\r\n * isEmpty() 判断MAP是否为空\r\n * clear() 删除MAP所有元素\r\n * put(k"
},
{
"path": "clover/clover-admin/src/main/webapp/js/bootstrap-popover.js",
"chars": 3107,
"preview": "/* ===========================================================\r\n * bootstrap-popover.js v2.3.2\r\n * http://twbs.github.co"
},
{
"path": "clover/clover-admin/src/main/webapp/js/bootstrap-tooltip.js",
"chars": 9496,
"preview": "/* ===========================================================\r\n * bootstrap-tooltip.js v2.3.2\r\n * http://twbs.github.co"
},
{
"path": "clover/clover-admin/src/main/webapp/js/exporting.js",
"chars": 7108,
"preview": "/*\n Highcharts JS v3.0.1 (2013-04-09)\n Exporting module\n\n (c) 2010-2013 Torstein Hønsi\n\n License: www.highcharts.com/lic"
},
{
"path": "clover/clover-admin/src/main/webapp/js/highcharts.js",
"chars": 134244,
"preview": "/*\n Highcharts JS v3.0.1 (2013-04-09)\n\n (c) 2009-2013 Torstein Hønsi\n\n License: www.highcharts.com/license\n*/\n(function("
},
{
"path": "clover/clover-admin/src/main/webapp/js/html5.js",
"chars": 3858,
"preview": "/*! HTML5 Shiv pre3.5 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed \r\n Uncompressed source: https://github.c"
},
{
"path": "clover/clover-admin/src/main/webapp/js/jquery.validate.js",
"chars": 46480,
"preview": "/*\r\n * http://bassistance.de/jquery-plugins/jquery-plugin-validation/\r\n * http://docs.jquery.com/Plugins/Validation\r\n *\r"
},
{
"path": "clover/clover-admin/src/main/webapp/js/ui.datepicker-zh-CN.js",
"chars": 714,
"preview": "/* Chinese initialisation for the jQuery UI date picker plugin. */\r\n/* Written by Cloudream (cloudream@gmail.com). */\r\nj"
},
{
"path": "clover/clover-admin/src/main/webapp/js/ui.datepicker.js",
"chars": 71201,
"preview": "/*\r\n * jQuery UI Datepicker 1.7\r\n *\r\n * Copyright (c) 2009 AUTHORS.txt (http://jqueryui.com/about)\r\n * Dual licensed und"
},
{
"path": "clover/clover-admin/src/main/webapp/logList.jsp",
"chars": 8104,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n\t\t pageEncoding=\"UTF-8\" %>\r\n<%@page import=\"com.gome.cl"
},
{
"path": "clover/clover-admin/src/main/webapp/login.jsp",
"chars": 5374,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n\tpageEncoding=\"UTF-8\"%>\r\n<!DOCTYPE html>\r\n<html>\r\n <he"
},
{
"path": "clover/clover-admin/src/main/webapp/monitorList.jsp",
"chars": 12685,
"preview": "<%@ page import=\"com.gome.clover.common.tools.CommonConstants\" %>\r\n<%@ page import=\"com.gome.clover.common.tools.IpUtil\""
},
{
"path": "clover/clover-admin/src/main/webapp/register.jsp",
"chars": 15901,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n\tpageEncoding=\"UTF-8\"%>\r\n<!DOCTYPE html>\r\n<html>\r\n <he"
},
{
"path": "clover/clover-admin/src/main/webapp/zkList.jsp",
"chars": 17087,
"preview": "<%@ page language=\"java\" contentType=\"text/html; charset=UTF-8\"\r\n pageEncoding=\"UTF-8\" %>\r\n<%@ page import=\"com."
},
{
"path": "clover/clover-admin/src/test/java/TestAnnotationWithSpring.java",
"chars": 933,
"preview": "import org.junit.Test;\r\nimport org.junit.runner.RunWith;\r\nimport org.springframework.test.context.ContextConfiguration;\r"
},
{
"path": "clover/clover-client/pom.xml",
"chars": 3562,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
},
{
"path": "clover/clover-client/src/main/java/com/gome/bg/clover/client/job/LocalJob.java",
"chars": 1836,
"preview": "package com.gome.bg.clover.client.job;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.Build"
},
{
"path": "clover/clover-client/src/main/java/com/gome/bg/clover/client/job/RemoteJob.java",
"chars": 1790,
"preview": "package com.gome.bg.clover.client.job;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.Build"
},
{
"path": "clover/clover-client/src/main/java/com/gome/bg/clover/client/job/SimpleJob.java",
"chars": 1844,
"preview": "package com.gome.bg.clover.client.job;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.Build"
},
{
"path": "clover/clover-client/src/main/java/com/gome/bg/clover/client/job/TransactionJob.java",
"chars": 1820,
"preview": "package com.gome.bg.clover.client.job;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.Build"
},
{
"path": "clover/clover-client/src/main/java/com/gome/bg/clover/client/module/SchedulerClientInitial.java",
"chars": 5563,
"preview": "package com.gome.bg.clover.client.module;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.Bu"
},
{
"path": "clover/clover-common/pom.xml",
"chars": 884,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
},
{
"path": "clover/clover-core/pom.xml",
"chars": 5274,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverConfigBeanDefinitionParser.java",
"chars": 5502,
"preview": "package com.gome.clover.common.annotation;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.gome.clov"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverConfigInit.java",
"chars": 1138,
"preview": "package com.gome.clover.common.annotation;\r\n\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\nimport org.w3c."
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverJobAnnotation.java",
"chars": 1717,
"preview": "package com.gome.clover.common.annotation;\n\nimport com.gome.clover.core.job.ClientJob;\nimport org.quartz.JobKey;\n\nimport"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverJobAnnotationBean.java",
"chars": 5638,
"preview": "package com.gome.clover.common.annotation;\n\nimport com.gome.clover.common.tools.DateUtil;\nimport com.gome.clover.common."
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverJobBeanDefinitionParser.java",
"chars": 9057,
"preview": "package com.gome.clover.common.annotation;\r\n\r\nimport com.gome.clover.common.tools.DateUtil;\r\nimport com.gome.clover.comm"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/annotation/CloverJobNamespaceHandler.java",
"chars": 916,
"preview": "package com.gome.clover.common.annotation;\r\n\r\nimport org.springframework.beans.factory.xml.NamespaceHandlerSupport;\r\n\r\n/"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/cache/LRUCache.java",
"chars": 3522,
"preview": "package com.gome.clover.common.cache;\r\n\r\nimport java.util.Hashtable;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/cache/LRUCache2.java",
"chars": 3090,
"preview": "package com.gome.clover.common.cache;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.Collection;\r\nimport java.util.Lin"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/compile/CreateAndCompileClassFile.java",
"chars": 2229,
"preview": "package com.gome.clover.common.compile;\r\n\r\nimport java.io.File;\r\nimport java.io.FileNotFoundException;\r\nimport java.io.F"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/compile/DynamicClassLoader.java",
"chars": 3178,
"preview": "package com.gome.clover.common.compile;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/compile/MyClassLoader.java",
"chars": 7294,
"preview": "package com.gome.clover.common.compile;\r\n\r\nimport com.gome.clover.common.tools.ClassUtil;\r\nimport com.gome.clover.core.j"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/compress/CompressUtil.java",
"chars": 1005,
"preview": "package com.gome.clover.common.compress;\r\n\r\nimport org.xerial.snappy.Snappy;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/encryption/DesUtil.java",
"chars": 4065,
"preview": "package com.gome.clover.common.encryption;\r\n\r\nimport javax.crypto.Cipher;\r\nimport javax.crypto.SecretKey;\r\nimport javax."
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/encryption/MD5Util.java",
"chars": 3967,
"preview": "package com.gome.clover.common.encryption;\r\n\r\nimport java.io.UnsupportedEncodingException;\r\nimport java.security.Message"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/exception/AppException.java",
"chars": 924,
"preview": "package com.gome.clover.common.exception;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n *"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/file/ConfigFile.java",
"chars": 4008,
"preview": "package com.gome.clover.common.file;\r\n\r\nimport com.gome.clover.common.tools.StringUtil;\r\nimport org.slf4j.Logger;\r\nimpor"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/hash/HashTimes.java",
"chars": 1089,
"preview": "package com.gome.clover.common.hash;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * ┃ "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/mongodb/BuildMongoDBData.java",
"chars": 4962,
"preview": "package com.gome.clover.common.mongodb;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.tools.ClassU"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/mongodb/DBTableInfo.java",
"chars": 4444,
"preview": "package com.gome.clover.common.mongodb;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/mongodb/MongoDBUtil.java",
"chars": 18803,
"preview": "package com.gome.clover.common.mongodb;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.tools.*;\r\nim"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/netty/client/ObjectReqClient.java",
"chars": 5306,
"preview": "package com.gome.clover.common.netty.client;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.compres"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/netty/client/SubReqClientHandel.java",
"chars": 2515,
"preview": "package com.gome.clover.common.netty.client;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.compres"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/netty/protol/SubScribeResp.java",
"chars": 1102,
"preview": "package com.gome.clover.common.netty.protol;\r\n\r\nimport java.io.Serializable;\r\n\r\n/**\r\n *\r\n * 功能描述:应答对象 \r\n * @author linyo"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/netty/protol/SubscribeReq.java",
"chars": 1539,
"preview": "package com.gome.clover.common.netty.protol;\r\n\r\nimport java.io.Serializable;\r\n\r\n/**\r\n *\r\n * 功能描述:请求对象\r\n * @author linyou"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/netty/server/ObjectRespServer.java",
"chars": 3893,
"preview": "package com.gome.clover.common.netty.server;\r\n\r\nimport io.netty.bootstrap.ServerBootstrap;\r\nimport io.netty.channel.*;\r\n"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/netty/server/SubReqServerHandel.java",
"chars": 8704,
"preview": "package com.gome.clover.common.netty.server;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.compres"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/rocketmq/ConsumerUtil.java",
"chars": 4711,
"preview": "package com.gome.clover.common.rocketmq;\r\n\r\nimport com.alibaba.rocketmq.client.consumer.DefaultMQPushConsumer;\r\nimport c"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/rocketmq/ProducerUtil.java",
"chars": 2558,
"preview": "package com.gome.clover.common.rocketmq;\r\n\r\nimport com.alibaba.rocketmq.client.exception.MQBrokerException;\r\nimport com."
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/rpc/HttpRequestEntity.java",
"chars": 642,
"preview": "package com.gome.clover.common.rpc;\r\n\r\nimport java.io.Serializable;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/rpc/HttpRequestHandler.java",
"chars": 3785,
"preview": "package com.gome.clover.common.rpc;\r\n\r\nimport com.gome.clover.common.tools.StringUtil;\r\nimport org.jboss.netty.buffer.Ch"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/rpc/HttpResponseEntity.java",
"chars": 1411,
"preview": "package com.gome.clover.common.rpc;\r\n\r\nimport java.io.Serializable;\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/rpc/QueueDaemon.java",
"chars": 2292,
"preview": "package com.gome.clover.common.rpc;\r\n\r\nimport org.jboss.netty.bootstrap.ServerBootstrap;\r\nimport org.jboss.netty.channel"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/rpc/QueueServer.java",
"chars": 2023,
"preview": "package com.gome.clover.common.rpc;\r\n\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\n/**\r\n * ━━━━━━神兽出没━━━━"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/IMonitorService.java",
"chars": 653,
"preview": "package com.gome.clover.common.systeminfo;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/MonitorInfoBean.java",
"chars": 2669,
"preview": "package com.gome.clover.common.systeminfo;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/MonitorServiceImpl.java",
"chars": 11325,
"preview": "package com.gome.clover.common.systeminfo;\r\n\r\nimport com.sun.management.OperatingSystemMXBean;\r\nimport sun.management.Ma"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/SystemInfoUtil.java",
"chars": 9940,
"preview": "package com.gome.clover.common.systeminfo;\r\n\r\nimport com.sun.management.OperatingSystemMXBean;\r\nimport org.slf4j.Logger;"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/systeminfo/WindowsInfoUtil.java",
"chars": 6265,
"preview": "package com.gome.clover.common.systeminfo;\r\n\r\nimport com.sun.management.OperatingSystemMXBean;\r\nimport sun.management.Ma"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/thread/MyThreadPool.java",
"chars": 4963,
"preview": "package com.gome.clover.common.thread;\r\nimport java.util.LinkedList;\r\nimport java.util.List;\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/ClassUtil.java",
"chars": 2976,
"preview": "package com.gome.clover.common.tools;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimport java.io.*;\nimpor"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/CommonConstants.java",
"chars": 6701,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport com.gome.clover.common.file.ConfigFile;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/ConfigUtil.java",
"chars": 2585,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport java.io.File;\r\nimport java.io.FileInputStream;\r\nimport java.io.InputStre"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/DateUtil.java",
"chars": 4166,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport org.quartz.CronExpression;\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.L"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/HttpRequest.java",
"chars": 4573,
"preview": "package com.gome.clover.common.tools;\r\nimport java.io.BufferedReader;\r\nimport java.io.IOException;\r\nimport java.io.Input"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/IpUtil.java",
"chars": 3073,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport com.mongodb.BasicDBObject;\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.L"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/KeyGen.java",
"chars": 3531,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport java.math.BigInteger;\r\nimport java.util.Date;\r\nimport java.util.Random;\r"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/List2StringUtil.java",
"chars": 3431,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\n\r\nimport java.util.ArrayList;\r\nimport java.u"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/NetUtils.java",
"chars": 8946,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport com.gome.clover.common.cache.LRUCache2;\r\nimport org.slf4j.Logger;\r\nimpor"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/NettyUtil.java",
"chars": 1976,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport com.gome.clover.common.netty.client.SubReqClientHandel;\r\nimport io.netty"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/ProgressUtil.java",
"chars": 1287,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport java.lang.management.ManagementFactory;\r\nimport java.lang.management.Run"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/PropertiesUtil.java",
"chars": 3363,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport org.slf4j.Logger;\r\nimport org.slf4j.LoggerFactory;\r\n\r\nimport java.io.*;\r"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/RandomNumUtil.java",
"chars": 2481,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport java.util.Random;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/SendMailUtil.java",
"chars": 8328,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport com.gome.clover.common.mongodb.DBTableInfo;\r\nimport com.gome.clover.comm"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/tools/StringUtil.java",
"chars": 2851,
"preview": "package com.gome.clover.common.tools;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zeromq/AsyncSendMsg.java",
"chars": 4083,
"preview": "package com.gome.clover.common.zeromq;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport org.slf4j.Logger;"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zeromq/AsyncStartZeroMQ.java",
"chars": 2360,
"preview": "package com.gome.clover.common.zeromq;\r\n\r\nimport com.gome.clover.common.mongodb.BuildMongoDBData;\r\nimport com.gome.clove"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zeromq/AsyncZMQPull.java",
"chars": 14600,
"preview": "package com.gome.clover.common.zeromq;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQEntity.java",
"chars": 2266,
"preview": "package com.gome.clover.common.zeromq;\r\n\r\nimport com.gome.clover.common.netty.client.SubReqClientHandel;\r\nimport org.slf"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQPub.java",
"chars": 1927,
"preview": "package com.gome.clover.common.zeromq;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.gome.clover.c"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQPull.java",
"chars": 11740,
"preview": "package com.gome.clover.common.zeromq;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.compress.Comp"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQPush.java",
"chars": 1502,
"preview": "package com.gome.clover.common.zeromq;\r\n\r\nimport com.gome.clover.common.compress.CompressUtil;\r\nimport com.gome.clover.c"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zeromq/ZeroMQSub.java",
"chars": 1789,
"preview": "package com.gome.clover.common.zeromq;\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * ┃ "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ClientDict.java",
"chars": 3107,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.mongodb.BasicDBOb"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ClientListener.java",
"chars": 4737,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport com.gome.clover.common.tools.DateUtil;\r\nimport com.gome.clover.common.tools"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ClientNodes.java",
"chars": 14686,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport com.gome.clover.common.hash.HashTimes;\r\nimport com.gome.clover.common.tools"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/CommonNodes.java",
"chars": 1718,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport com.mongodb.BasicDBList;\r\nimport com.mongodb.BasicDBObject;\r\n\r\nimport java."
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ServerDict.java",
"chars": 2896,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.mongodb.BasicDBOb"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ServerListener.java",
"chars": 4536,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport com.gome.clover.common.tools.DateUtil;\r\nimport com.gome.clover.common.tools"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ServerNodes.java",
"chars": 11490,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport com.gome.clover.common.hash.HashTimes;\r\nimport com.gome.clover.common.tools"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ZKConnect.java",
"chars": 4278,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport org.apache.curator.framework.CuratorFramework;\r\nimport org.apache.curator.f"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ZKManager.java",
"chars": 5909,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport org.apache.zookeeper.*;\r\nimport org.apache.zookeeper.Watcher.Event.KeeperSt"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ZKUtil.java",
"chars": 10893,
"preview": "package com.gome.clover.common.zk;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.gome.clover.commo"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/common/zk/ZooKeeperWatch.java",
"chars": 683,
"preview": "package com.gome.clover.common.zk;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * ┃ "
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/job/ClientJob.java",
"chars": 5837,
"preview": "package com.gome.clover.core.job;\n\nimport org.quartz.Job;\nimport org.quartz.JobDetail;\nimport org.quartz.Trigger;\n\nimpor"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/job/ClientJobBuilder.java",
"chars": 11576,
"preview": "package com.gome.clover.core.job;\r\n\r\nimport com.gome.clover.common.tools.DateUtil;\r\nimport org.quartz.Job;\r\n\r\nimport jav"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/job/ClientJobFactory.java",
"chars": 5579,
"preview": "package com.gome.clover.core.job;\n\nimport com.gome.clover.core.job.ClientJob.ExecuteType;\nimport com.gome.clover.core.jo"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/job/MyJobListener.java",
"chars": 1995,
"preview": "package com.gome.clover.core.job;\n\nimport com.gome.clover.common.mongodb.MongoDBUtil;\nimport org.quartz.JobExecutionCont"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/job/ServerJob.java",
"chars": 11448,
"preview": "package com.gome.clover.core.job;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.BuildMongo"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/job/ServerJobFactory.java",
"chars": 3982,
"preview": "package com.gome.clover.core.job;\n\nimport com.gome.clover.common.tools.ClassUtil;\nimport com.gome.clover.common.tools.Co"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/module/AbstractModuleScheduler.java",
"chars": 10112,
"preview": "package com.gome.clover.core.module;\r\n\r\nimport com.gome.clover.common.mongodb.BuildMongoDBData;\r\nimport com.gome.clover."
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/module/ModuleSchedulerClient.java",
"chars": 16207,
"preview": "package com.gome.clover.core.module;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.BuildMo"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/module/ModuleSchedulerServer.java",
"chars": 9195,
"preview": "package com.gome.clover.core.module;\r\n\r\nimport com.gome.clover.common.mongodb.BuildMongoDBData;\r\nimport com.gome.clover."
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/monitor/client/ClientHeartBeat.java",
"chars": 3734,
"preview": "package com.gome.clover.core.monitor.client;\r\n\r\nimport com.gome.clover.common.systeminfo.SystemInfoUtil;\r\nimport com.gom"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/monitor/server/ServerHeartBeat.java",
"chars": 4654,
"preview": "package com.gome.clover.core.monitor.server;\r\n\r\nimport com.gome.clover.common.systeminfo.SystemInfoUtil;\r\nimport com.gom"
},
{
"path": "clover/clover-core/src/main/java/com/gome/clover/core/scheduler/MyScheduler.java",
"chars": 8523,
"preview": "package com.gome.clover.core.scheduler;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.Buil"
},
{
"path": "clover/clover-core/src/main/resources/META-INF/cloverjob-1.0.0.xsd",
"chars": 5651,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>\n<xsd:schema xmlns=\"http://www.gome.com.cn/schema/cloverjob\"\n "
},
{
"path": "clover/clover-core/src/main/resources/META-INF/spring.handlers",
"chars": 100,
"preview": "http\\://www.gome.com.cn/schema/cloverjob=com.gome.clover.common.annotation.CloverJobNamespaceHandler"
},
{
"path": "clover/clover-core/src/main/resources/META-INF/spring.schemas",
"chars": 172,
"preview": "http\\://www.gome.com.cn/schema/cloverjob/cloverjob-1.0.0.xsd=META-INF/cloverjob-1.0.0.xsd\nhttp\\:/www.gome.com.cn/schema/"
},
{
"path": "clover/clover-core/src/main/resources/commonConfig.properties",
"chars": 431,
"preview": "zmqServerPort=1688\r\nserverDifferMilliSeconds=120000\r\nclientDifferMilliSeconds=120000\r\nmonitorDifferMilliSeconds=120000\r\n"
},
{
"path": "clover/clover-core/src/main/resources/dev/commonConfig.properties",
"chars": 407,
"preview": "zmqServerPort=1688\r\nserverDifferMilliSeconds=120000\r\nclientDifferMilliSeconds=120000\r\nmonitorDifferMilliSeconds=120000\r\n"
},
{
"path": "clover/clover-core/src/main/resources/dev/mongoDBConfig.properties",
"chars": 726,
"preview": "#dev|sit start\r\n#mongoAddress=10.126.53.42:27067\r\n#dbName=spec_pub\r\n#userName=user_spec_pub\r\n#password=user_spec_pub_pas"
},
{
"path": "clover/clover-core/src/main/resources/dev/redisConfig.properties",
"chars": 128,
"preview": "redis.server = 10.58.50.208\r\nredis.port = 6379\r\nredis.pool.maxActive = 500\r\nredis.pool.maxIdle = 20\r\nredis.pool.maxWai"
},
{
"path": "clover/clover-core/src/main/resources/dev/zkConfig.properties",
"chars": 174,
"preview": "zkConnectString=10.58.50.206:2181,10.58.50.207:2181,10.58.50.208:2181\r\nrootPath=/clover\r\nzkSessionTimeout=3000\r\nuserName"
},
{
"path": "clover/clover-core/src/main/resources/mongoDBConfig.properties",
"chars": 561,
"preview": "mongoAddress=${clover.mongoDB.mongoAddress}\r\ndbName=${clover.mongoDB.dbName}\r\nuserName=${clover.mongoDB.userName}\r\npassw"
},
{
"path": "clover/clover-core/src/main/resources/redisConfig.properties",
"chars": 219,
"preview": "redis.server=${clover.redis.server}\r\nredis.port=${clover.redis.port}\r\nredis.pool.maxActive=${clover.redis.pool.maxActive"
},
{
"path": "clover/clover-core/src/main/resources/uat/commonConfig.properties",
"chars": 407,
"preview": "zmqServerPort=1688\r\nserverDifferMilliSeconds=120000\r\nclientDifferMilliSeconds=120000\r\nmonitorDifferMilliSeconds=120000\r\n"
},
{
"path": "clover/clover-core/src/main/resources/uat/mongoDBConfig.properties",
"chars": 726,
"preview": "#dev|sit start\r\n#mongoAddress=10.126.53.42:27067\r\n#dbName=spec_pub\r\n#userName=user_spec_pub\r\n#password=user_spec_pub_pas"
},
{
"path": "clover/clover-core/src/main/resources/uat/redisConfig.properties",
"chars": 128,
"preview": "redis.server = 10.58.50.208\r\nredis.port = 6379\r\nredis.pool.maxActive = 500\r\nredis.pool.maxIdle = 20\r\nredis.pool.maxWai"
},
{
"path": "clover/clover-core/src/main/resources/uat/zkConfig.properties",
"chars": 396,
"preview": "#zkConnectString=localhost:2181\r\n#zkConnectString=10.126.53.170:2181,10.126.53.168:2181,10.126.53.169:2181\r\n#zkConnectSt"
},
{
"path": "clover/clover-core/src/main/resources/zkConfig.properties",
"chars": 180,
"preview": "zkConnectString=${clover.zk.address}\r\nrootPath=${clover.zk.rootPath}\r\nzkSessionTimeout=${clover.zk.zkSessionTimeout}\r\nus"
},
{
"path": "clover/clover-examples/pom.xml",
"chars": 2103,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/DeleteGomeVipAdPlanJob.java",
"chars": 801,
"preview": "package com.gome.clover;\r\n\r\nimport org.quartz.Job;\r\nimport org.quartz.JobExecutionContext;\r\nimport org.quartz.JobExecuti"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/ObjectToByte.java",
"chars": 17387,
"preview": "package com.gome.clover;\r\n\r\nimport com.gome.clover.common.compress.CompressUtil;\r\nimport com.gome.clover.common.tools.Cl"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/TestEum.java",
"chars": 3915,
"preview": "package com.gome.clover;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.gome.clover.common.tools.Ip"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/TestThread.java",
"chars": 822,
"preview": "package com.gome.clover;\r\n\r\nimport org.junit.Test;\r\n\r\nimport java.util.concurrent.ExecutorService;\r\nimport java.util.con"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/akka/serverclient/pubsub/MyActorSystem.java",
"chars": 469,
"preview": "package com.gome.clover.akka.serverclient.pubsub;\r\n\r\nimport akka.actor.ActorSystem;\r\nimport akka.actor.Props;\r\n\r\npublic "
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/akka/serverclient/pubsub/PublisherActor.java",
"chars": 1035,
"preview": "package com.gome.clover.akka.serverclient.pubsub;\r\n\r\nimport akka.actor.ActorRef;\r\nimport akka.actor.Cancellable;\r\nimport"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/akka/serverclient/pubsub/WorkerTaskA.java",
"chars": 767,
"preview": "package com.gome.clover.akka.serverclient.pubsub;\r\n\r\nimport akka.actor.ActorRef;\r\nimport akka.actor.UntypedActor;\r\nimpor"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/akka/serverclient/pubsub/WorkerTaskB.java",
"chars": 770,
"preview": "package com.gome.clover.akka.serverclient.pubsub;\r\n\r\nimport akka.actor.ActorRef;\r\nimport akka.actor.UntypedActor;\r\nimpor"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/common/compile/TestCompile.java",
"chars": 6499,
"preview": "package com.gome.clover.common.compile;\r\n\r\nimport com.gome.clover.common.tools.ClassUtil;\r\nimport com.gome.clover.core.j"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/cron/TestCron.java",
"chars": 1009,
"preview": "package com.gome.clover.cron;\r\n\r\nimport com.gome.clover.common.tools.DateUtil;\r\nimport org.junit.Test;\r\n\r\nimport java.te"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/job/MyJob.java",
"chars": 2467,
"preview": "package com.gome.clover.job;\r\n\r\nimport com.gome.clover.common.mongodb.DBTableInfo;\r\nimport com.gome.clover.common.mongod"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/job/MyJob1.java",
"chars": 3441,
"preview": "package com.gome.clover.job;\r\n\r\nimport com.gome.clover.common.mongodb.DBTableInfo;\r\nimport com.gome.clover.common.mongod"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/job/MyJobWithSimpleJob.java",
"chars": 2906,
"preview": "package com.gome.clover.job;\r\n\r\nimport com.gome.bg.clover.client.job.SimpleJob;\r\nimport com.gome.clover.core.job.ClientJ"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/json/TestJson.java",
"chars": 2550,
"preview": "package com.gome.clover.json;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport org.junit.Test;\r\n\r\nimport java.util.*;\r\nimpor"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/mongo/TestMongoDB.java",
"chars": 3175,
"preview": "package com.gome.clover.mongo;\r\n\r\nimport com.gome.clover.common.mongodb.DBTableInfo;\r\nimport com.gome.clover.common.mong"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/scheduler/TestSchedulerWithInsertMongoDB.java",
"chars": 2621,
"preview": "package com.gome.clover.scheduler;\r\n\r\nimport com.gome.clover.common.mongodb.DBTableInfo;\r\nimport com.gome.clover.common."
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/scheduler/TestSchedulerWithRegister.java",
"chars": 1200,
"preview": "package com.gome.clover.scheduler;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.gome.clover.commo"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/systeminfo/TestMem.java",
"chars": 1601,
"preview": "package com.gome.clover.systeminfo;\r\n\r\nimport com.sun.management.OperatingSystemMXBean;\r\nimport sun.management.Managemen"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/thread/MyThread.java",
"chars": 1376,
"preview": "package com.gome.clover.thread;/**\r\n * Created by on .\r\n */\r\n\r\nimport com.gome.clover.common.mongodb.MongoDBUtil;\r\nimpo"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/thread/TestMyThreadPool.java",
"chars": 2362,
"preview": "package com.gome.clover.thread;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\n\r\nimport java.util.concurrent.E"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/thread/ThreadDemo.java",
"chars": 871,
"preview": "package com.gome.clover.thread;\r\n\r\nimport java.util.Random;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/thread/ThreadPool.java",
"chars": 3882,
"preview": "package com.gome.clover.thread;/**\r\n * Created by on .\r\n */\r\n\r\nimport java.util.LinkedList;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/thread/ThreadPoolTest.java",
"chars": 2372,
"preview": "package com.gome.clover.thread;\r\n\r\nimport com.gome.clover.common.tools.HttpRequest;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/time/TestTime.java",
"chars": 724,
"preview": "package com.gome.clover.time;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport org.junit.Test;\r\n\r\n/**\r\n *"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zeromq/Helper.java",
"chars": 6424,
"preview": "package com.gome.clover.zeromq;\r\n\r\nimport zmq.*;\r\n\r\nimport java.io.IOException;\r\nimport java.io.InputStream;\r\nimport jav"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zeromq/Pub.java",
"chars": 1349,
"preview": "package com.gome.clover.zeromq;\r\nimport org.zeromq.ZMQ;\r\nimport org.zeromq.ZMQ.Context;\r\nimport org.zeromq.ZMQ.Socket;\r\n"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zeromq/Publisher.java",
"chars": 1198,
"preview": "package com.gome.clover.zeromq;\r\n\r\nimport org.zeromq.ZMQ;\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * "
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zeromq/RandomNum.java",
"chars": 1084,
"preview": "package com.gome.clover.zeromq;\r\n\r\nimport com.gome.clover.common.tools.RandomNumUtil;\r\nimport org.junit.Test;\r\nimport or"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zeromq/Sub1.java",
"chars": 1142,
"preview": "package com.gome.clover.zeromq;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * ┃ ━ "
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zeromq/Subscriber.java",
"chars": 1562,
"preview": "package com.gome.clover.zeromq;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * ┃ ━ "
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zeromq/TestPubsubTcp.java",
"chars": 1655,
"preview": "package com.gome.clover.zeromq;\r\n\r\n/**\r\n * ━━━━━━神兽出没━━━━━━\r\n * ┏┓ ┏┓\r\n * ┏┛┻━━━┛┻┓\r\n * ┃ ┃\r\n * ┃ ━ "
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zeromq/TestReqrepTcp.java",
"chars": 1125,
"preview": "package com.gome.clover.zeromq;\r\n\r\nimport org.junit.Test;\r\nimport zmq.Ctx;\r\nimport zmq.SocketBase;\r\nimport zmq.ZMQ;\r\n\r\n/"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zk/CuratorDemo.java",
"chars": 2370,
"preview": "package com.gome.clover.zk;\r\n\r\nimport com.gome.clover.common.zk.ZKUtil;\r\nimport org.apache.curator.framework.CuratorFram"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zk/CuratorTest.java",
"chars": 8972,
"preview": "package com.gome.clover.zk;\r\n\r\nimport org.apache.curator.framework.CuratorFramework;\r\nimport org.apache.curator.framewor"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zk/MonitorServerZKListener.java",
"chars": 7156,
"preview": "package com.gome.clover.zk;\r\n\r\nimport com.gome.clover.common.zk.ZKUtil;\r\nimport org.apache.curator.framework.CuratorFram"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zk/SyncServer.java",
"chars": 1397,
"preview": "package com.gome.clover.zk;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.gome.clover.common.zk.ZK"
},
{
"path": "clover/clover-examples/src/main/java/com/gome/clover/zk/TestZK.java",
"chars": 1937,
"preview": "package com.gome.clover.zk;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.gome.clover.common.tools"
},
{
"path": "clover/clover-monitor/pom.xml",
"chars": 1307,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/"
},
{
"path": "clover/clover-monitor/src/main/java/com/gome/clover/monitor/MonitorHeartBeat.java",
"chars": 8040,
"preview": "package com.gome.clover.monitor;\r\n\r\nimport com.gome.clover.common.hash.HashTimes;\r\nimport com.gome.clover.common.mongodb"
},
{
"path": "clover/clover-monitor/src/main/java/com/gome/clover/monitor/MonitorTimerTask.java",
"chars": 7455,
"preview": "package com.gome.clover.monitor;\r\n\r\nimport com.alibaba.fastjson.JSON;\r\nimport com.gome.clover.common.mongodb.DBTableInfo"
},
{
"path": "clover/clover-monitor/src/main/java/com/gome/clover/monitor/ServerHeartBeatBak.java",
"chars": 1097,
"preview": "package com.gome.clover.monitor;\r\n\r\nimport com.gome.clover.common.tools.CommonConstants;\r\nimport com.mongodb.BasicDBList"
},
{
"path": "clover/clover-monitor/src/main/java/com/gome/clover/monitor/ServerTimerTask.java",
"chars": 6783,
"preview": "package com.gome.clover.monitor;\r\n\r\nimport com.gome.clover.common.hash.HashTimes;\r\nimport com.gome.clover.common.mongodb"
}
]
// ... and 123 more files (download for full content)
About this extraction
This page contains the full source code of the fnet123/clover GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 323 files (1.2 MB), approximately 371.8k tokens, and a symbol index with 1029 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.