├── .gitattributes ├── .github └── workflows │ └── codeql-analysis.yml ├── .gitignore ├── .mvn ├── mvnw ├── mvnw.cmd └── wrapper │ ├── maven-wrapper.jar │ └── maven-wrapper.properties ├── LICENSE ├── LICENSE.txt ├── README.md ├── checkstyle.xml ├── deployment ├── agent.sh ├── build.bat ├── build.sh ├── executor.c ├── server.bat └── server.sh ├── header.txt ├── jobx-agent ├── assembly.xml ├── pom.xml └── src │ ├── assembly │ ├── bin │ │ ├── jobx.bat │ │ ├── jobx.sh │ │ ├── kill.sh │ │ ├── monitor.sh │ │ ├── setclasspath.bat │ │ ├── setclasspath.sh │ │ ├── shutdown.bat │ │ ├── shutdown.sh │ │ ├── startup.bat │ │ └── startup.sh │ ├── conf │ │ ├── conf.properties │ │ └── log4j.properties │ ├── logs │ │ └── .keep │ ├── native │ │ ├── libsigar-amd64-freebsd-6.so │ │ ├── libsigar-amd64-linux.so │ │ ├── libsigar-amd64-solaris.so │ │ ├── libsigar-ia64-hpux-11.sl │ │ ├── libsigar-ia64-linux.so │ │ ├── libsigar-pa-hpux-11.sl │ │ ├── libsigar-ppc-aix-5.so │ │ ├── libsigar-ppc-linux.so │ │ ├── libsigar-ppc64-aix-5.so │ │ ├── libsigar-ppc64-linux.so │ │ ├── libsigar-s390x-linux.so │ │ ├── libsigar-sparc-solaris.so │ │ ├── libsigar-sparc64-solaris.so │ │ ├── libsigar-universal-macosx.dylib │ │ ├── libsigar-universal64-macosx.dylib │ │ ├── libsigar-x86-freebsd-5.so │ │ ├── libsigar-x86-freebsd-6.so │ │ ├── libsigar-x86-linux.so │ │ ├── libsigar-x86-solaris.so │ │ ├── sigar-amd64-winnt.dll │ │ ├── sigar-x86-winnt.dll │ │ └── sigar-x86-winnt.lib │ └── temp │ │ └── .keep │ ├── main │ ├── java │ │ └── com │ │ │ └── jobxhub │ │ │ └── agent │ │ │ ├── bootstrap │ │ │ └── JobXAgent.java │ │ │ ├── process │ │ │ ├── ExecuteUser.java │ │ │ ├── JobXProcess.java │ │ │ └── ProcessException.java │ │ │ ├── service │ │ │ ├── AgentService.java │ │ │ └── MonitorService.java │ │ │ └── util │ │ │ ├── CircularBuffer.java │ │ │ ├── ProcessLogger.java │ │ │ └── PropertiesLoader.java │ └── resources │ │ └── META-INF │ │ └── jobx │ │ └── com.jobxhub.rpc.ServerHandler │ └── test │ └── java │ └── com │ └── jobxhub │ └── agent │ └── test │ ├── BootstrapTest.java │ └── TestDemo.java ├── jobx-api └── pom.xml ├── jobx-common ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── jobxhub │ │ │ └── common │ │ │ ├── Constants.java │ │ │ ├── api │ │ │ └── AgentJob.java │ │ │ ├── exception │ │ │ ├── ApplicationException.java │ │ │ ├── BasicException.java │ │ │ ├── InvalidException.java │ │ │ ├── ParameterException.java │ │ │ ├── PingException.java │ │ │ ├── RpcException.java │ │ │ ├── TimeoutException.java │ │ │ └── UnknownException.java │ │ │ ├── ext │ │ │ ├── ClassMark.java │ │ │ ├── ExtensionLoader.java │ │ │ ├── MethodMark.java │ │ │ └── SPI.java │ │ │ ├── graph │ │ │ ├── Graph.java │ │ │ ├── KahnTopo.java │ │ │ └── Node.java │ │ │ ├── io │ │ │ ├── Bytes.java │ │ │ ├── StreamUtils.java │ │ │ ├── UnsafeByteArrayInputStream.java │ │ │ ├── UnsafeByteArrayOutputStream.java │ │ │ ├── UnsafeStringReader.java │ │ │ └── UnsafeStringWriter.java │ │ │ ├── job │ │ │ ├── Action.java │ │ │ ├── AgentJob.java │ │ │ ├── Alarm.java │ │ │ ├── Monitor.java │ │ │ ├── RecvieMessage.java │ │ │ ├── Request.java │ │ │ ├── RequestFile.java │ │ │ ├── Response.java │ │ │ ├── ResponseFile.java │ │ │ ├── RpcType.java │ │ │ └── SecureModel.java │ │ │ ├── logging │ │ │ ├── FormattingTuple.java │ │ │ ├── LoggerFactory.java │ │ │ └── MessageFormatter.java │ │ │ ├── serialize │ │ │ ├── Cleanable.java │ │ │ ├── DataInput.java │ │ │ ├── DataOutput.java │ │ │ ├── ObjectInput.java │ │ │ ├── ObjectOutput.java │ │ │ ├── Serializer.java │ │ │ ├── fastjson │ │ │ │ ├── FastJsonObjectInput.java │ │ │ │ ├── FastJsonObjectOutput.java │ │ │ │ └── FastJsonSerializer.java │ │ │ ├── fst │ │ │ │ ├── FstFactory.java │ │ │ │ ├── FstObjectInput.java │ │ │ │ ├── FstObjectOutput.java │ │ │ │ └── FstSerializer.java │ │ │ ├── hessian2 │ │ │ │ ├── Hessian2ObjectInput.java │ │ │ │ ├── Hessian2ObjectOutput.java │ │ │ │ ├── Hessian2Serializer.java │ │ │ │ └── Hessian2SerializerFactory.java │ │ │ ├── java │ │ │ │ ├── CompactedObjectInputStream.java │ │ │ │ ├── CompactedObjectOutputStream.java │ │ │ │ ├── JavaObjectInput.java │ │ │ │ ├── JavaObjectOutput.java │ │ │ │ └── JavaSerializer.java │ │ │ ├── kryo │ │ │ │ ├── CompatibleKryo.java │ │ │ │ ├── KryoObjectInput.java │ │ │ │ ├── KryoObjectOutput.java │ │ │ │ ├── KryoSerializer.java │ │ │ │ └── utils │ │ │ │ │ ├── AbstractKryoFactory.java │ │ │ │ │ ├── KryoUtils.java │ │ │ │ │ ├── PooledKryoFactory.java │ │ │ │ │ ├── PrototypeKryoFactory.java │ │ │ │ │ └── ThreadLocalKryoFactory.java │ │ │ ├── nativejava │ │ │ │ ├── NativeJavaObjectInput.java │ │ │ │ ├── NativeJavaObjectOutput.java │ │ │ │ └── NativeJavaSerializer.java │ │ │ └── support │ │ │ │ ├── AbstractSerializer.java │ │ │ │ └── SerializableClassRegistry.java │ │ │ └── util │ │ │ ├── AssertUtils.java │ │ │ ├── ClassAccessor.java │ │ │ ├── ClassHelper.java │ │ │ ├── ClassLoaderUtils.java │ │ │ ├── CommandUtils.java │ │ │ ├── CommonUtils.java │ │ │ ├── CompatibleTypeUtils.java │ │ │ ├── ConsistentHash.java │ │ │ ├── ContainerUtils.java │ │ │ ├── CookieUtils.java │ │ │ ├── DateUtils.java │ │ │ ├── DigestUtils.java │ │ │ ├── EnumUtil.java │ │ │ ├── ExceptionHandler.java │ │ │ ├── ExceptionUtils.java │ │ │ ├── Holder.java │ │ │ ├── HttpClientUtils.java │ │ │ ├── HttpUtils.java │ │ │ ├── IOUtils.java │ │ │ ├── IPUtils.java │ │ │ ├── IdGenerator.java │ │ │ ├── ImageUtils.java │ │ │ ├── IntUtils.java │ │ │ ├── Ints.java │ │ │ ├── LRUCache.java │ │ │ ├── MacUtils.java │ │ │ ├── MavenUtils.java │ │ │ ├── MurmurHash.java │ │ │ ├── NamedThreadFactory.java │ │ │ ├── NetUtils.java │ │ │ ├── ObjectUtils.java │ │ │ ├── PojoUtils.java │ │ │ ├── PropertyPlaceholder.java │ │ │ ├── ProtostuffUtils.java │ │ │ ├── RSAUtils.java │ │ │ ├── ReflectUtils.java │ │ │ ├── StringUtils.java │ │ │ ├── SystemClock.java │ │ │ ├── SystemPropertyUtils.java │ │ │ ├── WebUtils.java │ │ │ ├── collection │ │ │ ├── AbstractEntry.java │ │ │ ├── CollectionUtils.java │ │ │ ├── ConcurrentAutoTable.java │ │ │ ├── ConcurrentHashSet.java │ │ │ ├── ConcurrentSet.java │ │ │ ├── HashMap.java │ │ │ ├── IgnoreCaseMap.java │ │ │ ├── NonBlockingHashMap.java │ │ │ ├── NonBlockingHashMapLong.java │ │ │ └── ParamsMap.java │ │ │ └── internal │ │ │ ├── Unsafe.java │ │ │ ├── UnsafeIntegerFieldUpdater.java │ │ │ └── UnsafeLongFieldUpdater.java │ └── resources │ │ └── META-INF │ │ └── jobx │ │ └── com.jobxhub.common.serialize.Serializer │ └── test │ └── java │ ├── RSATest.java │ ├── SPITest.java │ └── SyncTest.java ├── jobx-examples ├── example-hadoop │ └── pom.xml ├── example-java │ └── pom.xml ├── example-mybatis │ └── pom.xml ├── example-mysql │ └── pom.xml ├── example-oracle │ └── pom.xml ├── example-php │ └── pom.xml ├── example-shell │ └── pom.xml ├── example-spark │ └── pom.xml ├── example-spring │ └── pom.xml └── pom.xml ├── jobx-registry ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── jobxhub │ │ │ └── registry │ │ │ ├── URL.java │ │ │ ├── api │ │ │ ├── NotifyListener.java │ │ │ └── Registry.java │ │ │ └── zookeeper │ │ │ ├── ChildListener.java │ │ │ ├── StateListener.java │ │ │ ├── ZookeeperClient.java │ │ │ ├── ZookeeperRegistry.java │ │ │ ├── ZookeeperTransporter.java │ │ │ ├── curator │ │ │ ├── CuratorZookeeperClient.java │ │ │ └── CuratorZookeeperTransporter.java │ │ │ ├── support │ │ │ └── AbstractZookeeperClient.java │ │ │ └── zkclient │ │ │ ├── ZkclientZookeeperClient.java │ │ │ └── ZkclientZookeeperTransporter.java │ └── resources │ │ └── META-INF │ │ └── jobx │ │ ├── com.jobxhub.registry.zookeeper.ZookeeperClient │ │ └── com.jobxhub.registry.zookeeper.ZookeeperTransporter │ └── test │ └── java │ └── com │ └── jobxhub │ └── registry │ └── RegistryTest.java ├── jobx-rpc ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── jobxhub │ │ │ └── rpc │ │ │ ├── Client.java │ │ │ ├── InvokeCallback.java │ │ │ ├── Invoker.java │ │ │ ├── RpcFuture.java │ │ │ ├── Server.java │ │ │ ├── ServerHandler.java │ │ │ ├── mina │ │ │ ├── MinaClient.java │ │ │ ├── MinaClientHandler.java │ │ │ ├── MinaCodecAdapter.java │ │ │ ├── MinaConnectWrapper.java │ │ │ ├── MinaServer.java │ │ │ └── MinaServerHandler.java │ │ │ ├── netty │ │ │ ├── NettyChannelWrapper.java │ │ │ ├── NettyClient.java │ │ │ ├── NettyClientHandler.java │ │ │ ├── NettyCodecAdapter.java │ │ │ ├── NettyServer.java │ │ │ ├── NettyServerHandler.java │ │ │ └── idle │ │ │ │ ├── IdleClientHandler.java │ │ │ │ ├── IdleServerHandler.java │ │ │ │ ├── JobXIdleStateHandler.java │ │ │ │ └── domain │ │ │ │ ├── IdleRequest.java │ │ │ │ └── IdleResponse.java │ │ │ └── support │ │ │ ├── AbstractClient.java │ │ │ └── ChannelWrapper.java │ └── resources │ │ └── META-INF │ │ └── jobx │ │ ├── com.jobxhub.rpc.Client │ │ └── com.jobxhub.rpc.Server │ └── test │ └── java │ ├── NettyFileTest.java │ └── SPITest.java ├── jobx-server ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── jobxhub │ │ │ └── server │ │ │ ├── alarm │ │ │ ├── AbstractSendNotice.java │ │ │ ├── AlarmMessage.java │ │ │ ├── AlarmNoticeFacory.java │ │ │ ├── DDSendNotice.java │ │ │ ├── EmailSendNotice.java │ │ │ ├── SMSSendNotice.java │ │ │ └── SendNotice.java │ │ │ ├── annotation │ │ │ └── RequestRepeat.java │ │ │ ├── bootstrap │ │ │ ├── JettyLauncher.java │ │ │ ├── Launcher.java │ │ │ ├── Startup.java │ │ │ └── TomcatLauncher.java │ │ │ ├── controller │ │ │ ├── AgentController.java │ │ │ ├── ApiController.java │ │ │ ├── BaseController.java │ │ │ ├── ConfigController.java │ │ │ ├── DashboardController.java │ │ │ ├── GroupController.java │ │ │ ├── JobController.java │ │ │ ├── MonitorController.java │ │ │ ├── RecordController.java │ │ │ ├── TerminalController.java │ │ │ ├── UserController.java │ │ │ └── VerifyController.java │ │ │ ├── dao │ │ │ ├── AgentDao.java │ │ │ ├── ConfigDao.java │ │ │ ├── GroupDao.java │ │ │ ├── JobDao.java │ │ │ ├── LogDao.java │ │ │ ├── RecordDao.java │ │ │ ├── RoleDao.java │ │ │ ├── TerminalDao.java │ │ │ ├── UserAgentDao.java │ │ │ └── UserDao.java │ │ │ ├── domain │ │ │ ├── AgentBean.java │ │ │ ├── AgentGroupBean.java │ │ │ ├── ConfigBean.java │ │ │ ├── GroupBean.java │ │ │ ├── JobAgent.java │ │ │ ├── JobBean.java │ │ │ ├── JobDependency.java │ │ │ ├── JobFlow.java │ │ │ ├── LogBean.java │ │ │ ├── RecordBean.java │ │ │ ├── RecordMessageBean.java │ │ │ ├── RoleBean.java │ │ │ ├── TerminalBean.java │ │ │ ├── UserAgentBean.java │ │ │ └── UserBean.java │ │ │ ├── dto │ │ │ ├── Agent.java │ │ │ ├── AgentGroup.java │ │ │ ├── Chart.java │ │ │ ├── Config.java │ │ │ ├── Cropper.java │ │ │ ├── Group.java │ │ │ ├── Job.java │ │ │ ├── Log.java │ │ │ ├── Record.java │ │ │ ├── Role.java │ │ │ ├── Status.java │ │ │ ├── Terminal.java │ │ │ ├── User.java │ │ │ └── UserAgent.java │ │ │ ├── event │ │ │ ├── AlarmEvent.java │ │ │ └── AlarmListener.java │ │ │ ├── handler │ │ │ ├── ExceptionHandler.java │ │ │ ├── JobXServlet.java │ │ │ └── SecurityHandlerInterceptor.java │ │ │ ├── job │ │ │ ├── JobXCollector.java │ │ │ ├── JobXInitializer.java │ │ │ ├── JobXInvoker.java │ │ │ └── JobXRegistry.java │ │ │ ├── service │ │ │ ├── AgentService.java │ │ │ ├── ConfigService.java │ │ │ ├── ExecuteService.java │ │ │ ├── GroupService.java │ │ │ ├── JobService.java │ │ │ ├── LogService.java │ │ │ ├── NoticeService.java │ │ │ ├── QuartzExecutor.java │ │ │ ├── RecordService.java │ │ │ ├── RoleService.java │ │ │ ├── SchedulerService.java │ │ │ ├── TerminalService.java │ │ │ ├── UserAgentService.java │ │ │ └── UserService.java │ │ │ ├── session │ │ │ ├── HttpSessionFilter.java │ │ │ ├── HttpSessionStore.java │ │ │ ├── cached │ │ │ │ ├── CachedManager.java │ │ │ │ ├── MemcachedManager.java │ │ │ │ └── RedisCacheManager.java │ │ │ └── wrapper │ │ │ │ ├── HttpServletRequestSessionWrapper.java │ │ │ │ ├── HttpSessionStoreWrapper.java │ │ │ │ └── HttpSessionWrapper.java │ │ │ ├── support │ │ │ ├── JobXTools.java │ │ │ ├── SftpMonitor.java │ │ │ ├── SshUserInfo.java │ │ │ ├── TerminalClient.java │ │ │ ├── TerminalClusterProcessor.java │ │ │ ├── TerminalContext.java │ │ │ ├── TerminalOneProcessor.java │ │ │ └── TerminalSession.java │ │ │ ├── tag │ │ │ ├── CronTag.java │ │ │ ├── PageBean.java │ │ │ └── PagerTag.java │ │ │ ├── util │ │ │ ├── PageUtils.java │ │ │ └── Parser.java │ │ │ └── websocket │ │ │ ├── TerminalHandShaker.java │ │ │ └── TerminalHandler.java │ ├── resources │ │ ├── META-INF │ │ │ └── jobx │ │ │ │ └── com.jobxhub.server.bootstrap.Launcher │ │ ├── app-banner.txt │ │ ├── app-datasource.xml │ │ ├── app-mvc.xml │ │ ├── app-place.xml │ │ ├── app-session-memcached.xml │ │ ├── app-session-redis.xml │ │ ├── app-websocket.xml │ │ ├── config.properties │ │ ├── log4j.properties │ │ ├── mapper │ │ │ ├── AgentDao.xml │ │ │ ├── ConfigDao.xml │ │ │ ├── GroupDao.xml │ │ │ ├── JobDao.xml │ │ │ ├── LogDao.xml │ │ │ ├── RecordDao.xml │ │ │ ├── RoleDao.xml │ │ │ ├── TerminalDao.xml │ │ │ ├── UserAgentDao.xml │ │ │ └── UserDao.xml │ │ └── sql │ │ │ ├── V1.1.0-V1.2.0.sql │ │ │ └── V1.2.0.sql │ └── webapp │ │ ├── WEB-INF │ │ ├── layouts │ │ │ ├── cron.jsp │ │ │ ├── decorators.jsp │ │ │ ├── email.html │ │ │ ├── menu.jsp │ │ │ ├── message.jsp │ │ │ └── resource.jsp │ │ ├── sitemesh3.xml │ │ ├── taglib │ │ │ ├── c-1_0.tld │ │ │ ├── c.tld │ │ │ ├── fmt-1_0-rt.tld │ │ │ ├── fmt-1_0.tld │ │ │ ├── fmt.tld │ │ │ ├── fn.tld │ │ │ └── opencron.tld │ │ ├── view │ │ │ ├── agent │ │ │ │ ├── add.jsp │ │ │ │ ├── detail.jsp │ │ │ │ ├── refresh.jsp │ │ │ │ └── view.jsp │ │ │ ├── config │ │ │ │ ├── edit.jsp │ │ │ │ └── view.jsp │ │ │ ├── error │ │ │ │ ├── 404.jsp │ │ │ │ ├── 500.jsp │ │ │ │ └── repeat.jsp │ │ │ ├── group │ │ │ │ ├── add.jsp │ │ │ │ ├── edit.jsp │ │ │ │ └── view.jsp │ │ │ ├── home │ │ │ │ ├── index.jsp │ │ │ │ └── login.jsp │ │ │ ├── job │ │ │ │ ├── add.jsp │ │ │ │ ├── detail.jsp │ │ │ │ ├── edit.jsp │ │ │ │ ├── exec.jsp │ │ │ │ └── view.jsp │ │ │ ├── monitor │ │ │ │ └── druid.jsp │ │ │ ├── notice │ │ │ │ ├── detail.jsp │ │ │ │ ├── info.jsp │ │ │ │ └── view.jsp │ │ │ ├── record │ │ │ │ ├── detail.jsp │ │ │ │ ├── done.jsp │ │ │ │ ├── refresh.jsp │ │ │ │ └── running.jsp │ │ │ ├── terminal │ │ │ │ ├── console.jsp │ │ │ │ ├── error.jsp │ │ │ │ └── view.jsp │ │ │ └── user │ │ │ │ ├── add.jsp │ │ │ │ ├── detail.jsp │ │ │ │ ├── edit.jsp │ │ │ │ └── view.jsp │ │ └── web.xml │ │ └── static │ │ ├── css │ │ ├── animate.css │ │ ├── animate.min.css │ │ ├── app.min.css │ │ ├── bootstrap.css │ │ ├── calendar.css │ │ ├── font-awesome-ie7.min.css │ │ ├── font-awesome.css │ │ ├── font-material.css │ │ ├── form.css │ │ ├── generics.css │ │ ├── glyphicons.css │ │ ├── icons.css │ │ ├── jobx.css │ │ ├── jobx.term.css │ │ ├── jquery.mCustomScrollbar.css │ │ ├── lightbox.css │ │ ├── loading.css │ │ ├── morris.css │ │ ├── prettify.min.css │ │ ├── style.css │ │ └── sweetalert.css │ │ ├── fonts │ │ ├── fontawesome │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ ├── glyphicons-regular.eot │ │ ├── glyphicons-regular.svg │ │ ├── glyphicons-regular.ttf │ │ ├── glyphicons-regular.woff │ │ ├── glyphicons-regular.woff2 │ │ ├── icons │ │ │ ├── icon.svg │ │ │ ├── icon.ttf │ │ │ └── icon.woff │ │ ├── material-design-iconic-font │ │ │ ├── css │ │ │ │ └── material-design-iconic-font.min.css │ │ │ └── fonts │ │ │ │ ├── Material-Design-Iconic-Font-v=2.2.0.ttf │ │ │ │ ├── Material-Design-Iconic-Font-v=2.2.0.woff │ │ │ │ └── Material-Design-Iconic-Font-v=2.2.0.woff2 │ │ ├── material-icons │ │ │ ├── Material-Design-Iconic-Font.eot │ │ │ ├── Material-Design-Iconic-Font.svg │ │ │ ├── Material-Design-Iconic-Font.ttf │ │ │ └── Material-Design-Iconic-Font.woff │ │ ├── nunito │ │ │ ├── nunito-bold-.eot │ │ │ ├── nunito-bold.eot │ │ │ ├── nunito-bold.woff │ │ │ ├── nunito-bold.woff2 │ │ │ ├── nunito-regular-.html │ │ │ ├── nunito-regular.eot │ │ │ ├── nunito-regular.woff │ │ │ ├── nunito-regular.woff2 │ │ │ ├── nunito-semibold-.eot │ │ │ ├── nunito-semibold.eot │ │ │ ├── nunito-semibold.woff │ │ │ └── nunito-semibold.woff2 │ │ └── opan-sans │ │ │ ├── OpenSans-Light-webfont.eot │ │ │ ├── OpenSans-Light-webfont.svg │ │ │ ├── OpenSans-Light-webfont.ttf │ │ │ ├── OpenSans-Light-webfont.woff │ │ │ ├── OpenSans-Regular-webfont.eot │ │ │ ├── OpenSans-Regular-webfont.svg │ │ │ ├── OpenSans-Regular-webfont.ttf │ │ │ ├── OpenSans-Regular-webfont.woff │ │ │ ├── OpenSans-Semibold-webfont.eot │ │ │ ├── OpenSans-Semibold-webfont.svg │ │ │ ├── OpenSans-Semibold-webfont.ttf │ │ │ └── OpenSans-Semibold-webfont.woff │ │ ├── img │ │ ├── 500.png │ │ ├── add.png │ │ ├── back.jpg │ │ ├── body │ │ │ ├── 1.jpg │ │ │ ├── 10.png │ │ │ ├── 2.jpg │ │ │ ├── 3.jpg │ │ │ ├── 4.jpg │ │ │ ├── 5.png │ │ │ ├── 6.png │ │ │ ├── 7.png │ │ │ ├── 8.png │ │ │ ├── 9.png │ │ │ ├── blue.jpg │ │ │ ├── chrome.jpg │ │ │ ├── greenish.jpg │ │ │ ├── kiwi.jpg │ │ │ ├── night.jpg │ │ │ ├── orange.jpg │ │ │ ├── skin-1.jpg │ │ │ ├── skin-10.png │ │ │ ├── skin-2.jpg │ │ │ ├── skin-3.jpg │ │ │ ├── skin-4.jpg │ │ │ ├── skin-5.png │ │ │ ├── skin-6.png │ │ │ ├── skin-7.png │ │ │ ├── skin-8.png │ │ │ ├── skin-9.png │ │ │ ├── skin-blue.jpg │ │ │ ├── skin-chrome.jpg │ │ │ ├── skin-greenish.jpg │ │ │ ├── skin-kiwi.jpg │ │ │ ├── skin-night.jpg │ │ │ ├── skin-orange.jpg │ │ │ ├── skin-sky.jpg │ │ │ ├── skin-violate.jpg │ │ │ ├── sky.jpg │ │ │ └── violate.jpg │ │ ├── browsers │ │ │ ├── chrome.png │ │ │ ├── firefox.png │ │ │ ├── ie.png │ │ │ ├── opera.png │ │ │ └── safari.png │ │ ├── color-picker │ │ │ ├── alpha.png │ │ │ ├── hue.png │ │ │ └── saturation.png │ │ ├── crontab_ico.png │ │ ├── dialog_closed.png │ │ ├── dot_pattern.png │ │ ├── favicon.ico │ │ ├── file.png │ │ ├── folder-close.png │ │ ├── folder-open.png │ │ ├── icon-loader.gif │ │ ├── img-cover.png │ │ ├── jobx.png │ │ ├── loadinfo.gif │ │ ├── opencron.png │ │ ├── profile-pic.jpg │ │ ├── quartz_ico.png │ │ ├── search-sm.png │ │ ├── search.png │ │ ├── search@2x.png │ │ ├── select-bg.png │ │ ├── sort.png │ │ ├── terminal.png │ │ ├── timg.gif │ │ ├── timg2.gif │ │ ├── uploading.gif │ │ └── wechat_qr.jpg │ │ └── js │ │ ├── My97DatePicker │ │ ├── WdatePicker.js │ │ ├── calendar.js │ │ ├── lang │ │ │ ├── en.js │ │ │ ├── zh-cn.js │ │ │ └── zh-tw.js │ │ └── skin │ │ │ ├── WdatePicker.css │ │ │ ├── datePicker.png │ │ │ ├── default │ │ │ ├── datepicker.css │ │ │ └── img.gif │ │ │ └── whyGreen │ │ │ ├── bg.jpg │ │ │ ├── datepicker.css │ │ │ └── img.gif │ │ ├── autosize.min.js │ │ ├── bootstrap-select │ │ ├── bootstrap-select-lang.js │ │ ├── bootstrap-select.css │ │ └── bootstrap-select.js │ │ ├── bootstrap.js │ │ ├── bowser.min.js │ │ ├── calendar.min.js │ │ ├── charts.js │ │ ├── chosen.min.js │ │ ├── clipboard.js │ │ ├── colorpicker.min.js │ │ ├── cron.js │ │ ├── cropper │ │ ├── cropper.css │ │ ├── cropper.js │ │ └── cropper.main.css │ │ ├── dagre-d3 │ │ ├── d3.v4.min.js │ │ ├── dagre-d3.core.min.js │ │ └── dagre-d3.min.js │ │ ├── dashboard.js │ │ ├── datetimepicker.min.js │ │ ├── dygraph-combined.js │ │ ├── easypiechart.js │ │ ├── echarts.min.js │ │ ├── fileinput │ │ ├── css │ │ │ ├── fileinput.css │ │ │ └── fileinput.min.css │ │ ├── img │ │ │ ├── loading-sm.gif │ │ │ └── loading.gif │ │ ├── js │ │ │ ├── fileinput.js │ │ │ ├── fileinput.min.js │ │ │ ├── locales │ │ │ │ ├── LANG.js │ │ │ │ ├── ar.js │ │ │ │ ├── bg.js │ │ │ │ ├── ca.js │ │ │ │ ├── cr.js │ │ │ │ ├── cz.js │ │ │ │ ├── da.js │ │ │ │ ├── de.js │ │ │ │ ├── el.js │ │ │ │ ├── es.js │ │ │ │ ├── fa.js │ │ │ │ ├── fi.js │ │ │ │ ├── fr.js │ │ │ │ ├── hu.js │ │ │ │ ├── id.js │ │ │ │ ├── it.js │ │ │ │ ├── ja.js │ │ │ │ ├── kr.js │ │ │ │ ├── nl.js │ │ │ │ ├── pl.js │ │ │ │ ├── pt-BR.js │ │ │ │ ├── pt.js │ │ │ │ ├── ro.js │ │ │ │ ├── ru.js │ │ │ │ ├── sk.js │ │ │ │ ├── sl.js │ │ │ │ ├── th.js │ │ │ │ ├── tr.js │ │ │ │ ├── uk.js │ │ │ │ ├── vi.js │ │ │ │ ├── zh-TW.js │ │ │ │ └── zh.js │ │ │ └── plugins │ │ │ │ ├── canvas-to-blob.js │ │ │ │ ├── canvas-to-blob.min.js │ │ │ │ ├── purify.js │ │ │ │ ├── purify.min.js │ │ │ │ ├── sortable.js │ │ │ │ └── sortable.min.js │ │ ├── sass │ │ │ └── fileinput.scss │ │ └── themes │ │ │ ├── fa │ │ │ └── theme.js │ │ │ └── gly │ │ │ └── theme.js │ │ ├── flot │ │ ├── curvedLines.js │ │ ├── jquery.flot.js │ │ ├── jquery.flot.pie.js │ │ └── jquery.flot.resize.js │ │ ├── functions.js │ │ ├── gauge.js │ │ ├── highcharts │ │ ├── gfx │ │ │ └── vml-radial-gradient.png │ │ ├── graphics │ │ │ ├── highslide │ │ │ │ ├── close.png │ │ │ │ ├── closeX.png │ │ │ │ ├── outlines │ │ │ │ │ └── rounded-white.png │ │ │ │ ├── resize.gif │ │ │ │ └── zoomout.cur │ │ │ ├── meteogram-symbols-30px.png │ │ │ ├── search.png │ │ │ ├── skies.jpg │ │ │ ├── snow.png │ │ │ └── sun.png │ │ ├── index.htm │ │ ├── js │ │ │ ├── adapters │ │ │ │ ├── standalone-framework.js │ │ │ │ └── standalone-framework.src.js │ │ │ ├── highcharts-3d.js │ │ │ ├── highcharts-3d.src.js │ │ │ ├── highcharts-more.js │ │ │ ├── highcharts-more.src.js │ │ │ ├── highcharts.js │ │ │ ├── highcharts.src.js │ │ │ ├── modules │ │ │ │ ├── boost.js │ │ │ │ ├── boost.src.js │ │ │ │ ├── broken-axis.js │ │ │ │ ├── broken-axis.src.js │ │ │ │ ├── canvas-tools.js │ │ │ │ ├── canvas-tools.src.js │ │ │ │ ├── data.js │ │ │ │ ├── data.src.js │ │ │ │ ├── drilldown.js │ │ │ │ ├── drilldown.src.js │ │ │ │ ├── exporting.js │ │ │ │ ├── exporting.src.js │ │ │ │ ├── funnel.js │ │ │ │ ├── funnel.src.js │ │ │ │ ├── heatmap.js │ │ │ │ ├── heatmap.src.js │ │ │ │ ├── no-data-to-display.js │ │ │ │ ├── no-data-to-display.src.js │ │ │ │ ├── offline-exporting.js │ │ │ │ ├── offline-exporting.src.js │ │ │ │ ├── solid-gauge.js │ │ │ │ ├── solid-gauge.src.js │ │ │ │ ├── treemap.js │ │ │ │ └── treemap.src.js │ │ │ └── themes │ │ │ │ ├── dark-blue.js │ │ │ │ ├── dark-green.js │ │ │ │ ├── dark-unica.js │ │ │ │ ├── gray.js │ │ │ │ ├── grid-light.js │ │ │ │ ├── grid.js │ │ │ │ ├── sand-signika.js │ │ │ │ └── skies.js │ │ └── readme.txt │ │ ├── html5 │ │ ├── html5shiv │ │ │ ├── html5shiv-printshiv.js │ │ │ ├── html5shiv-printshiv.min.js │ │ │ ├── html5shiv.js │ │ │ └── html5shiv.min.js │ │ ├── json │ │ │ ├── cycle.js │ │ │ ├── json2.js │ │ │ ├── json2.min.js │ │ │ ├── json5.js │ │ │ ├── json5.min.js │ │ │ ├── json_parse.js │ │ │ └── json_parse_state.js │ │ └── respond │ │ │ ├── respond.matchmedia.addListener.min.js │ │ │ ├── respond.matchmedia.addListener.src.js │ │ │ ├── respond.min.js │ │ │ └── respond.src.js │ │ ├── icheck.js │ │ ├── input-mask.min.js │ │ ├── job.validata.js │ │ ├── jobx.cropper.js │ │ ├── jobx.js │ │ ├── jobx.term.js │ │ ├── jquery-ui.min.js │ │ ├── jquery.base64.js │ │ ├── jquery.cookie.js │ │ ├── jquery.easing.1.3.js │ │ ├── jquery.floatThead.js │ │ ├── jquery.js │ │ ├── jquery.mCustomScrollbar.min.js │ │ ├── jquery.min.js │ │ ├── map.js │ │ ├── md5.js │ │ ├── morris.min.js │ │ ├── pirobox.min.js │ │ ├── prettify.min.js │ │ ├── raphael.2.1.2-min.js │ │ ├── scroll.min.js │ │ ├── select.min.js │ │ ├── slider.min.js │ │ ├── socket.io.js │ │ ├── spinner.min.js │ │ ├── sweetalert.min.js │ │ ├── testdevice.js │ │ ├── toastr │ │ ├── toastr.css │ │ └── toastr.js │ │ ├── toggler.min.js │ │ ├── xterm │ │ ├── addons │ │ │ ├── attach │ │ │ │ └── attach.js │ │ │ ├── fit │ │ │ │ └── fit.js │ │ │ ├── fullscreen │ │ │ │ ├── fullscreen.css │ │ │ │ └── fullscreen.js │ │ │ ├── linkify │ │ │ │ └── linkify.js │ │ │ └── terminado │ │ │ │ └── terminado.js │ │ ├── xterm.css │ │ ├── xterm.js │ │ └── xterm.js.map │ │ └── ztree │ │ ├── css │ │ ├── awesomeStyle │ │ │ ├── awesome.css │ │ │ ├── awesome.less │ │ │ ├── fa.less │ │ │ └── img │ │ │ │ └── loading.gif │ │ ├── metroStyle │ │ │ ├── img │ │ │ │ ├── line_conn.png │ │ │ │ ├── loading.gif │ │ │ │ ├── metro.gif │ │ │ │ └── metro.png │ │ │ └── metroStyle.css │ │ └── zTreeStyle │ │ │ ├── img │ │ │ ├── diy │ │ │ │ ├── 1_close.png │ │ │ │ ├── 1_open.png │ │ │ │ ├── 2.png │ │ │ │ ├── 3.png │ │ │ │ ├── 4.png │ │ │ │ ├── 5.png │ │ │ │ ├── 6.png │ │ │ │ ├── 7.png │ │ │ │ ├── 8.png │ │ │ │ └── 9.png │ │ │ ├── line_conn.gif │ │ │ ├── loading.gif │ │ │ ├── zTreeStandard.gif │ │ │ └── zTreeStandard.png │ │ │ └── zTreeStyle.css │ │ ├── jquery.ztree.core.min.js │ │ ├── jquery.ztree.excheck.min.js │ │ ├── jquery.ztree.exedit.min.js │ │ └── jquery.ztree.exhide.min.js │ └── test │ ├── HibernateTest.java │ └── TestDemo.java └── pom.xml /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=Java 2 | *.css linguist-language=Java 3 | *.sh linguist-language=Java 4 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | */target 2 | .idea/* 3 | *.iml 4 | .metadata/* 5 | .recommenders/* 6 | */.classpath 7 | */.project 8 | */.settings 9 | */.DS_Store 10 | .idea/ 11 | opencron-server/src/main/webapp/upload/ 12 | opencron-server/webapp/ 13 | -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo1.maven.org/maven2/org/apache/maven/apache-maven/3.5.0/apache-maven-3.5.0-bin.zip -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## Make scheduling easier 2 | -------------------------------------------------------------------------------- /header.txt: -------------------------------------------------------------------------------- 1 | 2 | Copyright (c) 2015 The JobX Project 3 | 4 | Licensed to the Apache Software Foundation (ASF) under one 5 | or more contributor license agreements. See the NOTICE file 6 | distributed with this work for additional information 7 | regarding copyright ownership. The ASF licenses this file 8 | to you under the Apache License, Version 2.0 (the 9 | "License"); you may not use this file except in compliance 10 | with the License. You may obtain a copy of the License at 11 | 12 | http://www.apache.org/licenses/LICENSE-2.0 13 | 14 | Unless required by applicable law or agreed to in writing, 15 | software distributed under the License is distributed on an 16 | "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | KIND, either express or implied. See the License for the 18 | specific language governing permissions and limitations 19 | under the License. 20 | 21 | -------------------------------------------------------------------------------- /jobx-agent/assembly.xml: -------------------------------------------------------------------------------- 1 | 2 | ${project.version} 3 | 4 | tar.gz 5 | 6 | 7 | 8 | true 9 | lib 10 | 11 | 12 | 13 | 14 | src/assembly/bin 15 | bin 16 | 0755 17 | 18 | 19 | src/assembly/lib 20 | lib 21 | 0644 22 | 23 | 24 | src/assembly/native 25 | native 26 | 0644 27 | 28 | 29 | src/assembly/conf 30 | conf 31 | 0644 32 | 33 | 34 | src/assembly/logs 35 | logs 36 | 0644 37 | 38 | 39 | src/assembly/temp 40 | temp 41 | 0755 42 | 43 | 44 | -------------------------------------------------------------------------------- /jobx-agent/src/assembly/bin/shutdown.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | @REM 3 | @REM Copyright (c) 2015 The JobX Project 4 | @REM 5 | @REM Licensed to the Apache Software Foundation (ASF) under one 6 | @REM or more contributor license agreements. See the NOTICE file 7 | @REM distributed with this work for additional information 8 | @REM regarding copyright ownership. The ASF licenses this file 9 | @REM to you under the Apache License, Version 2.0 (the 10 | @REM "License"); you may not use this file except in compliance 11 | @REM with the License. You may obtain a copy of the License at 12 | @REM 13 | @REM http://www.apache.org/licenses/LICENSE-2.0 14 | @REM 15 | @REM Unless required by applicable law or agreed to in writing, 16 | @REM software distributed under the License is distributed on an 17 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18 | @REM KIND, either express or implied. See the License for the 19 | @REM specific language governing permissions and limitations 20 | @REM under the License. 21 | @REM 22 | @REM --------------------------------------------------------------------------- 23 | @REM Stop script for the JOBX agent 24 | @REM --------------------------------------------------------------------------- 25 | 26 | setlocal 27 | 28 | @REM Guess JOBX_HOME if not defined 29 | set WORK_DIR=%~dp0 30 | cd "%WORK_DIR%.." 31 | set JOBX_HOME=%cd% 32 | set EXECUTABLE=%JOBX_HOME%\bin\jobx.bat 33 | 34 | if exist "%EXECUTABLE%" goto okExec 35 | echo Cannot find "%EXECUTABLE%" 36 | echo This file is needed to run this program 37 | goto exit 38 | 39 | :okExec 40 | call "%EXECUTABLE%" stop 41 | goto end 42 | 43 | :exit 44 | exit /b 1 45 | 46 | :end 47 | exit /b 0 48 | -------------------------------------------------------------------------------- /jobx-agent/src/assembly/bin/startup.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | @REM 3 | @REM Copyright (c) 2015 The JobX Project 4 | @REM 5 | @REM Licensed to the Apache Software Foundation (ASF) under one 6 | @REM or more contributor license agreements. See the NOTICE file 7 | @REM distributed with this work for additional information 8 | @REM regarding copyright ownership. The ASF licenses this file 9 | @REM to you under the Apache License, Version 2.0 (the 10 | @REM "License"); you may not use this file except in compliance 11 | @REM with the License. You may obtain a copy of the License at 12 | @REM 13 | @REM http://www.apache.org/licenses/LICENSE-2.0 14 | @REM 15 | @REM Unless required by applicable law or agreed to in writing, 16 | @REM software distributed under the License is distributed on an 17 | @REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 18 | @REM KIND, either express or implied. See the License for the 19 | @REM specific language governing permissions and limitations 20 | @REM under the License. 21 | @REM 22 | @REM --------------------------------------------------------------------------- 23 | @REM Start script for the JOBX agent 24 | @REM --------------------------------------------------------------------------- 25 | 26 | setlocal 27 | 28 | @REM Guess JOBX_HOME if not defined 29 | set WORK_DIR=%~dp0 30 | cd "%WORK_DIR%.." 31 | set JOBX_HOME=%cd% 32 | set EXECUTABLE=%JOBX_HOME%\bin\jobx.bat 33 | 34 | if exist "%EXECUTABLE%" goto okExec 35 | echo Cannot find "%EXECUTABLE%" 36 | echo This file is needed to run this program 37 | goto exit 38 | 39 | :okExec 40 | call "%EXECUTABLE%" start 41 | 42 | :end 43 | 44 | :exit 45 | exit 1 46 | 47 | :end 48 | exit 0 -------------------------------------------------------------------------------- /jobx-agent/src/assembly/conf/conf.properties: -------------------------------------------------------------------------------- 1 | #agent停止的socket请求端口(该端口不用特别配置,只是系统自己依赖的一个端口,不对server和其他地方暴露) 2 | jobx.shutdown=1529 3 | #agent监控服务端口(实时监控的端口,需要对外暴露.可以根据需求改这里的端口,这里如果改动了server端的配置里也得改成一致) 4 | jobx.monitorPort=17502 5 | 6 | #agent默认连接密码(启动agent时如果没输连接密码则取改密码为默认连接密码) 7 | jobx.password=jobx 8 | 9 | #jobx-agent默认启动端口 10 | jobx.port=1577 11 | 12 | # 13 | # agent Ip,确保server可以通过此ip访问到该agent(主要实现agent自动注册) 14 | # 程序中做了自动探测ip的功能,如存在以下两种情况请手动设置host, 15 | # 1)agent探测出来的ip在server端连接不上 16 | # 2)如果在多块网卡的情况下会选择一块,可能存在server连接不上 17 | #jobx.host=127.0.0.1 18 | 19 | #zookepper注册中心 20 | jobx.registry=zookeeper://127.0.0.1:2181 -------------------------------------------------------------------------------- /jobx-agent/src/assembly/conf/log4j.properties: -------------------------------------------------------------------------------- 1 | log4j.rootLogger=info,console,debug, error 2 | # Print only messages of level ERROR or above in the package noModule. 3 | log4j.logger.noModule=FATAL 4 | log4j.additivity.org.apache=true 5 | ############################################################ 6 | # CONSOLE # 7 | ############################################################ 8 | log4j.appender.console=org.apache.log4j.ConsoleAppender 9 | log4j.appender.console.Threshold=INFO 10 | log4j.appender.console.ImmediateFlush=true 11 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 12 | log4j.appender.console.layout.ConversionPattern=[%-5p] %d(%r) --> [%t] %l: %m %x %n 13 | ############################################################ 14 | # DEBUG # 15 | ############################################################ 16 | log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender 17 | log4j.appender.debug.File=${jobx.home}/logs/jobx.out 18 | log4j.appender.debug.Append=true 19 | log4j.appender.debug.Threshold=DEBUG 20 | log4j.appender.debug.layout=org.apache.log4j.PatternLayout 21 | log4j.appender.debug.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %t:%r ] - [ %p ] %m%n 22 | ############################################################ 23 | # ERROR # 24 | ############################################################ 25 | log4j.appender.error=org.apache.log4j.DailyRollingFileAppender 26 | log4j.appender.error.File=${jobx.home}/logs/error.out 27 | log4j.appender.error.layout=org.apache.log4j.PatternLayout 28 | log4j.appender.error.layout.ConversionPattern=[%d]-%-5p (%F:%L)|%m%n 29 | log4j.appender.error.DatePattern='-'yyyy-MM-dd'.log' 30 | log4j.appender.error.Threshold=ERROR 31 | -------------------------------------------------------------------------------- /jobx-agent/src/assembly/logs/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/logs/.keep -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-amd64-freebsd-6.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-amd64-freebsd-6.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-amd64-linux.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-amd64-linux.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-amd64-solaris.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-amd64-solaris.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-ia64-hpux-11.sl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-ia64-hpux-11.sl -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-ia64-linux.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-ia64-linux.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-pa-hpux-11.sl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-pa-hpux-11.sl -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-ppc-aix-5.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-ppc-aix-5.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-ppc-linux.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-ppc-linux.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-ppc64-aix-5.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-ppc64-aix-5.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-ppc64-linux.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-ppc64-linux.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-s390x-linux.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-s390x-linux.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-sparc-solaris.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-sparc-solaris.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-sparc64-solaris.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-sparc64-solaris.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-universal-macosx.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-universal-macosx.dylib -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-universal64-macosx.dylib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-universal64-macosx.dylib -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-x86-freebsd-5.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-x86-freebsd-5.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-x86-freebsd-6.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-x86-freebsd-6.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-x86-linux.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-x86-linux.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/libsigar-x86-solaris.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/libsigar-x86-solaris.so -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/sigar-amd64-winnt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/sigar-amd64-winnt.dll -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/sigar-x86-winnt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/sigar-x86-winnt.dll -------------------------------------------------------------------------------- /jobx-agent/src/assembly/native/sigar-x86-winnt.lib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/native/sigar-x86-winnt.lib -------------------------------------------------------------------------------- /jobx-agent/src/assembly/temp/.keep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-agent/src/assembly/temp/.keep -------------------------------------------------------------------------------- /jobx-agent/src/main/java/com/jobxhub/agent/process/ProcessException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.agent.process; 23 | 24 | public class ProcessException extends RuntimeException { 25 | 26 | private static final long serialVersionUID = 1; 27 | 28 | private final int exitCode; 29 | private final String logSnippet; 30 | 31 | public ProcessException(final int exitCode, final String logSnippet) { 32 | this.exitCode = exitCode; 33 | this.logSnippet = logSnippet; 34 | } 35 | 36 | public int getExitCode() { 37 | return this.exitCode; 38 | } 39 | 40 | public String getLogSnippet() { 41 | return this.logSnippet; 42 | } 43 | 44 | } 45 | -------------------------------------------------------------------------------- /jobx-agent/src/main/resources/META-INF/jobx/com.jobxhub.rpc.ServerHandler: -------------------------------------------------------------------------------- 1 | com.jobxhub.agent.service.AgentService -------------------------------------------------------------------------------- /jobx-agent/src/test/java/com/jobxhub/agent/test/TestDemo.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.agent.test; 2 | 3 | import com.jobxhub.common.Constants; 4 | import com.jobxhub.common.util.IOUtils; 5 | import com.jobxhub.common.util.collection.HashMap; 6 | import org.junit.Test; 7 | 8 | import java.util.Map; 9 | 10 | public class TestDemo { 11 | 12 | @Test 13 | public void test1() { 14 | System.out.println("ffff>"+IOUtils.FIELD_TERMINATED_BY+"fff"); 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /jobx-api/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jobx 7 | com.jobxhub 8 | 1.2.0-RELEASE 9 | 10 | 4.0.0 11 | jobx-api 12 | 13 | 14 | 15 | org.apache.maven.plugins 16 | maven-compiler-plugin 17 | 18 | 7 19 | 7 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/api/AgentJob.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.api; 2 | 3 | import com.jobxhub.common.job.Request; 4 | import com.jobxhub.common.job.Response; 5 | 6 | public interface AgentJob { 7 | 8 | Response ping(Request request); 9 | 10 | Response path(Request request); 11 | 12 | Response listPath(Request request); 13 | 14 | Response monitor(Request request); 15 | 16 | Response execute(Request request); 17 | 18 | Response password(Request request); 19 | 20 | Response kill(Request request); 21 | 22 | Response proxy(Request request); 23 | 24 | Response macId(Request request); 25 | 26 | void restart(Request request); 27 | 28 | } 29 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/exception/InvalidException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.exception; 23 | 24 | /** 25 | * 参数异常 26 | * 27 | * @author wanghuajie 28 | */ 29 | public class InvalidException extends BasicException { 30 | 31 | private static final long serialVersionUID = 2513495667924595876L; 32 | 33 | public InvalidException() { 34 | super(); 35 | } 36 | 37 | public InvalidException(String msg) { 38 | super(msg); 39 | } 40 | 41 | public InvalidException(Throwable nestedThrowable) { 42 | super(nestedThrowable); 43 | } 44 | 45 | public InvalidException(String msg, Throwable nestedThrowable) { 46 | super(msg, nestedThrowable); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/exception/ParameterException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.exception; 23 | 24 | /** 25 | * 参数异常 26 | * 27 | * @author wanghuajie 28 | */ 29 | public class ParameterException extends BasicException { 30 | 31 | private static final long serialVersionUID = 2513495667924595876L; 32 | 33 | public ParameterException() { 34 | super(); 35 | } 36 | 37 | public ParameterException(String msg) { 38 | super(msg); 39 | } 40 | 41 | public ParameterException(Throwable nestedThrowable) { 42 | super(nestedThrowable); 43 | } 44 | 45 | public ParameterException(String msg, Throwable nestedThrowable) { 46 | super(msg, nestedThrowable); 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/exception/TimeoutException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.exception; 23 | 24 | import java.io.PrintStream; 25 | import java.io.PrintWriter; 26 | 27 | public class TimeoutException extends BasicException { 28 | public TimeoutException() { 29 | super(); 30 | } 31 | 32 | public TimeoutException(String msg) { 33 | super(msg); 34 | } 35 | 36 | public TimeoutException(Throwable nestedThrowable) { 37 | super(nestedThrowable); 38 | } 39 | 40 | public TimeoutException(String msg, Throwable nestedThrowable) { 41 | super(msg, nestedThrowable); 42 | } 43 | 44 | @Override 45 | public void printStackTrace() { 46 | super.printStackTrace(); 47 | } 48 | 49 | @Override 50 | public void printStackTrace(PrintStream ps) { 51 | super.printStackTrace(ps); 52 | } 53 | 54 | @Override 55 | public void printStackTrace(PrintWriter pw) { 56 | super.printStackTrace(pw); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/exception/UnknownException.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.common.exception; 22 | 23 | /** 24 | * 未知异常 25 | * 26 | * @author wanghuajie 2012.8.23 27 | */ 28 | public class UnknownException extends BasicException { 29 | 30 | private static final long serialVersionUID = 9108301934211924250L; 31 | 32 | public UnknownException() { 33 | super(); 34 | } 35 | 36 | public UnknownException(String msg) { 37 | super(msg); 38 | } 39 | 40 | public UnknownException(Throwable nestedThrowable) { 41 | super(nestedThrowable); 42 | } 43 | 44 | public UnknownException(String msg, Throwable nestedThrowable) { 45 | super(msg, nestedThrowable); 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/ext/ClassMark.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.ext; 23 | 24 | import java.lang.annotation.*; 25 | 26 | @Documented 27 | @Retention(RetentionPolicy.RUNTIME) 28 | @Target({ElementType.TYPE}) 29 | public @interface ClassMark { 30 | String value() default ""; 31 | } 32 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/ext/MethodMark.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.ext; 23 | 24 | import java.lang.annotation.*; 25 | 26 | @Documented 27 | @Retention(RetentionPolicy.RUNTIME) 28 | @Target({ElementType.METHOD}) 29 | public @interface MethodMark { 30 | String value() default ""; 31 | } 32 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/ext/SPI.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.common.ext; 22 | 23 | import java.lang.annotation.*; 24 | 25 | 26 | /** 27 | * 十步杀一人 千里不留行 28 | *

29 | * 事了拂衣去 深藏身与名 30 | *

31 | * 扩展点以Key=扩展点实例的全类名的方式在META-INF.jobx里定义 32 | * 默认的扩展点以"扩展点实例的全类名"呈现,不用Key 33 | */ 34 | @Documented 35 | @Retention(RetentionPolicy.RUNTIME) 36 | @Target({ElementType.TYPE}) 37 | public @interface SPI { 38 | 39 | /** 40 | * 缺省扩展点名。 41 | */ 42 | String value() default ""; 43 | 44 | } -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/graph/Graph.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.graph; 2 | /** 3 | * @Package org.opencron.common.graph 4 | * @Title: Graph 5 | * @author hitechr 6 | * @date 2018/4/11 13:03 7 | * @version V1.0 8 | */ 9 | 10 | import java.util.HashMap; 11 | import java.util.HashSet; 12 | import java.util.Map; 13 | import java.util.Set; 14 | 15 | /** 16 | * @Descriptions: 17 | */ 18 | public class Graph { 19 | 20 | /** 21 | * 图中节点的集合 22 | */ 23 | public Set vertexSet= new HashSet<>(); 24 | 25 | /** 26 | * 相邻的节点,纪录边 27 | */ 28 | public Map> edgeNode = new HashMap<>(); 29 | 30 | /** 31 | * 将节点添加到图中 32 | * @param source 33 | * @param target 34 | * @return 35 | */ 36 | public Graph addNode(Node source,Node target){ 37 | if(source==null 38 | || target==null){ 39 | return this; 40 | } 41 | 42 | if(target.getLevel()<=source.getLevel()){ 43 | target.setLevel(source.getLevel()+1); 44 | } 45 | 46 | if(!vertexSet.contains(source)){ 47 | vertexSet.add(source); 48 | } 49 | 50 | if(!vertexSet.contains(target)){ 51 | vertexSet.add(target); 52 | } 53 | if(edgeNode.containsKey(source) 54 | && edgeNode.get(source).contains(target)){ 55 | return this; 56 | } 57 | if(edgeNode.containsKey(source)){ 58 | edgeNode.get(source).add(target); 59 | }else { 60 | Set targetSet = new HashSet<>(); 61 | targetSet.add(target); 62 | edgeNode.put(source,targetSet); 63 | } 64 | target.pathIn(); 65 | return this; 66 | } 67 | 68 | 69 | public Set getVertexSet() { 70 | return vertexSet; 71 | } 72 | 73 | public Map> getEdgeNode() { 74 | return edgeNode; 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/graph/Node.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.graph; 2 | /** 3 | * @Package org.opencron.common.graph 4 | * @Title: Node 5 | * @author hitechr 6 | * @date 2018/4/11 13:06 7 | * @version V1.0 8 | */ 9 | 10 | /** 11 | * @Descriptions: 顶点数据元素 12 | */ 13 | public class Node { 14 | private T val; 15 | private int pathIn = 0; // 入链路数量 16 | private int level;//节点的层次 17 | public Node(T val) { 18 | this.val = val; 19 | } 20 | 21 | public int getLevel() { 22 | return level; 23 | } 24 | 25 | public void setLevel(int level) { 26 | this.level = level; 27 | } 28 | 29 | public int getPathIn() { 30 | return pathIn; 31 | } 32 | 33 | public void setPathIn(int pathIn) { 34 | this.pathIn = pathIn; 35 | } 36 | 37 | public void pathIn(){ 38 | this.setPathIn(this.getPathIn()+1); 39 | } 40 | public void levelIn(){ 41 | this.setLevel(this.getLevel()+1); 42 | } 43 | 44 | 45 | public T getVal() { 46 | return val; 47 | } 48 | 49 | public void setVal(T val) { 50 | this.val = val; 51 | } 52 | 53 | 54 | @Override 55 | public boolean equals(Object o) { 56 | if (this == o) return true; 57 | if (o == null || getClass() != o.getClass()) return false; 58 | 59 | Node node = (Node) o; 60 | 61 | return val.equals(node.val); 62 | } 63 | 64 | @Override 65 | public int hashCode() { 66 | return val.hashCode(); 67 | } 68 | 69 | @Override 70 | public String toString() { 71 | return "Node{" + 72 | "val=" + val + 73 | ", pathIn=" + pathIn + 74 | ", level=" + level + 75 | '}'; 76 | } 77 | } 78 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/job/Action.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | 23 | package com.jobxhub.common.job; 24 | 25 | public enum Action { 26 | PING(0), 27 | PATH(1), 28 | LISTPATH(2), 29 | MONITOR(3), 30 | EXECUTE(4), 31 | PASSWORD(5), 32 | KILL(6), 33 | PROXY(7), 34 | MACID(8), 35 | RESTART(9), 36 | UPLOAD(10); 37 | 38 | private final int value; 39 | 40 | Action(int value) { 41 | this.value = value; 42 | } 43 | 44 | /** 45 | * Get the integer value of this enum value, as defined in the Thrift IDL. 46 | */ 47 | public int getValue() { 48 | return value; 49 | } 50 | 51 | 52 | public static Action findByName(String name) { 53 | for (Action action : Action.values()) { 54 | if (action.name().equalsIgnoreCase(name)) { 55 | return action; 56 | } 57 | } 58 | return null; 59 | } 60 | 61 | } -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/job/AgentJob.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.job; 2 | 3 | 4 | public interface AgentJob { 5 | 6 | Response ping(Request request); 7 | 8 | Response path(Request request); 9 | 10 | Response monitor(Request request); 11 | 12 | Response execute(Request request); 13 | 14 | Response password(Request request); 15 | 16 | Response kill(Request request); 17 | 18 | Response proxy(Request request); 19 | 20 | Response guid(Request request); 21 | 22 | void restart(Request request); 23 | 24 | /** 25 | * agent 自动注册... 26 | * 27 | * @return 28 | */ 29 | boolean register(); 30 | } 31 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/job/RecvieMessage.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.job; 2 | 3 | import java.io.Serializable; 4 | 5 | public class RecvieMessage implements Serializable { 6 | 7 | /** 8 | * 9 | */ 10 | private static final long serialVersionUID = 6200390330718630934L; 11 | 12 | private short msgType; 13 | 14 | private String data; 15 | 16 | public short getMsgType() { 17 | return msgType; 18 | } 19 | 20 | public void setMsgType(short msgType) { 21 | this.msgType = msgType; 22 | } 23 | 24 | public String getData() { 25 | return data; 26 | } 27 | 28 | public void setData(String data) { 29 | this.data = data; 30 | } 31 | 32 | 33 | } 34 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/job/RpcType.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.job; 2 | 3 | /** 4 | * ${DESCRIPTION} 5 | * 6 | * @author Ricky Fung 7 | */ 8 | public enum RpcType { 9 | 10 | SYNC("同步RPC调用"), ASYNC("异步RPC调用"), ONE_WAY("单向调用"); 11 | 12 | private String desc; 13 | 14 | RpcType(String desc) { 15 | this.desc = desc; 16 | } 17 | 18 | public String getDesc() { 19 | return desc; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/job/SecureModel.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.job; 2 | 3 | import java.io.Serializable; 4 | 5 | public class SecureModel implements Serializable{ 6 | 7 | /** 8 | * 9 | */ 10 | private static final long serialVersionUID = -2108336644101910071L; 11 | /** 12 | * 验证 token 13 | */ 14 | private String token ; 15 | 16 | private boolean autoSuccess; 17 | 18 | public String getToken() { 19 | return token; 20 | } 21 | public void setToken(String token) { 22 | this.token = token; 23 | } 24 | public boolean isAutoSuccess() { 25 | return autoSuccess; 26 | } 27 | public void setAutoSuccess(boolean autoSuccess) { 28 | this.autoSuccess = autoSuccess; 29 | } 30 | 31 | 32 | } 33 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/Cleanable.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | 23 | package com.jobxhub.common.serialize; 24 | 25 | public interface Cleanable { 26 | 27 | void cleanup(); 28 | } 29 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/ObjectInput.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | 23 | package com.jobxhub.common.serialize; 24 | 25 | import java.io.IOException; 26 | import java.lang.reflect.Type; 27 | 28 | /** 29 | * Object input. 30 | */ 31 | public interface ObjectInput extends DataInput { 32 | 33 | /** 34 | * read object. 35 | * 36 | * @return object. 37 | */ 38 | Object readObject() throws IOException, ClassNotFoundException; 39 | 40 | /** 41 | * read object. 42 | * 43 | * @param cls object type. 44 | * @return object. 45 | */ 46 | T readObject(Class cls) throws IOException, ClassNotFoundException; 47 | 48 | /** 49 | * read object. 50 | * 51 | * @param cls object type. 52 | * @return object. 53 | */ 54 | T readObject(Class cls, Type type) throws IOException, ClassNotFoundException; 55 | 56 | } -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/ObjectOutput.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | 23 | package com.jobxhub.common.serialize; 24 | 25 | import java.io.IOException; 26 | 27 | /** 28 | * Object output. 29 | */ 30 | public interface ObjectOutput extends DataOutput { 31 | 32 | /** 33 | * write object. 34 | * 35 | * @param obj object. 36 | */ 37 | void writeObject(Object obj) throws IOException; 38 | 39 | } -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/Serializer.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.serialize; 23 | 24 | import com.jobxhub.common.ext.SPI; 25 | 26 | import java.io.IOException; 27 | /** 28 | * Serialization. (SPI, Singleton, ThreadSafe) 29 | */ 30 | @SPI 31 | public interface Serializer { 32 | 33 | /** 34 | * get content type id 35 | * 36 | * @return content type id 37 | */ 38 | byte getContentTypeId(); 39 | 40 | /** 41 | * get content type 42 | * 43 | * @return content type 44 | */ 45 | String getContentType(); 46 | 47 | /** 48 | * create serializer 49 | * 50 | * @return serializer 51 | * @throws IOException 52 | */ 53 | byte[] serialize(Object object) throws IOException; 54 | 55 | /** 56 | * create deserializer 57 | * 58 | * @param bytes 59 | * @return deserializer 60 | * @throws IOException 61 | */ 62 | T deserialize(byte[] bytes,Class clazz) throws IOException; 63 | 64 | } -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/hessian2/Hessian2SerializerFactory.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.common.serialize.hessian2; 22 | 23 | import com.caucho.hessian.io.SerializerFactory; 24 | 25 | public class Hessian2SerializerFactory extends SerializerFactory { 26 | 27 | public static final SerializerFactory SERIALIZER_FACTORY = new Hessian2SerializerFactory(); 28 | 29 | private Hessian2SerializerFactory() { 30 | } 31 | 32 | @Override 33 | public ClassLoader getClassLoader() { 34 | return Thread.currentThread().getContextClassLoader(); 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/java/CompactedObjectOutputStream.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.common.serialize.java; 22 | 23 | import java.io.IOException; 24 | import java.io.ObjectOutputStream; 25 | import java.io.ObjectStreamClass; 26 | import java.io.OutputStream; 27 | 28 | /** 29 | * Compacted java object output stream. 30 | */ 31 | public class CompactedObjectOutputStream extends ObjectOutputStream { 32 | public CompactedObjectOutputStream(OutputStream out) throws IOException { 33 | super(out); 34 | } 35 | 36 | @Override 37 | protected void writeClassDescriptor(ObjectStreamClass desc) throws IOException { 38 | Class clazz = desc.forClass(); 39 | if (clazz.isPrimitive() || clazz.isArray()) { 40 | write(0); 41 | super.writeClassDescriptor(desc); 42 | } else { 43 | write(1); 44 | writeUTF(desc.getName()); 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/kryo/utils/KryoUtils.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | 23 | package com.jobxhub.common.serialize.kryo.utils; 24 | 25 | import com.esotericsoftware.kryo.Kryo; 26 | 27 | /** 28 | * The kryo utils used by dubbo 29 | * 30 | * @since 2.6.0 31 | */ 32 | public class KryoUtils { 33 | private static AbstractKryoFactory kryoFactory = new ThreadLocalKryoFactory(); 34 | 35 | public static Kryo get() { 36 | return kryoFactory.getKryo(); 37 | } 38 | 39 | public static void release(Kryo kryo) { 40 | kryoFactory.returnKryo(kryo); 41 | } 42 | 43 | public static void register(Class clazz) { 44 | kryoFactory.registerClass(clazz); 45 | } 46 | 47 | public static void setRegistrationRequired(boolean registrationRequired) { 48 | kryoFactory.setRegistrationRequired(registrationRequired); 49 | } 50 | } 51 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/kryo/utils/PooledKryoFactory.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.serialize.kryo.utils; 23 | 24 | import com.esotericsoftware.kryo.Kryo; 25 | import com.esotericsoftware.kryo.pool.KryoPool; 26 | 27 | public class PooledKryoFactory extends AbstractKryoFactory { 28 | 29 | private KryoPool pool; 30 | 31 | public PooledKryoFactory() { 32 | // Build pool with SoftReferences enabled (optional) 33 | pool = new KryoPool.Builder(this).softReferences().build(); 34 | } 35 | 36 | @Override 37 | public Kryo getKryo() { 38 | return pool.borrow(); 39 | } 40 | 41 | @Override 42 | public void returnKryo(Kryo kryo) { 43 | pool.release(kryo); 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/kryo/utils/PrototypeKryoFactory.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.serialize.kryo.utils; 23 | 24 | import com.esotericsoftware.kryo.Kryo; 25 | 26 | public class PrototypeKryoFactory extends AbstractKryoFactory { 27 | 28 | @Override 29 | public void returnKryo(Kryo kryo) { 30 | // do nothing 31 | } 32 | 33 | public Kryo getKryo() { 34 | return create(); 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/kryo/utils/ThreadLocalKryoFactory.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.common.serialize.kryo.utils; 22 | 23 | import com.esotericsoftware.kryo.Kryo; 24 | 25 | public class ThreadLocalKryoFactory extends AbstractKryoFactory { 26 | 27 | private final ThreadLocal holder = new ThreadLocal() { 28 | @Override 29 | protected Kryo initialValue() { 30 | return create(); 31 | } 32 | }; 33 | 34 | @Override 35 | public void returnKryo(Kryo kryo) { 36 | // do nothing 37 | } 38 | 39 | public Kryo getKryo() { 40 | return holder.get(); 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/support/AbstractSerializer.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.serialize.support; 2 | 3 | import com.jobxhub.common.serialize.ObjectInput; 4 | import com.jobxhub.common.serialize.ObjectOutput; 5 | import java.io.ByteArrayOutputStream; 6 | import java.io.IOException; 7 | 8 | public class AbstractSerializer { 9 | 10 | public byte[] serialize(ByteArrayOutputStream outputStream,ObjectOutput objectOutput,Object object) throws IOException { 11 | objectOutput.writeObject(object); 12 | objectOutput.flushBuffer(); 13 | byte[] data = outputStream.toByteArray(); 14 | outputStream.flush(); 15 | outputStream.close(); 16 | return data; 17 | } 18 | 19 | public T deserialize(ObjectInput objectInput, Class clazz) { 20 | try { 21 | return objectInput.readObject(clazz); 22 | } catch (Exception e) { 23 | e.printStackTrace(); 24 | } 25 | return null; 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/serialize/support/SerializableClassRegistry.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | 23 | package com.jobxhub.common.serialize.support; 24 | 25 | import java.util.LinkedHashSet; 26 | import java.util.Set; 27 | 28 | public abstract class SerializableClassRegistry { 29 | 30 | private static final Set registrations = new LinkedHashSet(); 31 | 32 | /** 33 | * only supposed to be called at startup time 34 | */ 35 | public static void registerClass(Class clazz) { 36 | registrations.add(clazz); 37 | } 38 | 39 | public static Set getRegisteredClasses() { 40 | return registrations; 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/util/EnumUtil.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.util; 2 | /** 3 | * @Package com.jobxhub.common.util 4 | * @Title: EnumUtil 5 | * @author hitechr 6 | * @date 2018/6/12 16:43 7 | * @version V1.0 8 | */ 9 | 10 | import com.jobxhub.common.job.Alarm; 11 | 12 | /** 13 | * @Descriptions: 枚举工具类 14 | */ 15 | public class EnumUtil { 16 | 17 | public interface CommonEnum{ 18 | int getCode(); 19 | } 20 | 21 | /** 22 | * 根据code码获取 23 | * @param clazz 24 | * @param code 25 | * @param 26 | * @return 27 | */ 28 | public static T getEnumBycode(Class clazz, int code){ 29 | for(T enu:clazz.getEnumConstants()){ 30 | if(code==enu.getCode()){ 31 | return enu; 32 | } 33 | } 34 | return null; 35 | } 36 | 37 | 38 | public static void main(String[] args) { 39 | Alarm.AlarmType enumBycode = EnumUtil.getEnumBycode(Alarm.AlarmType.class, 8); 40 | System.out.println(enumBycode); 41 | } 42 | 43 | } 44 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/util/Holder.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.util; 23 | 24 | public class Holder { 25 | 26 | private volatile T value; 27 | 28 | public void set(T value) { 29 | this.value = value; 30 | } 31 | 32 | public T get() { 33 | return value; 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/util/IdGenerator.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.common.util; 23 | 24 | import java.io.IOException; 25 | import java.util.concurrent.atomic.AtomicInteger; 26 | import java.util.concurrent.atomic.AtomicLong; 27 | 28 | public class IdGenerator { 29 | private static final AtomicLong generator = new AtomicLong(0); 30 | 31 | public static Long getId() { 32 | return generator.incrementAndGet(); 33 | } 34 | 35 | public static void main(String[] args) throws IOException { 36 | System.out.println(getId()); 37 | System.in.read(); 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/util/NamedThreadFactory.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.common.util; 2 | 3 | 4 | import java.util.concurrent.ThreadFactory; 5 | import java.util.concurrent.atomic.AtomicInteger; 6 | 7 | public class NamedThreadFactory implements ThreadFactory { 8 | private static final AtomicInteger POOL_SEQ = new AtomicInteger(1); 9 | 10 | private final AtomicInteger mThreadNum = new AtomicInteger(1); 11 | 12 | private final String mPrefix; 13 | 14 | private final boolean mDaemo; 15 | 16 | private final ThreadGroup mGroup; 17 | 18 | public NamedThreadFactory() { 19 | this("pool-" + POOL_SEQ.getAndIncrement(), false); 20 | } 21 | 22 | public NamedThreadFactory(String prefix) { 23 | this(prefix, false); 24 | } 25 | 26 | public NamedThreadFactory(String prefix, boolean daemo) { 27 | mPrefix = prefix + "-thread-"; 28 | mDaemo = daemo; 29 | SecurityManager s = System.getSecurityManager(); 30 | mGroup = (s == null) ? Thread.currentThread().getThreadGroup() : s.getThreadGroup(); 31 | } 32 | 33 | public Thread newThread(Runnable runnable) { 34 | String name = mPrefix + mThreadNum.getAndIncrement(); 35 | Thread ret = new Thread(mGroup, runnable, name, 0); 36 | ret.setDaemon(mDaemo); 37 | return ret; 38 | } 39 | 40 | public ThreadGroup getThreadGroup() { 41 | return mGroup; 42 | } 43 | } -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/util/internal/UnsafeIntegerFieldUpdater.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015 The JobX Project 3 | * 4 | * Licensed under the Apache License, version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at: 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.jobxhub.common.util.internal; 18 | 19 | import sun.misc.Unsafe; 20 | 21 | import java.lang.reflect.Field; 22 | 23 | public class UnsafeIntegerFieldUpdater { 24 | private final long offset; 25 | private final Unsafe unsafe; 26 | 27 | UnsafeIntegerFieldUpdater(Unsafe unsafe, Class tClass, String fieldName) throws NoSuchFieldException { 28 | Field field = tClass.getDeclaredField(fieldName); 29 | if (unsafe == null) { 30 | throw new NullPointerException("unsafe"); 31 | } 32 | this.unsafe = unsafe; 33 | offset = unsafe.objectFieldOffset(field); 34 | } 35 | 36 | public void set(U obj, int newValue) { 37 | unsafe.putInt(obj, offset, newValue); 38 | } 39 | 40 | public int get(U obj) { 41 | return unsafe.getInt(obj, offset); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /jobx-common/src/main/java/com/jobxhub/common/util/internal/UnsafeLongFieldUpdater.java: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (c) 2015 The JobX Project 3 | * 4 | * Licensed under the Apache License, version 2.0 (the "License"); 5 | * you may not use this file except in compliance with the License. 6 | * You may obtain a copy of the License at: 7 | * 8 | * http://www.apache.org/licenses/LICENSE-2.0 9 | * 10 | * Unless required by applicable law or agreed to in writing, software 11 | * distributed under the License is distributed on an "AS IS" BASIS, 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | * See the License for the specific language governing permissions and 14 | * limitations under the License. 15 | */ 16 | 17 | package com.jobxhub.common.util.internal; 18 | 19 | import sun.misc.Unsafe; 20 | 21 | import java.lang.reflect.Field; 22 | 23 | public class UnsafeLongFieldUpdater { 24 | private final long offset; 25 | private final Unsafe unsafe; 26 | 27 | UnsafeLongFieldUpdater(Unsafe unsafe, Class tClass, String fieldName) throws NoSuchFieldException { 28 | Field field = tClass.getDeclaredField(fieldName); 29 | if (unsafe == null) { 30 | throw new NullPointerException("unsafe"); 31 | } 32 | this.unsafe = unsafe; 33 | offset = unsafe.objectFieldOffset(field); 34 | } 35 | 36 | public void set(U obj, long newValue) { 37 | unsafe.putLong(obj, offset, newValue); 38 | } 39 | 40 | public long get(U obj) { 41 | return unsafe.getLong(obj, offset); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /jobx-common/src/main/resources/META-INF/jobx/com.jobxhub.common.serialize.Serializer: -------------------------------------------------------------------------------- 1 | fastjson=com.jobxhub.common.serialize.fastjson.FastJsonSerializer 2 | fst=com.jobxhub.common.serialize.fst.FstSerializer 3 | hessian2=com.jobxhub.common.serialize.hessian2.Hessian2Serializer 4 | kryo=com.jobxhub.common.serialize.kryo.KryoSerializer 5 | java=com.jobxhub.common.serialize.java.JavaSerializer 6 | nativejava=com.jobxhub.common.serialize.nativejava.NativeJavaSerializer 7 | 8 | #default Serializer 9 | com.jobxhub.common.serialize.kryo.KryoSerializer -------------------------------------------------------------------------------- /jobx-common/src/test/java/SPITest.java: -------------------------------------------------------------------------------- 1 | import com.jobxhub.common.util.collection.HashMap; 2 | import org.junit.Test; 3 | 4 | import java.util.Map; 5 | 6 | 7 | public class SPITest { 8 | 9 | @Test 10 | public void testInstance() { 11 | 12 | String execUser = "hadoop , hdfs , hfdsaf,88"; 13 | System.out.println(execUser.replaceAll("\\s+,\\s+",",")); 14 | 15 | } 16 | 17 | } 18 | -------------------------------------------------------------------------------- /jobx-common/src/test/java/SyncTest.java: -------------------------------------------------------------------------------- 1 | 2 | import org.apache.commons.exec.*; 3 | 4 | import java.util.Timer; 5 | import java.util.TimerTask; 6 | 7 | 8 | /** 9 | * Created by benjobs on 2016/9/10. 10 | */ 11 | public class SyncTest { 12 | 13 | 14 | public static void main(String[] args) throws Exception { 15 | 16 | final CommandLine cmdLine = CommandLine.parse("C:\\Developer\\workspace\\bat\\hello.bat"); 17 | final ExecuteWatchdog watchdog = new ExecuteWatchdog(Integer.MAX_VALUE); 18 | 19 | final Timer timer = new Timer(); 20 | 21 | final DefaultExecuteResultHandler resultHandler = new DefaultExecuteResultHandler() { 22 | @Override 23 | public void onProcessComplete(int exitValue) { 24 | super.onProcessComplete(exitValue); 25 | watchdog.stop(); 26 | timer.cancel(); 27 | } 28 | 29 | @Override 30 | public void onProcessFailed(ExecuteException e) { 31 | super.onProcessFailed(e); 32 | watchdog.stop(); 33 | timer.cancel(); 34 | } 35 | }; 36 | 37 | DefaultExecutor executor = new DefaultExecutor(); 38 | 39 | executor.setWatchdog(watchdog); 40 | 41 | timer.schedule(new TimerTask() { 42 | @Override 43 | public void run() { 44 | //超时,kill... 45 | if (watchdog.isWatching()) { 46 | watchdog.stop(); 47 | System.out.println(watchdog.isWatching()); 48 | timer.cancel(); 49 | System.out.println("kill...."); 50 | } 51 | } 52 | }, 5 * 1000); 53 | 54 | executor.execute(cmdLine, resultHandler); 55 | System.out.println("dog is running?" + watchdog.isWatching()); 56 | 57 | } 58 | 59 | 60 | } 61 | -------------------------------------------------------------------------------- /jobx-examples/example-hadoop/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-hadoop 10 | jar 11 | example-hadoop 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /jobx-examples/example-java/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-java 10 | jar 11 | example-java 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jobx-examples/example-mybatis/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-mybatis 10 | jar 11 | example-mybatis 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jobx-examples/example-mysql/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-mysql 10 | jar 11 | example-mysql 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jobx-examples/example-oracle/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-oracle 10 | jar 11 | example-oracle 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jobx-examples/example-php/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-php 10 | jar 11 | example-php 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jobx-examples/example-shell/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-shell 10 | jar 11 | example-shell 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jobx-examples/example-spark/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-spark 10 | jar 11 | example-spark 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jobx-examples/example-spring/pom.xml: -------------------------------------------------------------------------------- 1 | 3 | 4 | jobx 5 | com.jobxhub 6 | 1.2.0-RELEASE 7 | 8 | 4.0.0 9 | example-spring 10 | jar 11 | example-spring 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /jobx-registry/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jobx 7 | com.jobxhub 8 | 1.2.0-RELEASE 9 | 10 | 4.0.0 11 | jobx-registry 12 | 13 | 14 | 15 | org.apache.maven.plugins 16 | maven-compiler-plugin 17 | 18 | 7 19 | 7 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | com.jobxhub 29 | jobx-common 30 | 31 | 32 | 33 | 34 | org.apache.zookeeper 35 | zookeeper 36 | 37 | 38 | 39 | com.101tec 40 | zkclient 41 | 42 | 43 | 44 | org.apache.curator 45 | curator-framework 46 | 47 | 48 | 49 | 50 | -------------------------------------------------------------------------------- /jobx-registry/src/main/java/com/jobxhub/registry/api/NotifyListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.registry.api; 22 | 23 | 24 | import com.jobxhub.registry.URL; 25 | 26 | import java.util.List; 27 | 28 | /** 29 | * @author benjobs 30 | */ 31 | public interface NotifyListener { 32 | 33 | /** 34 | * 当收到服务变更通知时触发。 35 | */ 36 | void notify(List urls); 37 | 38 | } -------------------------------------------------------------------------------- /jobx-registry/src/main/java/com/jobxhub/registry/api/Registry.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.registry.api; 22 | 23 | /** 24 | * @author benjobs 25 | */ 26 | 27 | import com.jobxhub.registry.zookeeper.ZookeeperClient; 28 | 29 | /** 30 | * @author benjobs 31 | */ 32 | public interface Registry { 33 | 34 | boolean isAvailable(); 35 | 36 | void recover() throws Exception; 37 | 38 | void destroy(); 39 | /** 40 | * 注册数据 41 | */ 42 | void register(String path, boolean ephemeral); 43 | 44 | /** 45 | * 取消注册. 46 | */ 47 | void unRegister(String path); 48 | 49 | ZookeeperClient getClient(); 50 | } -------------------------------------------------------------------------------- /jobx-registry/src/main/java/com/jobxhub/registry/zookeeper/ChildListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.registry.zookeeper; 23 | 24 | import java.util.List; 25 | 26 | public interface ChildListener { 27 | 28 | void childChanged(String path, List children); 29 | 30 | } 31 | -------------------------------------------------------------------------------- /jobx-registry/src/main/java/com/jobxhub/registry/zookeeper/StateListener.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.registry.zookeeper; 23 | 24 | public interface StateListener { 25 | 26 | int DISCONNECTED = 0; 27 | 28 | int CONNECTED = 1; 29 | 30 | int RECONNECTED = 2; 31 | 32 | void stateChanged(int connected); 33 | 34 | } 35 | -------------------------------------------------------------------------------- /jobx-registry/src/main/java/com/jobxhub/registry/zookeeper/ZookeeperClient.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.registry.zookeeper; 23 | 24 | 25 | import com.jobxhub.common.ext.SPI; 26 | 27 | import java.util.List; 28 | 29 | @SPI 30 | public interface ZookeeperClient { 31 | 32 | void create(String path, boolean ephemeral); 33 | 34 | void delete(String path); 35 | 36 | List getChildren(String path); 37 | 38 | List addChildListener(String path, ChildListener listener); 39 | 40 | void removeChildListener(String path, ChildListener listener); 41 | 42 | void addStateListener(StateListener listener); 43 | 44 | void removeStateListener(StateListener listener); 45 | 46 | boolean isConnected(); 47 | 48 | void close(); 49 | 50 | } 51 | -------------------------------------------------------------------------------- /jobx-registry/src/main/java/com/jobxhub/registry/zookeeper/ZookeeperTransporter.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.registry.zookeeper; 23 | 24 | 25 | import com.jobxhub.common.ext.SPI; 26 | import com.jobxhub.registry.URL; 27 | 28 | @SPI 29 | public interface ZookeeperTransporter { 30 | 31 | ZookeeperClient connect(URL url); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /jobx-registry/src/main/java/com/jobxhub/registry/zookeeper/curator/CuratorZookeeperTransporter.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.registry.zookeeper.curator; 22 | 23 | import com.jobxhub.registry.URL; 24 | import com.jobxhub.registry.zookeeper.ZookeeperClient; 25 | import com.jobxhub.registry.zookeeper.ZookeeperTransporter; 26 | 27 | public class CuratorZookeeperTransporter implements ZookeeperTransporter { 28 | 29 | public ZookeeperClient connect(URL url) { 30 | return new CuratorZookeeperClient(url); 31 | } 32 | 33 | } 34 | -------------------------------------------------------------------------------- /jobx-registry/src/main/java/com/jobxhub/registry/zookeeper/zkclient/ZkclientZookeeperTransporter.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.registry.zookeeper.zkclient; 22 | 23 | 24 | import com.jobxhub.registry.URL; 25 | import com.jobxhub.registry.zookeeper.ZookeeperClient; 26 | import com.jobxhub.registry.zookeeper.ZookeeperTransporter; 27 | 28 | public class ZkclientZookeeperTransporter implements ZookeeperTransporter { 29 | 30 | public ZookeeperClient connect(URL url) { 31 | return new ZkclientZookeeperClient(url); 32 | } 33 | 34 | } 35 | -------------------------------------------------------------------------------- /jobx-registry/src/main/resources/META-INF/jobx/com.jobxhub.registry.zookeeper.ZookeeperClient: -------------------------------------------------------------------------------- 1 | curator=com.jobxhub.registry.zookeeper.curator.CuratorZookeeperClient 2 | zkclient=com.jobxhub.registry.zookeeper.zkclient.ZkclientZookeeperClient 3 | 4 | #def zkClient 5 | com.jobxhub.registry.zookeeper.zkclient.ZkclientZookeeperClient -------------------------------------------------------------------------------- /jobx-registry/src/main/resources/META-INF/jobx/com.jobxhub.registry.zookeeper.ZookeeperTransporter: -------------------------------------------------------------------------------- 1 | curator=com.jobxhub.registry.zookeeper.curator.CuratorZookeeperTransporter 2 | zkclient=com.jobxhub.registry.zookeeper.zkclient.ZkclientZookeeperTransporter 3 | 4 | #def zkTransporter 5 | com.jobxhub.registry.zookeeper.zkclient.ZkclientZookeeperTransporter -------------------------------------------------------------------------------- /jobx-rpc/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | jobx 7 | com.jobxhub 8 | 1.2.0-RELEASE 9 | 10 | 4.0.0 11 | jobx-rpc 12 | 13 | 14 | 15 | org.apache.maven.plugins 16 | maven-compiler-plugin 17 | 18 | 7 19 | 7 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | com.jobxhub 29 | jobx-common 30 | 31 | 32 | 33 | io.netty 34 | netty-all 35 | 36 | 37 | 38 | org.apache.mina 39 | mina-core 40 | 41 | 42 | 43 | org.apache.zookeeper 44 | zookeeper 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/Client.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.rpc; 22 | 23 | import com.jobxhub.common.ext.SPI; 24 | import com.jobxhub.common.job.Request; 25 | 26 | @SPI 27 | public interface Client extends Invoker { 28 | 29 | void connect(Request request); 30 | 31 | void disconnect() throws Throwable; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/InvokeCallback.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.rpc; 22 | 23 | import com.jobxhub.common.job.Response; 24 | 25 | /** 26 | * @author benjobs 27 | */ 28 | public interface InvokeCallback { 29 | 30 | void done(Response response); 31 | 32 | void caught(Throwable err); 33 | 34 | } -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/Invoker.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.rpc; 23 | 24 | import com.jobxhub.common.job.Request; 25 | import com.jobxhub.common.job.Response; 26 | 27 | /** 28 | * @author benjobs 29 | */ 30 | public interface Invoker { 31 | 32 | /** 33 | * 同步阻塞调用 34 | * @param request 35 | * @return 36 | * @throws Exception 37 | */ 38 | Response sentSync(Request request) throws Exception; 39 | 40 | /** 41 | * 单向调用 42 | * @param request 43 | * @throws Exception 44 | */ 45 | void sentOneWay(Request request) throws Exception; 46 | 47 | /** 48 | * 异步非阻塞,通知回调方式调用 49 | * @param request 50 | * @param callback 51 | * @throws Exception 52 | */ 53 | void sentAsync(Request request, InvokeCallback callback) throws Exception; 54 | 55 | } 56 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/Server.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.rpc; 22 | 23 | 24 | import com.jobxhub.common.ext.SPI; 25 | 26 | @SPI 27 | public interface Server { 28 | 29 | void start(int port, ServerHandler handler); 30 | 31 | void destroy() throws Throwable; 32 | 33 | } 34 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/ServerHandler.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.rpc; 23 | 24 | import com.jobxhub.common.ext.SPI; 25 | import com.jobxhub.common.job.Request; 26 | import com.jobxhub.common.job.Response; 27 | 28 | @SPI 29 | public interface ServerHandler { 30 | 31 | Response handle(Request request); 32 | 33 | } 34 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/netty/idle/IdleClientHandler.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.rpc.netty.idle; 2 | 3 | import com.jobxhub.rpc.netty.idle.domain.IdleRequest; 4 | import com.jobxhub.rpc.netty.idle.domain.IdleResponse; 5 | import io.netty.channel.ChannelHandler; 6 | import io.netty.channel.ChannelHandlerContext; 7 | import io.netty.channel.SimpleChannelInboundHandler; 8 | import io.netty.handler.timeout.IdleStateEvent; 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | 12 | import java.util.Date; 13 | 14 | /** 15 | * @author Autorun 16 | */ 17 | @ChannelHandler.Sharable 18 | public class IdleClientHandler extends SimpleChannelInboundHandler { 19 | 20 | private final Logger logger = LoggerFactory.getLogger(getClass()); 21 | 22 | @Override 23 | protected void channelRead0(ChannelHandlerContext ctx, IdleResponse msg) throws Exception { 24 | System.out.println(msg); 25 | } 26 | 27 | @Override 28 | public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { 29 | if (!(evt instanceof IdleStateEvent)) { 30 | super.userEventTriggered(ctx, evt); 31 | return; 32 | } 33 | IdleStateEvent event = (IdleStateEvent) evt; 34 | String side = "REQUEST"; 35 | String remoteAddress = ctx.channel().remoteAddress().toString(); 36 | Date currentDate = new Date(); 37 | logger.debug("[JobX] Idle request, requestType: [{}], remoteInfo: [{}], eventType: [{}]", 38 | side, 39 | remoteAddress, 40 | event.state() 41 | ); 42 | ctx.writeAndFlush(new IdleRequest().setEvent(event).setRemoteAddr(remoteAddress).setSide(side).setTime(currentDate)); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/netty/idle/IdleServerHandler.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.rpc.netty.idle; 2 | 3 | import com.jobxhub.rpc.netty.idle.domain.IdleRequest; 4 | import com.jobxhub.rpc.netty.idle.domain.IdleResponse; 5 | import io.netty.channel.ChannelHandler; 6 | import io.netty.channel.ChannelHandlerContext; 7 | import io.netty.channel.SimpleChannelInboundHandler; 8 | import io.netty.handler.timeout.IdleStateEvent; 9 | import org.slf4j.Logger; 10 | import org.slf4j.LoggerFactory; 11 | 12 | import java.util.Date; 13 | 14 | /** 15 | * @author Autorun 16 | */ 17 | @ChannelHandler.Sharable 18 | public class IdleServerHandler extends SimpleChannelInboundHandler { 19 | 20 | private final Logger logger = LoggerFactory.getLogger(getClass()); 21 | 22 | @Override 23 | protected void channelRead0(ChannelHandlerContext ctx, IdleRequest msg) throws Exception { 24 | System.out.println(msg); 25 | } 26 | 27 | @Override 28 | public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { 29 | if (!(evt instanceof IdleStateEvent)) { 30 | super.userEventTriggered(ctx, evt); 31 | return; 32 | } 33 | IdleStateEvent event = (IdleStateEvent) evt; 34 | String side = "RESPONSE"; 35 | String remoteAddress = ctx.channel().remoteAddress().toString(); 36 | Date currentDate = new Date(); 37 | logger.debug("[JobX] Idle request, requestType: [{}], remoteInfo: [{}], eventType: [{}]", 38 | side, 39 | remoteAddress, 40 | event.state() 41 | ); 42 | ctx.writeAndFlush(new IdleResponse().setEvent(event).setRemoteAddr(remoteAddress).setSide(side).setTime(currentDate)); } 43 | } 44 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/netty/idle/JobXIdleStateHandler.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.rpc.netty.idle; 2 | 3 | import io.netty.handler.timeout.IdleStateHandler; 4 | 5 | import java.util.concurrent.TimeUnit; 6 | 7 | /** 8 | * 9 | * @author Autorun 10 | */ 11 | public class JobXIdleStateHandler extends IdleStateHandler { 12 | 13 | public JobXIdleStateHandler(){ 14 | this(10, 10, 10, TimeUnit.SECONDS); 15 | } 16 | 17 | public JobXIdleStateHandler(int readerIdleTimeSeconds, int writerIdleTimeSeconds, int allIdleTimeSeconds) { 18 | super(readerIdleTimeSeconds, writerIdleTimeSeconds, allIdleTimeSeconds); 19 | } 20 | 21 | public JobXIdleStateHandler(long readerIdleTime, long writerIdleTime, long allIdleTime, TimeUnit unit) { 22 | super(readerIdleTime, writerIdleTime, allIdleTime, unit); 23 | } 24 | 25 | public JobXIdleStateHandler(boolean observeOutput, long readerIdleTime, long writerIdleTime, long allIdleTime, TimeUnit unit) { 26 | super(observeOutput, readerIdleTime, writerIdleTime, allIdleTime, unit); 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/netty/idle/domain/IdleRequest.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.rpc.netty.idle.domain; 2 | 3 | import io.netty.handler.timeout.IdleStateEvent; 4 | 5 | import java.util.Date; 6 | import java.util.Objects; 7 | 8 | /** 9 | * @author Autorun 10 | */ 11 | public class IdleRequest { 12 | 13 | private String remoteAddr; 14 | 15 | private IdleStateEvent event; 16 | 17 | private String side; 18 | 19 | private Date time; 20 | 21 | public IdleRequest setRemoteAddr(String remoteAddr) { 22 | this.remoteAddr = remoteAddr; 23 | return this; 24 | } 25 | 26 | public IdleRequest setEvent(IdleStateEvent event) { 27 | this.event = event; 28 | return this; 29 | } 30 | 31 | public IdleRequest setSide(String side) { 32 | this.side = side; 33 | return this; 34 | } 35 | 36 | public IdleRequest setTime(Date time) { 37 | this.time = time; 38 | return this; 39 | } 40 | 41 | @Override 42 | public boolean equals(Object o) { 43 | if (this == o) { 44 | return true; 45 | } 46 | if (o == null || getClass() != o.getClass()) { 47 | return false; 48 | } 49 | IdleRequest that = (IdleRequest) o; 50 | return Objects.equals(remoteAddr, that.remoteAddr) && 51 | Objects.equals(event, that.event) && 52 | Objects.equals(side, that.side) && 53 | Objects.equals(time, that.time); 54 | } 55 | 56 | @Override 57 | public int hashCode() { 58 | return Objects.hash(remoteAddr, event, side, time); 59 | } 60 | 61 | @Override 62 | public String toString() { 63 | return "IdleRequest{" + 64 | "remoteAddr='" + remoteAddr + '\'' + 65 | ", event=" + event + 66 | ", side='" + side + '\'' + 67 | ", time=" + time + 68 | '}'; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/netty/idle/domain/IdleResponse.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.rpc.netty.idle.domain; 2 | 3 | import io.netty.handler.timeout.IdleStateEvent; 4 | 5 | import java.util.Date; 6 | import java.util.Objects; 7 | 8 | /** 9 | * @author Autorun 10 | */ 11 | public class IdleResponse { 12 | 13 | private String remoteAddr; 14 | 15 | private IdleStateEvent event; 16 | 17 | private String side; 18 | 19 | private Date time; 20 | 21 | public IdleResponse setRemoteAddr(String remoteAddr) { 22 | this.remoteAddr = remoteAddr; 23 | return this; 24 | } 25 | 26 | public IdleResponse setEvent(IdleStateEvent event) { 27 | this.event = event; 28 | return this; 29 | } 30 | 31 | public IdleResponse setSide(String side) { 32 | this.side = side; 33 | return this; 34 | } 35 | 36 | public IdleResponse setTime(Date time) { 37 | this.time = time; 38 | return this; 39 | } 40 | 41 | @Override 42 | public boolean equals(Object o) { 43 | if (this == o) { 44 | return true; 45 | } 46 | if (o == null || getClass() != o.getClass()) { 47 | return false; 48 | } 49 | IdleResponse that = (IdleResponse) o; 50 | return Objects.equals(remoteAddr, that.remoteAddr) && 51 | Objects.equals(event, that.event) && 52 | Objects.equals(side, that.side) && 53 | Objects.equals(time, that.time); 54 | } 55 | 56 | @Override 57 | public int hashCode() { 58 | return Objects.hash(remoteAddr, event, side, time); 59 | } 60 | 61 | @Override 62 | public String toString() { 63 | return "IdleResponse{" + 64 | "remoteAddr='" + remoteAddr + '\'' + 65 | ", event=" + event + 66 | ", side='" + side + '\'' + 67 | ", time=" + time + 68 | '}'; 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/java/com/jobxhub/rpc/support/ChannelWrapper.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.rpc.support; 23 | 24 | public interface ChannelWrapper { 25 | boolean isActive(); 26 | void close(); 27 | } 28 | -------------------------------------------------------------------------------- /jobx-rpc/src/main/resources/META-INF/jobx/com.jobxhub.rpc.Client: -------------------------------------------------------------------------------- 1 | netty=com.jobxhub.rpc.netty.NettyClient 2 | mina=com.jobxhub.rpc.mina.MinaClient 3 | 4 | #default client 5 | com.jobxhub.rpc.netty.NettyClient -------------------------------------------------------------------------------- /jobx-rpc/src/main/resources/META-INF/jobx/com.jobxhub.rpc.Server: -------------------------------------------------------------------------------- 1 | netty=com.jobxhub.rpc.netty.NettyServer 2 | mina=com.jobxhub.rpc.mina.MinaServer 3 | 4 | #default NettyServer 5 | com.jobxhub.rpc.netty.NettyServer 6 | -------------------------------------------------------------------------------- /jobx-rpc/src/test/java/NettyFileTest.java: -------------------------------------------------------------------------------- 1 | import org.junit.Test; 2 | import com.jobxhub.common.ext.ExtensionLoader; 3 | import com.jobxhub.common.job.*; 4 | import com.jobxhub.common.util.IdGenerator; 5 | import com.jobxhub.rpc.Client; 6 | import com.jobxhub.rpc.Server; 7 | 8 | import java.io.File; 9 | 10 | public class NettyFileTest { 11 | 12 | 13 | @Test 14 | public void server() { 15 | Server server = ExtensionLoader.load(Server.class); 16 | server.start(8089, null); 17 | } 18 | 19 | @Test 20 | public void client() throws Exception { 21 | Client client = ExtensionLoader.load(Client.class); 22 | Request request = new Request(); 23 | request.setId(IdGenerator.getId()); 24 | request.setAction(Action.UPLOAD); 25 | request.setRpcType(RpcType.SYNC); 26 | request.setHost("127.0.0.1"); 27 | request.setPort(8089); 28 | File file = new File("/Users/benjobs/movie/盗梦空间.mkv"); 29 | RequestFile requestFile = new RequestFile(file); 30 | requestFile.setSavePath("/Users/benjobs/Desktop"); 31 | request.setUploadFile(requestFile); 32 | Response response = client.sentSync(request); 33 | System.out.println(response.getAction()); 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /jobx-rpc/src/test/java/SPITest.java: -------------------------------------------------------------------------------- 1 | import org.junit.Test; 2 | import com.jobxhub.common.util.SystemPropertyUtils; 3 | 4 | import java.io.IOException; 5 | 6 | public class SPITest { 7 | 8 | @Test 9 | public void testSpi() throws IOException { 10 | boolean xx = SystemPropertyUtils.getBoolean("aaa",false); 11 | 12 | System.out.println(xx); 13 | //SystemPropertyUtils.setProperty("aaa","true"); 14 | 15 | 16 | xx = SystemPropertyUtils.getBoolean("aaa",false); 17 | 18 | System.out.println(xx); 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/alarm/AlarmNoticeFacory.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.server.alarm; 2 | /** 3 | * @Package com.jobxhub.server.alarm 4 | * @Title: AlarmNoticeFacory 5 | * @author hitechr 6 | * @date 2018/6/12 17:21 7 | * @version V1.0 8 | */ 9 | 10 | import com.jobxhub.common.job.Alarm; 11 | 12 | import java.util.Map; 13 | 14 | /** 15 | * @Descriptions: 16 | */ 17 | public class AlarmNoticeFacory { 18 | 19 | static Map sendNoticeMap; 20 | 21 | public static SendNotice getInstantce(Alarm.AlarmType alarmType ){ 22 | return sendNoticeMap.get(alarmType.getCode()); 23 | } 24 | 25 | public void setSendNoticeMap(Map sendNoticeMap) { 26 | AlarmNoticeFacory.sendNoticeMap = sendNoticeMap; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/alarm/DDSendNotice.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.server.alarm; 2 | /** 3 | * @Package com.jobxhub.server.alarm 4 | * @Title: DDSendNotice 5 | * @author hitechr 6 | * @date 2018/6/12 15:09 7 | * @version V1.0 8 | */ 9 | 10 | import org.springframework.stereotype.Service; 11 | 12 | /** 13 | * @Descriptions: 14 | */ 15 | @Service("ddSendNotice") 16 | public class DDSendNotice extends AbstractSendNotice { 17 | 18 | String url="https://oapi.dingtalk.com/robot/send?access_token=cffcc6996a57a834a8bde29b79f4ae77103eb57fa1ce37f2743e1867be03dd87"; 19 | 20 | 21 | 22 | @Override 23 | public void send(AlarmMessage message) { 24 | 25 | 26 | } 27 | 28 | } 29 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/alarm/EmailSendNotice.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.server.alarm; 2 | /** 3 | * @Package com.jobxhub.server.alarm 4 | * @Title: EmailSendNotice 5 | * @author hitechr 6 | * @date 2018/6/12 9:19 7 | * @version V1.0 8 | */ 9 | 10 | import com.jobxhub.server.dto.Log; 11 | 12 | /** 13 | * @Descriptions: 发送邮件 14 | */ 15 | public class EmailSendNotice implements SendNotice { 16 | 17 | @Override 18 | public void send(AlarmMessage message) { 19 | 20 | } 21 | 22 | 23 | } 24 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/alarm/SMSSendNotice.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.server.alarm; 2 | /** 3 | * @Package com.jobxhub.server.alarm 4 | * @Title: SMSSendNotice 5 | * @author hitechr 6 | * @date 2018/6/10 19:18 7 | * @version V1.0 8 | */ 9 | 10 | import com.jobxhub.server.dto.Log; 11 | 12 | /** 13 | * @Descriptions: 发送短信 14 | */ 15 | public class SMSSendNotice implements SendNotice { 16 | 17 | @Override 18 | public void send(AlarmMessage message) { 19 | 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/alarm/SendNotice.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.server.alarm; 2 | /** 3 | * @Package com.jobxhub.server.alarm 4 | * @Title: SendNotice 5 | * @author hitechr 6 | * @date 2018/6/10 19:17 7 | * @version V1.0 8 | */ 9 | 10 | /** 11 | * @Descriptions: 发送消息的接口 12 | */ 13 | public interface SendNotice { 14 | 15 | void send(AlarmMessage message); 16 | 17 | } 18 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/annotation/RequestRepeat.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.server.annotation; 2 | 3 | 4 | import java.lang.annotation.*; 5 | 6 | @Documented 7 | @Retention(RetentionPolicy.RUNTIME) 8 | @Target({ElementType.METHOD}) 9 | public @interface RequestRepeat { 10 | //是否需要返回提示页面 11 | boolean view() default false ; 12 | } 13 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/bootstrap/Launcher.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.bootstrap; 22 | 23 | 24 | import com.jobxhub.common.ext.SPI; 25 | 26 | /** 27 | * @author benjobs 28 | */ 29 | @SPI 30 | public interface Launcher { 31 | 32 | void start(boolean devMode, int port) throws Exception; 33 | 34 | void stop(); 35 | 36 | } 37 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/controller/MonitorController.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.server.controller; 23 | 24 | 25 | import org.springframework.stereotype.Controller; 26 | import org.springframework.web.bind.annotation.RequestMapping; 27 | 28 | 29 | @Controller 30 | @RequestMapping("monitor") 31 | public class MonitorController { 32 | 33 | @RequestMapping("druid.htm") 34 | public String view() { 35 | return "/monitor/druid"; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/dao/ConfigDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.dao; 22 | 23 | import com.jobxhub.server.domain.ConfigBean; 24 | 25 | import java.util.List; 26 | 27 | public interface ConfigDao { 28 | 29 | List getConfig(); 30 | 31 | void update(ConfigBean configBean); 32 | 33 | String getExecUser(); 34 | } 35 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/dao/LogDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.dao; 22 | 23 | 24 | import com.jobxhub.server.domain.LogBean; 25 | import com.jobxhub.server.tag.PageBean; 26 | import org.apache.ibatis.annotations.Param; 27 | 28 | import java.util.List; 29 | import java.util.Map; 30 | 31 | public interface LogDao { 32 | 33 | LogBean getById(@Param("logId") Long logId); 34 | 35 | List getByPageBean(@Param("pager") PageBean pageBean); 36 | 37 | int getCount(@Param("filter") Map filter); 38 | 39 | List getUnRead(Long userId); 40 | 41 | Integer getUnReadCount(Long userId); 42 | 43 | void updateRead(Long logId); 44 | 45 | void save(LogBean log); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/dao/RoleDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.dao; 22 | 23 | import com.jobxhub.server.domain.RoleBean; 24 | 25 | import java.util.List; 26 | 27 | public interface RoleDao { 28 | List getAll(); 29 | 30 | RoleBean getById(Long roleId); 31 | 32 | void save(RoleBean role); 33 | } 34 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/dao/TerminalDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.dao; 22 | 23 | import com.jobxhub.server.domain.TerminalBean; 24 | import com.jobxhub.server.tag.PageBean; 25 | import org.apache.ibatis.annotations.Param; 26 | 27 | import java.util.Date; 28 | import java.util.List; 29 | import java.util.Map; 30 | 31 | public interface TerminalDao { 32 | 33 | List getByPageBean(@Param("pager") PageBean pageBean); 34 | 35 | List getByUser(Long userId); 36 | 37 | TerminalBean getById(Long id); 38 | 39 | int getCount(@Param("filter") Map filter); 40 | 41 | void save(TerminalBean terminalBean); 42 | 43 | void update(TerminalBean terminalBean); 44 | 45 | void updateLoginTime(@Param("id")Long id,@Param("loginTime")Date date); 46 | 47 | void updateTheme(@Param("id") Long id,@Param("theme") String theme); 48 | 49 | void delete(Long id); 50 | 51 | } 52 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/dao/UserAgentDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.dao; 22 | 23 | import com.jobxhub.server.domain.UserAgentBean; 24 | import org.apache.ibatis.annotations.Param; 25 | 26 | import java.util.List; 27 | 28 | /** 29 | * 用户对哪些机器有权限.... 30 | */ 31 | public interface UserAgentDao { 32 | 33 | void delete(Long userId); 34 | 35 | void save(@Param("userId") Long userId, @Param("agentId") Long agentId); 36 | 37 | List getUserAgent(Long userId); 38 | 39 | } 40 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/dao/UserDao.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.dao; 22 | 23 | import com.jobxhub.server.domain.UserBean; 24 | import com.jobxhub.server.tag.PageBean; 25 | import org.apache.ibatis.annotations.Param; 26 | 27 | import java.util.List; 28 | import java.util.Map; 29 | 30 | public interface UserDao { 31 | 32 | List getByPageBean(@Param("pager") PageBean pageBean); 33 | 34 | int getCount(@Param("filter") Map filter); 35 | 36 | void save(UserBean user); 37 | 38 | UserBean getById(Long id); 39 | 40 | void update(UserBean user); 41 | 42 | UserBean getByName(String userName); 43 | 44 | void updatePassword(@Param("userId") Long userId, @Param("password") String password); 45 | 46 | void uploadImg(@Param("userId") Long userId, @Param("headerPic") byte[] headerPic); 47 | 48 | String getExecUser(@Param("userId") Long userId); 49 | } 50 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/domain/JobAgent.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.domain; 22 | 23 | /** 24 | * job分布在哪些agent上 25 | */ 26 | public class JobAgent { 27 | 28 | } 29 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/event/AlarmEvent.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.server.event; 2 | /** 3 | * @Package com.jobxhub.server.event 4 | * @Title: AlarmEvent 5 | * @author hitechr 6 | * @date 2018/6/11 8:58 7 | * @version V1.0 8 | */ 9 | 10 | import com.jobxhub.server.alarm.AlarmMessage; 11 | import org.springframework.context.ApplicationEvent; 12 | 13 | /** 14 | * @Descriptions: 发送消息的事件 15 | */ 16 | public class AlarmEvent extends ApplicationEvent { 17 | 18 | 19 | private AlarmMessage alarmMessage; 20 | 21 | 22 | public AlarmEvent(Object source, AlarmMessage alarmMessage) { 23 | super(source); 24 | this.alarmMessage = alarmMessage; 25 | } 26 | 27 | public AlarmMessage getAlarmMessage() { 28 | return alarmMessage; 29 | } 30 | 31 | public void setAlarmMessage(AlarmMessage alarmMessage) { 32 | this.alarmMessage = alarmMessage; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/event/AlarmListener.java: -------------------------------------------------------------------------------- 1 | package com.jobxhub.server.event; 2 | /** 3 | * @Package com.jobxhub.server.event 4 | * @Title: AlarmListener 5 | * @author hitechr 6 | * @date 2018/6/11 9:01 7 | * @version V1.0 8 | */ 9 | 10 | import com.jobxhub.common.job.Alarm; 11 | import com.jobxhub.server.alarm.AlarmMessage; 12 | import com.jobxhub.server.alarm.AlarmNoticeFacory; 13 | import com.jobxhub.server.alarm.SendNotice; 14 | import org.springframework.context.ApplicationListener; 15 | import org.springframework.scheduling.annotation.Async; 16 | import org.springframework.scheduling.annotation.EnableAsync; 17 | import org.springframework.stereotype.Component; 18 | 19 | /** 20 | * @Descriptions: 专门发送通知的监听器 21 | */ 22 | @EnableAsync 23 | @Component 24 | public class AlarmListener implements ApplicationListener { 25 | 26 | @Override 27 | @Async 28 | public void onApplicationEvent(AlarmEvent alarmEvent) { 29 | AlarmMessage alarmMessage = alarmEvent.getAlarmMessage(); 30 | Alarm.AlarmType alarmType = alarmMessage.getAlarmType();//获取通知方式 31 | int[] scatter = alarmType.scatter(); 32 | for(int code:scatter){ 33 | SendNotice instantce = AlarmNoticeFacory.getInstantce(Alarm.getAlarmType(code)); 34 | instantce.send(null); 35 | } 36 | } 37 | 38 | public static void main(String[] args) { 39 | int a=25; 40 | String s = Integer.toBinaryString(a); 41 | int length = s.replaceAll("0", "").length(); 42 | char[] chars = s.toCharArray(); 43 | int[] arrs= new int[length]; 44 | for(int i=0,j=0;i 4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.session.cached; 22 | 23 | /** 24 | * @author benjobs 25 | */ 26 | public interface CachedManager { 27 | 28 | void delete(Object key); 29 | 30 | T get(Object key, Class clazz); 31 | 32 | void set(Object key, Object object); 33 | 34 | /*** 35 | * remove and return value 36 | * @param key 37 | * @param clazz 38 | * @param 39 | * @return 40 | */ 41 | T remove(Object key, Class clazz); 42 | 43 | } 44 | -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/session/wrapper/HttpServletRequestSessionWrapper.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | package com.jobxhub.server.session.wrapper; 22 | 23 | 24 | import javax.servlet.http.HttpServletRequest; 25 | import javax.servlet.http.HttpSession; 26 | 27 | public class HttpServletRequestSessionWrapper extends javax.servlet.http.HttpServletRequestWrapper { 28 | 29 | private HttpSession session; 30 | 31 | public HttpServletRequestSessionWrapper(HttpServletRequest request, HttpSession session) { 32 | super(request); 33 | this.session = session; 34 | } 35 | 36 | @Override 37 | public HttpSession getSession(boolean create) { 38 | return session; 39 | } 40 | 41 | @Override 42 | public HttpSession getSession() { 43 | return session; 44 | } 45 | 46 | } -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/support/SshUserInfo.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.server.support; 23 | 24 | import com.jcraft.jsch.UserInfo; 25 | 26 | public class SshUserInfo implements UserInfo { 27 | //private String passphrase = null; 28 | 29 | public SshUserInfo() { 30 | //this.passphrase = passphrase; 31 | } 32 | 33 | public String getPassphrase() { 34 | return null;//passphrase; 35 | } 36 | 37 | public String getPassword() { 38 | return null; 39 | } 40 | 41 | public boolean promptPassphrase(String s) { 42 | return true; 43 | } 44 | 45 | public boolean promptPassword(String s) { 46 | return true; 47 | } 48 | 49 | public boolean promptYesNo(String s) { 50 | return true; 51 | } 52 | 53 | public void showMessage(String s) { 54 | System.out.println(s); 55 | } 56 | } -------------------------------------------------------------------------------- /jobx-server/src/main/java/com/jobxhub/server/util/PageUtils.java: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2015 The JobX Project 3 | *

4 | * Licensed to the Apache Software Foundation (ASF) under one 5 | * or more contributor license agreements. See the NOTICE file 6 | * distributed with this work for additional information 7 | * regarding copyright ownership. The ASF licenses this file 8 | * to you under the Apache License, Version 2.0 (the 9 | * "License"); you may not use this file except in compliance 10 | * with the License. You may obtain a copy of the License at 11 | *

12 | * http://www.apache.org/licenses/LICENSE-2.0 13 | *

14 | * Unless required by applicable law or agreed to in writing, 15 | * software distributed under the License is distributed on an 16 | * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17 | * KIND, either express or implied. See the License for the 18 | * specific language governing permissions and limitations 19 | * under the License. 20 | */ 21 | 22 | package com.jobxhub.server.util; 23 | 24 | import com.jobxhub.common.util.DateUtils; 25 | import org.quartz.TriggerUtils; 26 | import org.quartz.impl.triggers.CronTriggerImpl; 27 | 28 | import java.text.ParseException; 29 | import java.util.ArrayList; 30 | import java.util.Date; 31 | import java.util.List; 32 | 33 | public class PageUtils { 34 | 35 | public static List getRecentTriggerTime(String cron) { 36 | List list = new ArrayList(); 37 | try { 38 | CronTriggerImpl cronTriggerImpl = new CronTriggerImpl(); 39 | cronTriggerImpl.setCronExpression(cron); 40 | List dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, 5); 41 | for (Date date : dates) { 42 | list.add(DateUtils.parseStringFromDate(date,DateUtils.format)); 43 | } 44 | } catch (ParseException e) { 45 | e.printStackTrace(); 46 | } 47 | return list; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /jobx-server/src/main/resources/META-INF/jobx/com.jobxhub.server.bootstrap.Launcher: -------------------------------------------------------------------------------- 1 | jetty=com.jobxhub.server.bootstrap.JettyLauncher 2 | tomcat=com.jobxhub.server.bootstrap.TomcatLauncher 3 | 4 | com.jobxhub.server.bootstrap.TomcatLauncher -------------------------------------------------------------------------------- /jobx-server/src/main/resources/app-banner.txt: -------------------------------------------------------------------------------- 1 | _______ 2 | /\ _________ ______ _____ / / 3 | (()) ______ / ________ / ___ \/ / 4 | \/ ___ _ / _ __ \_ __ \ ___ / 5 | / /_/ / / /_/ / /_/ / __ . \ 6 | \____/ \____/ /_.___/ __ / \_\__ 7 | _____ / -------------------------------------------------------------------------------- /jobx-server/src/main/resources/app-websocket.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /jobx-server/src/main/resources/config.properties: -------------------------------------------------------------------------------- 1 | jdbc.driver=com.mysql.jdbc.Driver 2 | jdbc.url=jdbc:mysql://localhost:3306/jobx?useUnicode=true&characterEncoding=utf8&useCursorFetch=true&autoReconnect=true&failOverReadOnly=false&useSSL=false&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=Asia/Shanghai 3 | jdbc.username=root 4 | jdbc.password=123322242 5 | 6 | ################################################################################################## 7 | # server端是否集群(多个server) 8 | # 如果 jobx.cluster为true,则两种缓存实现(redis|memcached)任选其一进行配合(必须选一个) 9 | # 并且 jobx.cached 要写上对应的缓存实现(redis|memcached) 10 | # 如果为false,则 redis,memcached,和 jobx.cached 都不用管. 11 | ################################################################################################## 12 | jobx.cluster=false 13 | #(可选值: (redis|memcached) 14 | jobx.cached=memcached 15 | 16 | #redis 配置 17 | redis.host=10.20.10.111 18 | redis.password=123456 19 | redis.port=6379 20 | redis.dbIndex=0 21 | redis.expire=3000 22 | redis.maxIdle=300 23 | redis.maxActive=600 24 | redis.maxWait=1000 25 | redis.testOnBorrow=true 26 | 27 | #memcached 配置 28 | memcached.servers=127.0.0.1:11211 29 | memcached.protocol=BINARY 30 | memcached.opTimeout=1000 31 | memcached.expire=3000 32 | memcached.timeoutExceptionThreshold=1998 33 | memcached.locatorType=CONSISTENT 34 | memcached.failureMode=Redistribute 35 | memcached.useNagleAlgorithm=false 36 | 37 | #agent监控服务端口 38 | jobx.monitorPort=17502 39 | #zookepper注册中心 40 | jobx.registry=zookeeper://127.0.0.1:2181 41 | -------------------------------------------------------------------------------- /jobx-server/src/main/resources/log4j.properties: -------------------------------------------------------------------------------- 1 | ### set log levels ### 2 | log4j.rootLogger=INFO , console , DEBUG , error 3 | ### console ### 4 | log4j.appender.console=org.apache.log4j.ConsoleAppender 5 | log4j.appender.console.Target=System.out 6 | log4j.appender.console.layout=org.apache.log4j.PatternLayout 7 | log4j.appender.console.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n 8 | 9 | ### log file ### 10 | log4j.appender.debug=org.apache.log4j.DailyRollingFileAppender 11 | log4j.appender.debug.File=${catalina.home}/logs/jobx.out 12 | log4j.appender.debug.Append=true 13 | log4j.appender.debug.Threshold=INFO 14 | log4j.appender.debug.layout=org.apache.log4j.PatternLayout 15 | log4j.appender.debug.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n 16 | ### exception ### 17 | log4j.appender.error=org.apache.log4j.DailyRollingFileAppender 18 | log4j.appender.error.File=${catalina.home}/logs/jobx.err 19 | log4j.appender.error.Append=true 20 | log4j.appender.error.Threshold=ERROR 21 | log4j.appender.error.layout=org.apache.log4j.PatternLayout 22 | log4j.appender.error.layout.ConversionPattern=%-d{yyyy-MM-dd HH\:mm\:ss} [%p]-[%c] %m%n 23 | log4j.appender.stdout=org.apache.log4j.ConsoleAppender 24 | log4j.appender.stdout.Target=System.out 25 | log4j.appender.stdout.File=${catalina.home}/logs/jobx.out 26 | log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 27 | log4j.appender.stdout.layout.ConversionPattern=%d{ISO8601} %l %c%n%p: %m%n 28 | ### druid sql ### 29 | log4j.logger.druid.sql=warn,stdout 30 | log4j.logger.druid.sql.DataSource=warn,stdout 31 | log4j.logger.druid.sql.Connection=warn,stdout 32 | log4j.logger.druid.sql.Statement=warn,stdout 33 | log4j.logger.druid.sql.ResultSet=warn,stdout 34 | 35 | #mybatis 36 | log4j.logger.com.jobxhub.server.dao=DEBUG -------------------------------------------------------------------------------- /jobx-server/src/main/resources/mapper/ConfigDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 20 | 21 | 22 | update t_config 23 | set 24 | config_val = #{configVal}, 25 | comment = #{comment} 26 | where config_key = #{configKey} 27 | 28 | and 1=2 29 | 30 | 31 | 32 | 37 | 38 | -------------------------------------------------------------------------------- /jobx-server/src/main/resources/mapper/RoleDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 13 | 14 | 15 | insert into t_user ( 16 | role_name, 17 | description 18 | ) values ( 19 | #{roleName}, 20 | #{description} 21 | ); 22 | 23 | 24 | -------------------------------------------------------------------------------- /jobx-server/src/main/resources/mapper/UserAgentDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | delete from t_user_agent where user_id=#{userId} 8 | 9 | 10 | 11 | insert into t_user_agent ( 12 | user_id, 13 | agent_id 14 | ) values ( 15 | #{userId}, 16 | #{agentId} 17 | ) 18 | 19 | 20 | 35 | 36 | 37 | -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/WEB-INF/layouts/message.jsp: -------------------------------------------------------------------------------- 1 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 2 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 | 4 | 9 |

10 |
11 |
12 |  通知 & 消息 & 短信 13 | × 14 | 15 |
16 |
17 | 18 |
19 |
20 |  查看全部 21 |
22 |
23 |
-------------------------------------------------------------------------------- /jobx-server/src/main/webapp/WEB-INF/sitemesh3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | text/html 4 | application/vnd.wap.xhtml+xml 5 | application/xhtml+xml 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/WEB-INF/view/notice/info.jsp: -------------------------------------------------------------------------------- 1 | <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 2 | <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 | <%@ taglib prefix="cron" uri="http://www.jobx.org"%> 4 | <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%> 5 | <% 6 | String port = request.getServerPort() == 80 ? "" : (":"+request.getServerPort()); 7 | String path = request.getContextPath().replaceAll("/$",""); 8 | String contextPath = request.getScheme()+"://"+request.getServerName()+port+path; 9 | pageContext.setAttribute("contextPath",contextPath); 10 | %> 11 | 12 | 13 | 14 |
15 |
16 | 17 | 18 | 19 | 20 | 21 |
22 |
23 | jobx告警 -
24 | ${cron:escapeHtml(m.message)} 25 |
26 |
27 | 28 |
29 | -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/css/morris.css: -------------------------------------------------------------------------------- 1 | .morris-hover { 2 | position: absolute; 3 | z-index: 1000; 4 | } 5 | 6 | .morris-hover.morris-default-style { 7 | border-radius: 10px; 8 | padding: 6px; 9 | color: #666; 10 | background: rgba(10, 10, 10, 0.5); 11 | font: 12px/18px sans-serif; 12 | text-align: center; 13 | } 14 | 15 | .morris-hover.morris-default-style .morris-hover-row-label { 16 | font-weight: bold; 17 | color: rgb(225,225,225); 18 | margin: 0.25em 0; 19 | } 20 | 21 | .morris-hover.morris-default-style .morris-hover-point { 22 | white-space: nowrap; 23 | margin: 0.1em 0; 24 | } -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/css/prettify.min.css: -------------------------------------------------------------------------------- 1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:700}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:700}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:700}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/fontawesome/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/fontawesome/FontAwesome.otf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/fontawesome/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/fontawesome/fontawesome-webfont.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/fontawesome/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/fontawesome/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/fontawesome/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/fontawesome/fontawesome-webfont.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/fontawesome/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/fontawesome/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/glyphicons-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/glyphicons-regular.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/glyphicons-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/glyphicons-regular.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/glyphicons-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/glyphicons-regular.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/glyphicons-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/glyphicons-regular.woff2 -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/icons/icon.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/icons/icon.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/icons/icon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/icons/icon.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/material-design-iconic-font/fonts/Material-Design-Iconic-Font-v=2.2.0.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/material-design-iconic-font/fonts/Material-Design-Iconic-Font-v=2.2.0.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/material-design-iconic-font/fonts/Material-Design-Iconic-Font-v=2.2.0.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/material-design-iconic-font/fonts/Material-Design-Iconic-Font-v=2.2.0.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/material-design-iconic-font/fonts/Material-Design-Iconic-Font-v=2.2.0.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/material-design-iconic-font/fonts/Material-Design-Iconic-Font-v=2.2.0.woff2 -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/material-icons/Material-Design-Iconic-Font.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/material-icons/Material-Design-Iconic-Font.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/material-icons/Material-Design-Iconic-Font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/material-icons/Material-Design-Iconic-Font.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/material-icons/Material-Design-Iconic-Font.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/material-icons/Material-Design-Iconic-Font.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-bold-.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-bold-.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-bold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-bold.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-bold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-bold.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-bold.woff2 -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-regular.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-regular.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-regular.woff2 -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-semibold-.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-semibold-.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-semibold.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-semibold.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-semibold.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-semibold.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/nunito/nunito-semibold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/nunito/nunito-semibold.woff2 -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Light-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Light-webfont.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Light-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Light-webfont.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Light-webfont.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Regular-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Regular-webfont.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Regular-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Regular-webfont.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Regular-webfont.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Semibold-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Semibold-webfont.eot -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Semibold-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Semibold-webfont.ttf -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Semibold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/fonts/opan-sans/OpenSans-Semibold-webfont.woff -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/500.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/500.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/add.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/add.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/back.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/1.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/10.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/2.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/3.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/4.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/5.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/6.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/7.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/8.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/9.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/blue.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/chrome.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/chrome.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/greenish.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/greenish.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/kiwi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/kiwi.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/night.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/night.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/orange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/orange.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-1.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-10.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-2.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-3.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-4.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-5.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-6.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-7.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-8.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-9.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-blue.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-blue.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-chrome.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-chrome.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-greenish.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-greenish.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-kiwi.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-kiwi.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-night.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-night.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-orange.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-orange.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-sky.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-sky.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/skin-violate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/skin-violate.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/sky.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/sky.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/body/violate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/body/violate.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/browsers/chrome.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/browsers/chrome.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/browsers/firefox.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/browsers/firefox.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/browsers/ie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/browsers/ie.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/browsers/opera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/browsers/opera.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/browsers/safari.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/browsers/safari.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/color-picker/alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/color-picker/alpha.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/color-picker/hue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/color-picker/hue.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/color-picker/saturation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/color-picker/saturation.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/crontab_ico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/crontab_ico.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/dialog_closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/dialog_closed.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/dot_pattern.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/dot_pattern.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/favicon.ico -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/file.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/file.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/folder-close.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/folder-close.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/folder-open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/folder-open.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/icon-loader.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/icon-loader.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/img-cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/img-cover.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/jobx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/jobx.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/loadinfo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/loadinfo.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/opencron.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/opencron.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/profile-pic.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/profile-pic.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/quartz_ico.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/quartz_ico.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/search-sm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/search-sm.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/search.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/search.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/search@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/search@2x.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/select-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/select-bg.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/sort.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/terminal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/terminal.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/timg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/timg.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/timg2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/timg2.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/uploading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/uploading.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/img/wechat_qr.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/img/wechat_qr.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/My97DatePicker/lang/en.js: -------------------------------------------------------------------------------- 1 | var $lang={ 2 | errAlertMsg: "Invalid date or the date out of range,redo or not?", 3 | aWeekStr: ["wk", "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], 4 | aLongWeekStr:["wk","Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday"], 5 | aMonStr: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], 6 | aLongMonStr: ["January","February","March","April","May","June","July","August","September","October","November","December"], 7 | clearStr: "Clear", 8 | todayStr: "Today", 9 | okStr: "OK", 10 | updateStr: "OK", 11 | timeStr: "Time", 12 | quickStr: "Quick Selection", 13 | err_1: 'MinDate Cannot be bigger than MaxDate!' 14 | } -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/My97DatePicker/lang/zh-cn.js: -------------------------------------------------------------------------------- 1 | var $lang={ 2 | errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u8303\u56F4,\u9700\u8981\u64A4\u9500\u5417?", 3 | aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"], 4 | aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"], 5 | 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"], 6 | 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"], 7 | clearStr: "\u6E05\u7A7A", 8 | todayStr: "\u4ECA\u5929", 9 | okStr: "\u786E\u5B9A", 10 | updateStr: "\u786E\u5B9A", 11 | timeStr: "\u65F6\u95F4", 12 | quickStr: "\u5FEB\u901F\u9009\u62E9", 13 | err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u4E8E\u6700\u5927\u65E5\u671F!' 14 | } -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/My97DatePicker/lang/zh-tw.js: -------------------------------------------------------------------------------- 1 | var $lang={ 2 | errAlertMsg: "\u4E0D\u5408\u6CD5\u7684\u65E5\u671F\u683C\u5F0F\u6216\u8005\u65E5\u671F\u8D85\u51FA\u9650\u5B9A\u7BC4\u570D,\u9700\u8981\u64A4\u92B7\u55CE?", 3 | aWeekStr: ["\u5468","\u65E5","\u4E00","\u4E8C","\u4E09","\u56DB","\u4E94","\u516D"], 4 | aLongWeekStr:["\u5468","\u661F\u671F\u65E5","\u661F\u671F\u4E00","\u661F\u671F\u4E8C","\u661F\u671F\u4E09","\u661F\u671F\u56DB","\u661F\u671F\u4E94","\u661F\u671F\u516D"], 5 | 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"], 6 | 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"], 7 | clearStr: "\u6E05\u7A7A", 8 | todayStr: "\u4ECA\u5929", 9 | okStr: "\u78BA\u5B9A", 10 | updateStr: "\u78BA\u5B9A", 11 | timeStr: "\u6642\u9593", 12 | quickStr: "\u5FEB\u901F\u9078\u64C7", 13 | err_1: '\u6700\u5C0F\u65E5\u671F\u4E0D\u80FD\u5927\u65BC\u6700\u5927\u65E5\u671F!' 14 | } -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/My97DatePicker/skin/WdatePicker.css: -------------------------------------------------------------------------------- 1 | .Wdate{ 2 | border:none; 3 | height:23px; 4 | background:#f5f7f9 url(datePicker.png) no-repeat 80px; 5 | padding:1px 10px 1px 1px; 6 | border-radius:1px; 7 | font-size: 12px; 8 | box-sizing:content-box; 9 | } 10 | 11 | .Wdate::-ms-clear{display:none;} 12 | 13 | .WdateFmtErr{ 14 | font-weight:bold; 15 | color:red; 16 | } -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/My97DatePicker/skin/datePicker.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/js/My97DatePicker/skin/datePicker.png -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/My97DatePicker/skin/default/img.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/js/My97DatePicker/skin/default/img.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/My97DatePicker/skin/whyGreen/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/js/My97DatePicker/skin/whyGreen/bg.jpg -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/My97DatePicker/skin/whyGreen/img.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/js/My97DatePicker/skin/whyGreen/img.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/bootstrap-select/bootstrap-select-lang.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap-select v1.12.2 (http://silviomoreto.github.io/bootstrap-select) 3 | * 4 | * Copyright 2013-2017 bootstrap-select 5 | * Licensed under MIT (https://github.com/silviomoreto/bootstrap-select/blob/master/LICENSE) 6 | */ 7 | 8 | (function (root, factory) { 9 | if (typeof define === 'function' && define.amd) { 10 | // AMD. Register as an anonymous module unless amdModuleId is set 11 | define(["jquery"], function (a0) { 12 | return (factory(a0)); 13 | }); 14 | } else if (typeof module === 'object' && module.exports) { 15 | // Node. Does not work with strict CommonJS, but 16 | // only CommonJS-like environments that support module.exports, 17 | // like Node. 18 | module.exports = factory(require("jquery")); 19 | } else { 20 | factory(root["jQuery"]); 21 | } 22 | }(this, function (jQuery) { 23 | 24 | (function ($) { 25 | $.fn.selectpicker.defaults = { 26 | noneSelectedText: '请选择执行器', 27 | noneResultsText: '没有找到匹配的执行器', 28 | countSelectedText: '选中{1}中的{0}项', 29 | maxOptionsText: ['超出限制 (最多选择{n}项)', '组选择超出限制(最多选择{n}组)'], 30 | multipleSeparator: ', ' 31 | }; 32 | })(jQuery); 33 | 34 | 35 | })); 36 | -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/fileinput/img/loading-sm.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/js/fileinput/img/loading-sm.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/fileinput/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/datavane/jobx/d758185e41887d91af72e2038072e273f196351a/jobx-server/src/main/webapp/static/js/fileinput/img/loading.gif -------------------------------------------------------------------------------- /jobx-server/src/main/webapp/static/js/fileinput/js/plugins/canvas-to-blob.min.js: -------------------------------------------------------------------------------- 1 | !function(a){"use strict";var b=a.HTMLCanvasElement&&a.HTMLCanvasElement.prototype,c=a.Blob&&function(){try{return Boolean(new Blob)}catch(a){return!1}}(),d=c&&a.Uint8Array&&function(){try{return 100===new Blob([new Uint8Array(100)]).size}catch(a){return!1}}(),e=a.BlobBuilder||a.WebKitBlobBuilder||a.MozBlobBuilder||a.MSBlobBuilder,f=(c||e)&&a.atob&&a.ArrayBuffer&&a.Uint8Array&&function(a){var b,f,g,h,i,j;for(b=a.split(",")[0].indexOf("base64")>=0?atob(a.split(",")[1]):decodeURIComponent(a.split(",")[1]),f=new ArrayBuffer(b.length),g=new Uint8Array(f),h=0;h