├── .github
├── ISSUE_TEMPLATE
│ ├── BUG_REPORT.md
│ └── FEATURE_REQUEST.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── bistoury-agent-common
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── agent
│ │ └── common
│ │ ├── ClosableProcess.java
│ │ ├── ClosableProcesses.java
│ │ ├── JavaProcesses.java
│ │ ├── JavaVersionUtils.java
│ │ ├── NormalProcess.java
│ │ ├── ResponseHandler.java
│ │ ├── UnixProcess.java
│ │ ├── config
│ │ └── AgentConfig.java
│ │ ├── cpujstack
│ │ ├── KvUtils.java
│ │ └── ThreadInfo.java
│ │ ├── job
│ │ ├── BytesJob.java
│ │ ├── ContinueResponseJob.java
│ │ ├── DefaultResponseJobStore.java
│ │ ├── ForwardContinueResponseJob.java
│ │ └── ResponseJobStore.java
│ │ ├── kv
│ │ ├── DataSourceHelper.java
│ │ ├── KvDb.java
│ │ ├── KvDbWrapper.java
│ │ ├── KvDbs.java
│ │ ├── RocksDBStoreImpl.java
│ │ ├── SQLiteDeleteDataGentle.java
│ │ └── SQLiteStoreImpl.java
│ │ ├── pid
│ │ ├── Jps.java
│ │ ├── PidHandler.java
│ │ ├── PidHandlerFactory.java
│ │ ├── PidUtils.java
│ │ ├── bean
│ │ │ ├── Arguments.java
│ │ │ ├── JpsInfo.java
│ │ │ ├── PsInfo.java
│ │ │ └── Res.java
│ │ └── impl
│ │ │ ├── AbstractPidHandler.java
│ │ │ ├── PidByJpsHandler.java
│ │ │ ├── PidByPsHandler.java
│ │ │ ├── PidBySystemPropertyHandler.java
│ │ │ └── Priority.java
│ │ ├── task
│ │ └── AgentGlobalTaskFactory.java
│ │ └── util
│ │ ├── DateUtils.java
│ │ └── Response.java
│ └── test
│ ├── java
│ └── qunar
│ │ └── tc
│ │ ├── bistoury
│ │ └── agent
│ │ │ └── common
│ │ │ └── job
│ │ │ └── TestJob.java
│ │ └── kv
│ │ └── KVStoreTest.java
│ └── resources
│ └── logback.xml
├── bistoury-agent-task
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── qunar
│ │ │ └── tc
│ │ │ └── bistoury
│ │ │ └── agent
│ │ │ └── task
│ │ │ ├── agentInfo
│ │ │ ├── AgentInfoPushTaskFactory.java
│ │ │ └── TaskRunner.java
│ │ │ ├── cpujstack
│ │ │ ├── CpuJStackTaskFactory.java
│ │ │ ├── JStackPidExecutor.java
│ │ │ ├── MomentCpuTimeRecordExecutor.java
│ │ │ ├── PidExecutor.java
│ │ │ ├── PidRecordExecutor.java
│ │ │ └── TaskRunner.java
│ │ │ ├── heapHisto
│ │ │ ├── HeapHistoDumpTaskFactory.java
│ │ │ └── TaskRunner.java
│ │ │ ├── monitor
│ │ │ ├── MonitorReportTaskFactory.java
│ │ │ └── TaskRunner.java
│ │ │ ├── proc
│ │ │ ├── CpuState.java
│ │ │ ├── FullState.java
│ │ │ ├── ProcUtil.java
│ │ │ ├── ProcessState.java
│ │ │ ├── ProcessStateCalculator.java
│ │ │ ├── StatParser.java
│ │ │ └── ThreadState.java
│ │ │ └── profiler
│ │ │ ├── ProfilerFileCleanTaskFactory.java
│ │ │ └── TaskRunner.java
│ └── resources
│ │ └── META-INF
│ │ └── services
│ │ └── qunar.tc.bistoury.agent.common.task.AgentGlobalTaskFactory
│ └── test
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── agent
│ └── task
│ ├── cpujstack
│ └── PidExecutorTest.java
│ └── proc
│ ├── InfoParserTest.java
│ ├── ProcessStateCalculatorTest.java
│ └── StatParserTest.java
├── bistoury-agent
├── pom.xml
└── src
│ └── main
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── agent
│ ├── AgentClient.java
│ ├── AgentGlobalTaskInitializer.java
│ ├── AgentInfoRefreshTask.java
│ ├── AgentNettyClient.java
│ ├── Configs.java
│ ├── DumpFileCleaner.java
│ ├── HeartbeatTask.java
│ └── ProxyConfig.java
├── bistoury-application
├── bistoury-application-api
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── application
│ │ └── api
│ │ ├── AdminAppService.java
│ │ ├── AppServerService.java
│ │ ├── AppService.java
│ │ ├── ApplicationService.java
│ │ └── pojo
│ │ ├── AppServer.java
│ │ ├── Application.java
│ │ └── PermissionDenyException.java
├── bistoury-application-k8s
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── application
│ │ └── k8s
│ │ ├── service
│ │ ├── AdminAppServiceImpl.java
│ │ ├── AppServerServiceImpl.java
│ │ ├── AppServiceImpl.java
│ │ └── ApplicationServiceImpl.java
│ │ └── util
│ │ └── K8SUtils.java
├── bistoury-application-mysql
│ ├── pom.xml
│ └── src
│ │ └── main
│ │ └── java
│ │ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── application
│ │ └── mysql
│ │ ├── dao
│ │ ├── AppServerDao.java
│ │ ├── ApplicationDao.java
│ │ ├── ApplicationUserDao.java
│ │ └── impl
│ │ │ ├── AppServerDaoImpl.java
│ │ │ ├── ApplicationDaoImpl.java
│ │ │ └── ApplicationUserDaoImpl.java
│ │ ├── service
│ │ ├── AdminAppServiceImpl.java
│ │ ├── AppServerServiceImpl.java
│ │ ├── AppServiceImpl.java
│ │ └── ApplicationServiceImpl.java
│ │ └── utils
│ │ └── UUIDUtil.java
└── pom.xml
├── bistoury-attach-arthas
├── pom.xml
└── src
│ └── main
│ ├── java
│ ├── com
│ │ └── taobao
│ │ │ └── arthas
│ │ │ └── core
│ │ │ └── shell
│ │ │ └── system
│ │ │ └── impl
│ │ │ ├── QGlobalJobControllerImpl.java
│ │ │ ├── QJobControllerImpl.java
│ │ │ └── QProcessImpl.java
│ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── attach
│ │ └── arthas
│ │ ├── agentInfo
│ │ └── AgentInfoCommand.java
│ │ ├── config
│ │ ├── AppConfigClient.java
│ │ ├── AppConfigClients.java
│ │ ├── AppConfigCommand.java
│ │ └── AppConfigFileCommand.java
│ │ ├── debug
│ │ ├── ClassInfo.java
│ │ ├── DebugJsonWriter.java
│ │ ├── DebugNullKeySerializer.java
│ │ ├── DefaultSnapshotStore.java
│ │ ├── JarDebugClient.java
│ │ ├── JarDebugClients.java
│ │ ├── JarDebugCommand.java
│ │ ├── JarDebugPathCommand.java
│ │ ├── QDebugAddCommand.java
│ │ ├── QDebugClient.java
│ │ ├── QDebugClients.java
│ │ ├── QDebugReleaseInfoCommand.java
│ │ ├── QDebugRemoveCommand.java
│ │ ├── QDebugSearchCommand.java
│ │ ├── RemoveListener.java
│ │ ├── SizeLimitExceededException.java
│ │ ├── SizeLimitedOutputStream.java
│ │ ├── SnapshotCache.java
│ │ └── SnapshotStore.java
│ │ ├── instrument
│ │ ├── DefaultClassFileBuffer.java
│ │ ├── InstrumentClient.java
│ │ └── InstrumentClientStore.java
│ │ ├── jar
│ │ ├── JarInfoClient.java
│ │ ├── JarInfoClients.java
│ │ └── JarInfoCommand.java
│ │ ├── monitor
│ │ ├── QMonitorAddCommand.java
│ │ ├── QMonitorClient.java
│ │ ├── QMonitorClients.java
│ │ └── QMonitorSnapshotCommand.java
│ │ ├── profiler
│ │ ├── GProfilerClient.java
│ │ ├── GProfilerClients.java
│ │ ├── ProfilerInfoCommand.java
│ │ ├── ProfilerStartCommand.java
│ │ ├── ProfilerStateSearchCommand.java
│ │ └── ProfilerStopCommand.java
│ │ ├── server
│ │ ├── BistouryBootstrap.java
│ │ ├── QBuiltinCommandPack.java
│ │ ├── QShutdownCommand.java
│ │ ├── QStopCommand.java
│ │ └── ShellServerImpl.java
│ │ └── util
│ │ ├── AgentConfig.java
│ │ └── TypeResponseResult.java
│ └── test
│ └── qunar
│ └── tc
│ └── bistory
│ ├── BitTest.java
│ ├── JarJarFileRead.java
│ ├── QmonitorTest.java
│ └── Test.java
├── bistoury-attach-common
├── pom.xml
└── src
│ └── main
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── attach
│ ├── common
│ ├── AttachJacksonSerializer.java
│ ├── BistouryLoggerHelper.java
│ └── BistouryLoggger.java
│ └── file
│ ├── AbstractFileService.java
│ ├── FileOperateFactory.java
│ ├── FileService.java
│ ├── JarStorePathUtil.java
│ ├── URLUtil.java
│ ├── bean
│ └── FileBean.java
│ └── impl
│ ├── DefaultFileServiceImpl.java
│ ├── JarFileServiceImpl.java
│ └── JarFileServiceWrapper.java
├── bistoury-clientside-common
├── pom.xml
└── src
│ └── main
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── clientside
│ └── common
│ ├── meta
│ ├── DefaultMetaStore.java
│ ├── MetaStore.java
│ ├── MetaStores.java
│ └── Numbers.java
│ ├── monitor
│ ├── MetricType.java
│ ├── MetricsData.java
│ ├── MetricsSnapshot.java
│ └── ValueType.java
│ └── store
│ └── BistouryStore.java
├── bistoury-commands
├── pom.xml
└── src
│ ├── main
│ ├── java
│ │ └── qunar
│ │ │ └── tc
│ │ │ └── bistoury
│ │ │ └── commands
│ │ │ ├── CustomScript.java
│ │ │ ├── HeartbeatProcessor.java
│ │ │ ├── JdkProcessCmdTaskFactory.java
│ │ │ ├── MetaRefreshProcessor.java
│ │ │ ├── MetaRefreshTipProcessor.java
│ │ │ ├── ProcessorUtils.java
│ │ │ ├── SystemTask.java
│ │ │ ├── arthas
│ │ │ ├── ArthasEntity.java
│ │ │ ├── ArthasStarter.java
│ │ │ ├── ArthasTask.java
│ │ │ ├── ArthasTaskFactory.java
│ │ │ ├── TelnetConstants.java
│ │ │ └── telnet
│ │ │ │ ├── AbstractTelnet.java
│ │ │ │ ├── AbstractTelnetStore.java
│ │ │ │ ├── CommunicateUtil.java
│ │ │ │ ├── CompositeBytes.java
│ │ │ │ ├── IllegalVersionException.java
│ │ │ │ ├── NormalTelnet.java
│ │ │ │ ├── NormalTelnetStore.java
│ │ │ │ ├── PromptBufData.java
│ │ │ │ ├── PromptProcessor.java
│ │ │ │ ├── ResultProcessor.java
│ │ │ │ ├── SkipFirstLineProcessor.java
│ │ │ │ ├── Telnet.java
│ │ │ │ ├── TelnetStore.java
│ │ │ │ ├── UrlDecodeProcessor.java
│ │ │ │ ├── UrlEncodedTelnet.java
│ │ │ │ ├── UrlEncodedTelnetStore.java
│ │ │ │ └── Writer.java
│ │ │ ├── cpujstack
│ │ │ ├── CpuTimeTask.java
│ │ │ ├── CpuTimeTaskFactory.java
│ │ │ ├── ThreadInfoTask.java
│ │ │ ├── ThreadInfoTaskFactory.java
│ │ │ ├── ThreadNumTask.java
│ │ │ └── ThreadNumTaskFactory.java
│ │ │ ├── decompiler
│ │ │ ├── Decompiler.java
│ │ │ ├── DecompilerTask.java
│ │ │ ├── DecompilerTaskFactory.java
│ │ │ ├── IBytecodeProviderImpl.java
│ │ │ └── IResultSaverImpl.java
│ │ │ ├── download
│ │ │ ├── DownloadFileBean.java
│ │ │ ├── DownloadFileListTask.java
│ │ │ ├── DownloadFileListTaskFactory.java
│ │ │ ├── DownloadFileTask.java
│ │ │ └── DownloadFileTaskFactory.java
│ │ │ ├── heapHisto
│ │ │ ├── HeapHistoBeanHandle.java
│ │ │ ├── HeapHistoStore.java
│ │ │ ├── HeapHistoTask.java
│ │ │ ├── HeapHistoTaskFactory.java
│ │ │ └── HistogramBean.java
│ │ │ ├── host
│ │ │ ├── HostInfo.java
│ │ │ ├── HostTask.java
│ │ │ ├── HostTaskFactory.java
│ │ │ ├── ThreadInfoTask.java
│ │ │ ├── ThreadInfoTaskFactory.java
│ │ │ ├── VMSnapshotBean.java
│ │ │ ├── VMSummaryInfo.java
│ │ │ └── VirtualMachineUtil.java
│ │ │ ├── monitor
│ │ │ ├── QMonitorQueryTask.java
│ │ │ ├── QMonitorQueryTaskFactory.java
│ │ │ └── QMonitorStore.java
│ │ │ ├── perf
│ │ │ └── PerfData.java
│ │ │ ├── profiler
│ │ │ ├── ProfilerFileForProxyTask.java
│ │ │ └── ProfilerFileForProxyTaskFactory.java
│ │ │ └── qjtools
│ │ │ └── util
│ │ │ └── ReflectUtil.java
│ └── resources
│ │ └── META-INF
│ │ └── services
│ │ └── qunar.tc.bistoury.remoting.netty.TaskFactory
│ └── test
│ └── java
│ ├── VMTest.java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── commands
│ ├── CPULoadAverages.java
│ ├── ConsoleResponseHandler.java
│ ├── CustomScriptTest.java
│ ├── GZFile.java
│ ├── JVMTest.java
│ ├── MemDisk.java
│ ├── StringFormatTest.java
│ ├── ThreadDumpTest.java
│ ├── arthas
│ └── telnet
│ │ └── TestCompositeBytes.java
│ └── decompiler
│ └── DecompilerTest.java
├── bistoury-common
├── pom.xml
└── src
│ └── main
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── common
│ ├── AESCryptUtils.java
│ ├── AsyncHttpClientHolder.java
│ ├── Base64.java
│ ├── BistouryConstants.java
│ ├── CharsetUtils.java
│ ├── CodeProcessResponse.java
│ ├── DateUtil.java
│ ├── FileUtil.java
│ ├── JacksonSerializer.java
│ ├── JsonResult.java
│ ├── NamedThreadFactory.java
│ ├── OsUtils.java
│ ├── ProfilerUtil.java
│ ├── Snapshot.java
│ ├── Status.java
│ ├── Throwables.java
│ ├── TypeResponse.java
│ ├── URLCoder.java
│ ├── VersionUtil.java
│ └── profiler
│ ├── compact
│ ├── CompactClassHelper.java
│ ├── Trie.java
│ └── TrieNode.java
│ └── method
│ ├── FunctionInfo.java
│ ├── MethodCache.java
│ └── MethodInfo.java
├── bistoury-decompiler-fernflower
├── README.md
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── qunar
│ │ └── tc
│ │ └── decompiler
│ │ ├── code
│ │ ├── CodeConstants.java
│ │ ├── ExceptionHandler.java
│ │ ├── ExceptionTable.java
│ │ ├── FullInstructionSequence.java
│ │ ├── Instruction.java
│ │ ├── InstructionSequence.java
│ │ ├── JumpInstruction.java
│ │ ├── SimpleInstructionSequence.java
│ │ ├── SwitchInstruction.java
│ │ ├── cfg
│ │ │ ├── BasicBlock.java
│ │ │ ├── ControlFlowGraph.java
│ │ │ └── ExceptionRangeCFG.java
│ │ └── interpreter
│ │ │ └── InstructionImpact.java
│ │ ├── jdk827
│ │ ├── List827.java
│ │ ├── Map827.java
│ │ └── Set827.java
│ │ ├── main
│ │ ├── AssertProcessor.java
│ │ ├── ClassReference14Processor.java
│ │ ├── ClassWriter.java
│ │ ├── ClassesProcessor.java
│ │ ├── DecompilerContext.java
│ │ ├── EnumProcessor.java
│ │ ├── Fernflower.java
│ │ ├── InitializerProcessor.java
│ │ ├── collectors
│ │ │ ├── BytecodeMappingTracer.java
│ │ │ ├── BytecodeSourceMapper.java
│ │ │ ├── CounterContainer.java
│ │ │ ├── ImportCollector.java
│ │ │ └── VarNamesCollector.java
│ │ ├── decompiler
│ │ │ ├── BaseDecompiler.java
│ │ │ ├── ConsoleDecompiler.java
│ │ │ └── PrintStreamLogger.java
│ │ ├── extern
│ │ │ ├── IBytecodeProvider.java
│ │ │ ├── IFernflowerLogger.java
│ │ │ ├── IFernflowerPreferences.java
│ │ │ ├── IIdentifierRenamer.java
│ │ │ └── IResultSaver.java
│ │ └── rels
│ │ │ ├── ClassWrapper.java
│ │ │ ├── LambdaProcessor.java
│ │ │ ├── MethodProcessorRunnable.java
│ │ │ ├── MethodWrapper.java
│ │ │ ├── NestedClassProcessor.java
│ │ │ └── NestedMemberAccess.java
│ │ ├── modules
│ │ ├── code
│ │ │ └── DeadCodeHelper.java
│ │ ├── decompiler
│ │ │ ├── ClasspathHelper.java
│ │ │ ├── ClearStructHelper.java
│ │ │ ├── ConcatenationHelper.java
│ │ │ ├── DecHelper.java
│ │ │ ├── DomHelper.java
│ │ │ ├── ExitHelper.java
│ │ │ ├── ExprProcessor.java
│ │ │ ├── ExprentStack.java
│ │ │ ├── FinallyProcessor.java
│ │ │ ├── IdeaNotNullHelper.java
│ │ │ ├── IfHelper.java
│ │ │ ├── InlineSingleBlockHelper.java
│ │ │ ├── LabelHelper.java
│ │ │ ├── LoopExtractHelper.java
│ │ │ ├── MergeHelper.java
│ │ │ ├── PPandMMHelper.java
│ │ │ ├── PrimitiveExprsList.java
│ │ │ ├── SecondaryFunctionsHelper.java
│ │ │ ├── SequenceHelper.java
│ │ │ ├── SimplifyExprentsHelper.java
│ │ │ ├── StackVarsProcessor.java
│ │ │ ├── StatEdge.java
│ │ │ ├── StrongConnectivityHelper.java
│ │ │ ├── SwitchHelper.java
│ │ │ ├── decompose
│ │ │ │ ├── DominatorEngine.java
│ │ │ │ ├── DominatorTreeExceptionFilter.java
│ │ │ │ ├── FastExtendedPostdominanceHelper.java
│ │ │ │ ├── GenericDominatorEngine.java
│ │ │ │ ├── IGraph.java
│ │ │ │ └── IGraphNode.java
│ │ │ ├── deobfuscator
│ │ │ │ ├── ExceptionDeobfuscator.java
│ │ │ │ └── IrreducibleCFGDeobfuscator.java
│ │ │ ├── exps
│ │ │ │ ├── AnnotationExprent.java
│ │ │ │ ├── ArrayExprent.java
│ │ │ │ ├── AssertExprent.java
│ │ │ │ ├── AssignmentExprent.java
│ │ │ │ ├── ConstExprent.java
│ │ │ │ ├── ExitExprent.java
│ │ │ │ ├── ExprUtil.java
│ │ │ │ ├── Exprent.java
│ │ │ │ ├── FieldExprent.java
│ │ │ │ ├── FunctionExprent.java
│ │ │ │ ├── IfExprent.java
│ │ │ │ ├── InvocationExprent.java
│ │ │ │ ├── MonitorExprent.java
│ │ │ │ ├── NewExprent.java
│ │ │ │ ├── SwitchExprent.java
│ │ │ │ ├── TypeAnnotation.java
│ │ │ │ └── VarExprent.java
│ │ │ ├── sforms
│ │ │ │ ├── DirectGraph.java
│ │ │ │ ├── DirectNode.java
│ │ │ │ ├── FlattenStatementsHelper.java
│ │ │ │ ├── SSAConstructorSparseEx.java
│ │ │ │ └── SSAUConstructorSparseEx.java
│ │ │ ├── stats
│ │ │ │ ├── BasicBlockStatement.java
│ │ │ │ ├── CatchAllStatement.java
│ │ │ │ ├── CatchStatement.java
│ │ │ │ ├── DoStatement.java
│ │ │ │ ├── DummyExitStatement.java
│ │ │ │ ├── GeneralStatement.java
│ │ │ │ ├── IfStatement.java
│ │ │ │ ├── RootStatement.java
│ │ │ │ ├── SequenceStatement.java
│ │ │ │ ├── Statement.java
│ │ │ │ ├── Statements.java
│ │ │ │ ├── SwitchStatement.java
│ │ │ │ └── SynchronizedStatement.java
│ │ │ └── vars
│ │ │ │ ├── CheckTypesResult.java
│ │ │ │ ├── VarDefinitionHelper.java
│ │ │ │ ├── VarProcessor.java
│ │ │ │ ├── VarTypeProcessor.java
│ │ │ │ ├── VarVersionEdge.java
│ │ │ │ ├── VarVersionNode.java
│ │ │ │ ├── VarVersionPair.java
│ │ │ │ ├── VarVersionsGraph.java
│ │ │ │ └── VarVersionsProcessor.java
│ │ └── renamer
│ │ │ ├── ClassWrapperNode.java
│ │ │ ├── ConverterHelper.java
│ │ │ ├── IdentifierConverter.java
│ │ │ └── PoolInterceptor.java
│ │ ├── struct
│ │ ├── ContextUnit.java
│ │ ├── IDecompiledData.java
│ │ ├── StructClass.java
│ │ ├── StructContext.java
│ │ ├── StructField.java
│ │ ├── StructMember.java
│ │ ├── StructMethod.java
│ │ ├── attr
│ │ │ ├── StructAnnDefaultAttribute.java
│ │ │ ├── StructAnnotationAttribute.java
│ │ │ ├── StructAnnotationParameterAttribute.java
│ │ │ ├── StructBootstrapMethodsAttribute.java
│ │ │ ├── StructConstantValueAttribute.java
│ │ │ ├── StructEnclosingMethodAttribute.java
│ │ │ ├── StructExceptionsAttribute.java
│ │ │ ├── StructGeneralAttribute.java
│ │ │ ├── StructGenericSignatureAttribute.java
│ │ │ ├── StructInnerClassesAttribute.java
│ │ │ ├── StructLineNumberTableAttribute.java
│ │ │ ├── StructLocalVariableTableAttribute.java
│ │ │ ├── StructLocalVariableTypeTableAttribute.java
│ │ │ ├── StructMethodParametersAttribute.java
│ │ │ └── StructTypeAnnotationAttribute.java
│ │ ├── consts
│ │ │ ├── ConstantPool.java
│ │ │ ├── LinkConstant.java
│ │ │ ├── PooledConstant.java
│ │ │ └── PrimitiveConstant.java
│ │ ├── gen
│ │ │ ├── DataPoint.java
│ │ │ ├── FieldDescriptor.java
│ │ │ ├── MethodDescriptor.java
│ │ │ ├── NewClassNameBuilder.java
│ │ │ ├── VarType.java
│ │ │ └── generics
│ │ │ │ ├── GenericClassDescriptor.java
│ │ │ │ ├── GenericFieldDescriptor.java
│ │ │ │ ├── GenericMain.java
│ │ │ │ ├── GenericMethodDescriptor.java
│ │ │ │ └── GenericType.java
│ │ ├── lazy
│ │ │ └── LazyLoader.java
│ │ └── match
│ │ │ ├── IMatchable.java
│ │ │ ├── MatchEngine.java
│ │ │ └── MatchNode.java
│ │ └── util
│ │ ├── DataInputFullStream.java
│ │ ├── FastFixedSetFactory.java
│ │ ├── FastSparseSetFactory.java
│ │ ├── InterpreterUtil.java
│ │ ├── ListStack.java
│ │ ├── SFormsFastMapDirect.java
│ │ ├── TextBuffer.java
│ │ ├── TextUtil.java
│ │ └── VBStyleCollection.java
│ └── test
│ └── java
│ └── qunar
│ └── tc
│ └── decompiler
│ └── ClassTest.java
├── bistoury-dist
├── assembly
│ └── assembly-agent.xml
├── bin
│ ├── async-profiler
│ │ ├── async-profiler-1.6-linux-x64.so
│ │ └── async-profiler-1.6-macos-x64.so
│ ├── base.sh
│ ├── bistoury-agent-env.sh
│ ├── bistoury-agent.sh
│ ├── inputrc
│ ├── qjdump.sh
│ ├── qjmap.sh
│ ├── qjmxcli.sh
│ ├── qjtool-base.sh
│ └── qjtop.sh
└── pom.xml
├── bistoury-independent-agent
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── indpendent
│ │ └── agent
│ │ └── Main.java
│ └── resources
│ └── logback.xml
├── bistoury-instrument-agent
├── pom.xml
└── src
│ └── main
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── instrument
│ └── agent
│ ├── AgentBootstrap2.java
│ └── BistouryClassloader.java
├── bistoury-instrument-client
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── instrument
│ │ └── client
│ │ ├── classpath
│ │ ├── AppClassPathSupplier.java
│ │ ├── AppClassPathSupplierFactory.java
│ │ ├── AppLibClassSupplier.java
│ │ ├── DefaultAppClassPathSupplier.java
│ │ ├── DefaultAppLibClassSupplier.java
│ │ ├── SettableAppClassPathSupplier.java
│ │ └── WebAppClassPathSupplier.java
│ │ ├── common
│ │ ├── Access.java
│ │ ├── ClassFileBuffer.java
│ │ └── InstrumentInfo.java
│ │ ├── debugger
│ │ ├── AddBreakpointResult.java
│ │ ├── Breakpoint.java
│ │ ├── BreakpointConditionDTO.java
│ │ ├── ClassField.java
│ │ ├── ClassMetadata.java
│ │ ├── Debugger.java
│ │ ├── DebuggerClassFileTransformer.java
│ │ ├── DebuggerClassVisitor.java
│ │ ├── DebuggerMethodVisitor.java
│ │ ├── DefaultDebugger.java
│ │ ├── GlobalDebugContext.java
│ │ ├── LocalVariable.java
│ │ ├── MetadataCollector.java
│ │ ├── MethodWhiteListChecker.java
│ │ ├── SnapshotCapture.java
│ │ ├── SnapshotReceiver.java
│ │ └── Transformer.java
│ │ ├── location
│ │ ├── ClassPathLookup.java
│ │ ├── ClassResourcesIndexer.java
│ │ ├── FormatMessage.java
│ │ ├── Location.java
│ │ ├── Messages.java
│ │ ├── MethodsFilter.java
│ │ ├── ResolvedSourceLocation.java
│ │ ├── ResourceIndexer.java
│ │ ├── ResourcesDatabase.java
│ │ ├── SourceFileMapper.java
│ │ └── UniquifierComputer.java
│ │ ├── metrics
│ │ ├── AbstractProcessorMetricsReportor.java
│ │ ├── Counter.java
│ │ ├── Delta.java
│ │ ├── DeltaCounter.java
│ │ ├── DeltaKeyWrapper.java
│ │ ├── Item.java
│ │ ├── ItemValue.java
│ │ ├── KeyWrapper.java
│ │ ├── MetricKey.java
│ │ ├── Metrics.java
│ │ ├── MetricsReportor.java
│ │ ├── QMonitorMetricsReportor.java
│ │ ├── Timer.java
│ │ └── adapter
│ │ │ ├── CounterAdapter.java
│ │ │ ├── ResettableTimer.java
│ │ │ ├── ResettableTimerAdapter.java
│ │ │ └── StatsBuffer.java
│ │ ├── monitor
│ │ ├── AgentGenerated.java
│ │ ├── AgentMonitor.java
│ │ ├── DefaultMonitor.java
│ │ ├── GlobalMonitorContext.java
│ │ ├── Matcher.java
│ │ ├── Monitor.java
│ │ ├── MonitorClassFileTransformer.java
│ │ ├── MonitorClassVisitor.java
│ │ └── MonitorMethodVisitor.java
│ │ ├── profiler
│ │ ├── AgentProfilerContext.java
│ │ ├── Mode.java
│ │ ├── Profiler.java
│ │ ├── ProfilerConstants.java
│ │ ├── ProfilerContext.java
│ │ ├── ProfilerInfo.java
│ │ ├── ProfilerManager.java
│ │ ├── ProfilerStore.java
│ │ ├── Profilers.java
│ │ ├── async
│ │ │ ├── AsyncProfilerContext.java
│ │ │ ├── AsyncProfilerStore.java
│ │ │ ├── Manager.java
│ │ │ └── ProfilerCommand.java
│ │ └── sync
│ │ │ ├── Manager.java
│ │ │ ├── SamplingProfiler.java
│ │ │ ├── runtime
│ │ │ ├── ProfilerData.java
│ │ │ ├── ProfilerDataDumper.java
│ │ │ ├── ProfilerDataRecorder.java
│ │ │ └── cpu
│ │ │ │ ├── DumpData.java
│ │ │ │ └── ThreadCpuInfo.java
│ │ │ └── task
│ │ │ ├── DumpTask.java
│ │ │ ├── ProfilerTask.java
│ │ │ └── Task.java
│ │ ├── spring
│ │ └── el
│ │ │ ├── AbstractDescriptor.java
│ │ │ ├── AccessException.java
│ │ │ ├── ArrayToArrayConverter.java
│ │ │ ├── ArrayToCollectionConverter.java
│ │ │ ├── ArrayToObjectConverter.java
│ │ │ ├── ArrayToStringConverter.java
│ │ │ ├── Assert.java
│ │ │ ├── AstUtils.java
│ │ │ ├── BeanPropertyDescriptor.java
│ │ │ ├── BeanReference.java
│ │ │ ├── BeanResolver.java
│ │ │ ├── BooleanLiteral.java
│ │ │ ├── BooleanTypedValue.java
│ │ │ ├── BridgeMethodResolver.java
│ │ │ ├── CharacterToNumberFactory.java
│ │ │ ├── ClassDescriptor.java
│ │ │ ├── ClassUtils.java
│ │ │ ├── CodeFlow.java
│ │ │ ├── CollectionFactory.java
│ │ │ ├── CollectionToArrayConverter.java
│ │ │ ├── CollectionToCollectionConverter.java
│ │ │ ├── CollectionToObjectConverter.java
│ │ │ ├── CollectionToStringConverter.java
│ │ │ ├── CollectionUtils.java
│ │ │ ├── CompilablePropertyAccessor.java
│ │ │ ├── CompiledExpression.java
│ │ │ ├── CompositeStringExpression.java
│ │ │ ├── CompoundExpression.java
│ │ │ ├── ConcurrentReferenceHashMap.java
│ │ │ ├── ConditionalConverter.java
│ │ │ ├── ConditionalGenericConverter.java
│ │ │ ├── ConfigurableConversionService.java
│ │ │ ├── ConstructorExecutor.java
│ │ │ ├── ConstructorResolver.java
│ │ │ ├── ConversionException.java
│ │ │ ├── ConversionFailedException.java
│ │ │ ├── ConversionService.java
│ │ │ ├── ConversionUtils.java
│ │ │ ├── Converter.java
│ │ │ ├── ConverterFactory.java
│ │ │ ├── ConverterNotFoundException.java
│ │ │ ├── ConverterRegistry.java
│ │ │ ├── DefaultConversionService.java
│ │ │ ├── Elvis.java
│ │ │ ├── EnumToStringConverter.java
│ │ │ ├── EvaluationContext.java
│ │ │ ├── EvaluationException.java
│ │ │ ├── Expression.java
│ │ │ ├── ExpressionException.java
│ │ │ ├── ExpressionInvocationTargetException.java
│ │ │ ├── ExpressionParser.java
│ │ │ ├── ExpressionState.java
│ │ │ ├── ExpressionUtils.java
│ │ │ ├── FallbackObjectToStringConverter.java
│ │ │ ├── FieldDescriptor.java
│ │ │ ├── FloatLiteral.java
│ │ │ ├── FormatHelper.java
│ │ │ ├── FunctionReference.java
│ │ │ ├── GenericCollectionTypeResolver.java
│ │ │ ├── GenericConversionService.java
│ │ │ ├── GenericConverter.java
│ │ │ ├── GenericTypeResolver.java
│ │ │ ├── IdToEntityConverter.java
│ │ │ ├── Identifier.java
│ │ │ ├── Indexer.java
│ │ │ ├── InlineList.java
│ │ │ ├── InlineMap.java
│ │ │ ├── IntLiteral.java
│ │ │ ├── InternalParseException.java
│ │ │ ├── InternalSpelExpressionParser.java
│ │ │ ├── LinkedCaseInsensitiveMap.java
│ │ │ ├── LinkedMultiValueMap.java
│ │ │ ├── Literal.java
│ │ │ ├── LiteralExpression.java
│ │ │ ├── LongLiteral.java
│ │ │ ├── MapToMapConverter.java
│ │ │ ├── MethodExecutor.java
│ │ │ ├── MethodFilter.java
│ │ │ ├── MethodParameter.java
│ │ │ ├── MethodReference.java
│ │ │ ├── MethodResolver.java
│ │ │ ├── MultiValueMap.java
│ │ │ ├── NestedExceptionUtils.java
│ │ │ ├── NestedRuntimeException.java
│ │ │ ├── NullLiteral.java
│ │ │ ├── NumberToCharacterConverter.java
│ │ │ ├── NumberToNumberConverterFactory.java
│ │ │ ├── NumberUtils.java
│ │ │ ├── ObjectToArrayConverter.java
│ │ │ ├── ObjectToCollectionConverter.java
│ │ │ ├── ObjectToObjectConverter.java
│ │ │ ├── ObjectToStringConverter.java
│ │ │ ├── ObjectUtils.java
│ │ │ ├── OpAnd.java
│ │ │ ├── OpDec.java
│ │ │ ├── OpDivide.java
│ │ │ ├── OpEQ.java
│ │ │ ├── OpGE.java
│ │ │ ├── OpGT.java
│ │ │ ├── OpInc.java
│ │ │ ├── OpLE.java
│ │ │ ├── OpLT.java
│ │ │ ├── OpMinus.java
│ │ │ ├── OpModulus.java
│ │ │ ├── OpMultiply.java
│ │ │ ├── OpNE.java
│ │ │ ├── OpOr.java
│ │ │ ├── OpPlus.java
│ │ │ ├── Operation.java
│ │ │ ├── Operator.java
│ │ │ ├── OperatorBetween.java
│ │ │ ├── OperatorInstanceof.java
│ │ │ ├── OperatorMatches.java
│ │ │ ├── OperatorNot.java
│ │ │ ├── OperatorOverloader.java
│ │ │ ├── OperatorPower.java
│ │ │ ├── ParameterDescriptor.java
│ │ │ ├── ParameterNameDiscoverer.java
│ │ │ ├── ParseException.java
│ │ │ ├── ParserContext.java
│ │ │ ├── Projection.java
│ │ │ ├── PropertiesToStringConverter.java
│ │ │ ├── Property.java
│ │ │ ├── PropertyAccessor.java
│ │ │ ├── PropertyOrFieldReference.java
│ │ │ ├── QualifiedIdentifier.java
│ │ │ ├── RealLiteral.java
│ │ │ ├── ReflectionHelper.java
│ │ │ ├── ReflectionUtils.java
│ │ │ ├── ReflectiveConstructorExecutor.java
│ │ │ ├── ReflectiveConstructorResolver.java
│ │ │ ├── ReflectiveMethodExecutor.java
│ │ │ ├── ReflectiveMethodResolver.java
│ │ │ ├── ReflectivePropertyAccessor.java
│ │ │ ├── Selection.java
│ │ │ ├── SpelCompiler.java
│ │ │ ├── SpelCompilerMode.java
│ │ │ ├── SpelEvaluationException.java
│ │ │ ├── SpelExpression.java
│ │ │ ├── SpelExpressionParser.java
│ │ │ ├── SpelMessage.java
│ │ │ ├── SpelNode.java
│ │ │ ├── SpelNodeImpl.java
│ │ │ ├── SpelParseException.java
│ │ │ ├── SpelParserConfiguration.java
│ │ │ ├── SpringProperties.java
│ │ │ ├── StandardEvaluationContext.java
│ │ │ ├── StandardOperatorOverloader.java
│ │ │ ├── StandardTypeComparator.java
│ │ │ ├── StandardTypeConverter.java
│ │ │ ├── StandardTypeLocator.java
│ │ │ ├── StringLiteral.java
│ │ │ ├── StringToArrayConverter.java
│ │ │ ├── StringToBooleanConverter.java
│ │ │ ├── StringToCharacterConverter.java
│ │ │ ├── StringToCollectionConverter.java
│ │ │ ├── StringToEnumConverterFactory.java
│ │ │ ├── StringToLocaleConverter.java
│ │ │ ├── StringToNumberConverterFactory.java
│ │ │ ├── StringToPropertiesConverter.java
│ │ │ ├── StringToUUIDConverter.java
│ │ │ ├── StringUtils.java
│ │ │ ├── TemplateAwareExpressionParser.java
│ │ │ ├── Ternary.java
│ │ │ ├── Token.java
│ │ │ ├── TokenKind.java
│ │ │ ├── Tokenizer.java
│ │ │ ├── TypeCode.java
│ │ │ ├── TypeComparator.java
│ │ │ ├── TypeConverter.java
│ │ │ ├── TypeDescriptor.java
│ │ │ ├── TypeLocator.java
│ │ │ ├── TypeReference.java
│ │ │ ├── TypedValue.java
│ │ │ ├── ValueRef.java
│ │ │ └── VariableReference.java
│ │ └── util
│ │ └── DescDeal.java
│ └── test
│ └── java
│ └── qunar
│ └── tc
│ └── test
│ ├── ASMTest.java
│ ├── ExceptionTest.java
│ ├── MethodVistorTest.java
│ ├── MonitorAdviceAdapter.java
│ ├── MonitorTest.java
│ └── Test.java
├── bistoury-instrument-spy
├── pom.xml
└── src
│ └── main
│ └── java
│ ├── one
│ └── profiler
│ │ ├── AsyncProfiler.java
│ │ ├── AsyncProfilerMXBean.java
│ │ ├── Counter.java
│ │ ├── Events.java
│ │ └── package-info.java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── instrument
│ └── spy
│ └── BistourySpys1.java
├── bistoury-magic-classes
├── pom.xml
└── src
│ └── main
│ └── java
│ ├── com
│ ├── fasterxml
│ │ └── jackson
│ │ │ └── databind
│ │ │ └── ser
│ │ │ └── BeanSerializerFactory.java
│ └── taobao
│ │ └── arthas
│ │ └── core
│ │ ├── advisor
│ │ └── Enhancer.java
│ │ └── shell
│ │ └── term
│ │ └── impl
│ │ └── Helper.java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── magic
│ └── classes
│ ├── MagicClasses.java
│ └── MagicUtils.java
├── bistoury-magic-loader
├── pom.xml
└── src
│ └── main
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── magic
│ └── loader
│ └── MagicClassLoader.java
├── bistoury-metrics-prometheus
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── metrics
│ │ └── prometheus
│ │ ├── PrometheusBistouryCounter.java
│ │ ├── PrometheusBistouryGauge.java
│ │ ├── PrometheusBistouryMeter.java
│ │ ├── PrometheusBistouryMetricRegistry.java
│ │ └── PrometheusBistouryTimer.java
│ └── resources
│ └── META-INF
│ └── services
│ └── qunar.tc.bistoury.serverside.metrics.BistouryMetricRegistry
├── bistoury-proxy
├── conf
│ ├── agent_config.properties
│ ├── agent_config_override.properties
│ ├── download_dir_limit.properties
│ ├── global.properties
│ ├── jdbc.properties
│ ├── profiler.properties
│ ├── prometheus.properties
│ ├── registry.properties
│ ├── releaseInfo_config.properties
│ └── server.properties
├── pom.xml
└── src
│ ├── assembly
│ └── assembly-proxy.xml
│ ├── bin
│ ├── base.sh
│ ├── bistoury-proxy-env.sh
│ └── bistoury-proxy.sh
│ ├── main
│ ├── java
│ │ └── qunar
│ │ │ └── tc
│ │ │ └── bistoury
│ │ │ └── proxy
│ │ │ ├── communicate
│ │ │ ├── AbstractConnection.java
│ │ │ ├── Connection.java
│ │ │ ├── DefaultSession.java
│ │ │ ├── DefaultSessionManager.java
│ │ │ ├── MessageProcessor.java
│ │ │ ├── NettyServer.java
│ │ │ ├── Session.java
│ │ │ ├── SessionManager.java
│ │ │ ├── WritableListener.java
│ │ │ ├── WriteResult.java
│ │ │ ├── agent
│ │ │ │ ├── AgentConnection.java
│ │ │ │ ├── AgentConnectionStore.java
│ │ │ │ ├── DefaultAgentConnection.java
│ │ │ │ ├── DefaultAgentConnectionStore.java
│ │ │ │ ├── NettyServerForAgent.java
│ │ │ │ └── handler
│ │ │ │ │ ├── AgentInfoRefreshProcessor.java
│ │ │ │ │ ├── AgentMessageHandler.java
│ │ │ │ │ ├── AgentMessageProcessor.java
│ │ │ │ │ ├── AgentProfilerFileProcessor.java
│ │ │ │ │ ├── AgentResponseProcessor.java
│ │ │ │ │ └── ProxyHeartbeatProcessor.java
│ │ │ ├── handle
│ │ │ │ ├── ChannelCloseHandler.java
│ │ │ │ └── ConnectionCounterHandler.java
│ │ │ └── ui
│ │ │ │ ├── DefaultUiConnection.java
│ │ │ │ ├── DefaultUiConnectionStore.java
│ │ │ │ ├── NettyServerForUi.java
│ │ │ │ ├── UiConnection.java
│ │ │ │ ├── UiConnectionStore.java
│ │ │ │ ├── UiResponses.java
│ │ │ │ ├── command
│ │ │ │ ├── CommunicateCommand.java
│ │ │ │ ├── CommunicateCommandStore.java
│ │ │ │ ├── DefaultCommunicateCommandStore.java
│ │ │ │ └── UiRequestCommand.java
│ │ │ │ ├── handler
│ │ │ │ ├── HostsValidatorHandler.java
│ │ │ │ ├── RequestDecoder.java
│ │ │ │ ├── TabHandler.java
│ │ │ │ ├── UiRequestHandler.java
│ │ │ │ ├── WebSocketEncoder.java
│ │ │ │ └── commandprocessor
│ │ │ │ │ ├── AbstractCommand.java
│ │ │ │ │ ├── CommunicateCommandProcessor.java
│ │ │ │ │ └── processor
│ │ │ │ │ ├── ArthasCommandProcessor.java
│ │ │ │ │ ├── CancelProcessor.java
│ │ │ │ │ ├── DecompilerProcessor.java
│ │ │ │ │ ├── DownloadFileListProcessor.java
│ │ │ │ │ ├── DownloadFileProcessor.java
│ │ │ │ │ ├── HeapHistoProcessor.java
│ │ │ │ │ ├── HostInfoProcessor.java
│ │ │ │ │ ├── JStackCpuTimeProcessor.java
│ │ │ │ │ ├── JStackThreadInfoProcessor.java
│ │ │ │ │ ├── JStackThreadNumProcessor.java
│ │ │ │ │ ├── JavaCommandProcessor.java
│ │ │ │ │ ├── LinuxCommandProcessor.java
│ │ │ │ │ ├── ProfilerStartProcessor.java
│ │ │ │ │ ├── ProfilerStateProcessor.java
│ │ │ │ │ ├── ProfilerStopProcessor.java
│ │ │ │ │ ├── QJToolsProcessor.java
│ │ │ │ │ ├── QMonitorQueryProcessor.java
│ │ │ │ │ └── ThreadInfoProcessor.java
│ │ │ │ └── linuxcommand
│ │ │ │ ├── CommandSplitter.java
│ │ │ │ ├── LinuxCommand.java
│ │ │ │ ├── LinuxCommandParser.java
│ │ │ │ └── StandardCommand.java
│ │ │ ├── config
│ │ │ ├── AgentInfoManager.java
│ │ │ ├── AgentInfoOverride.java
│ │ │ └── DefaultAgentInfoManager.java
│ │ │ ├── container
│ │ │ └── Bootstrap.java
│ │ │ ├── dao
│ │ │ ├── ProfilerDao.java
│ │ │ ├── ProfilerDaoImpl.java
│ │ │ ├── ProfilerLockDao.java
│ │ │ └── ProfilerLockDaoImpl.java
│ │ │ ├── generator
│ │ │ ├── IdGenerator.java
│ │ │ └── SessionIdGenerator.java
│ │ │ ├── service
│ │ │ ├── impl
│ │ │ │ ├── DefaultProfilerDataManager.java
│ │ │ │ ├── DefaultProfilerManager.java
│ │ │ │ ├── DefaultProfilerSettingsStore.java
│ │ │ │ ├── ProfilerServiceImpl.java
│ │ │ │ └── ProfilerSettingsManagerImpl.java
│ │ │ └── profiler
│ │ │ │ ├── ProfilerDataManager.java
│ │ │ │ ├── ProfilerManager.java
│ │ │ │ ├── ProfilerService.java
│ │ │ │ ├── ProfilerSettingsManager.java
│ │ │ │ └── ProfilerSettingsStore.java
│ │ │ ├── startup
│ │ │ └── NettyServerManager.java
│ │ │ ├── util
│ │ │ ├── AppCenterServerFinder.java
│ │ │ ├── ChannelUtils.java
│ │ │ ├── DownloadDirUtils.java
│ │ │ ├── FutureSuccessCallBack.java
│ │ │ ├── ProfilerDatagramHelper.java
│ │ │ ├── ServerFinder.java
│ │ │ └── profiler
│ │ │ │ ├── CallStackCounter.java
│ │ │ │ ├── FunctionCounter.java
│ │ │ │ ├── HotSpotMethodFormatter.java
│ │ │ │ ├── HotSpotMethodParser.java
│ │ │ │ ├── ProfilerAnalyzer.java
│ │ │ │ ├── ProfilerDatagramHelper.java
│ │ │ │ └── TreeNode.java
│ │ │ └── web
│ │ │ └── controller
│ │ │ ├── AgentGetController.java
│ │ │ ├── AgentMetaRefreshNotifyController.java
│ │ │ ├── AgentProfilerForUiController.java
│ │ │ ├── AgentVersionController.java
│ │ │ └── ProxyConfigForAgentGetController.java
│ ├── resources.local
│ │ └── spring
│ │ │ └── database.xml
│ ├── resources
│ │ ├── META-INF
│ │ │ └── services
│ │ │ │ └── qunar.tc.bistoury.serverside.jdbc.DataSourceFactory
│ │ ├── logback.xml
│ │ ├── script
│ │ │ ├── flamegraph-count.pl
│ │ │ └── flamegraph-time.pl
│ │ └── spring
│ │ │ ├── context.xml
│ │ │ ├── database.xml
│ │ │ └── dispatcherServlet.xml
│ └── webapp
│ │ ├── WEB-INF
│ │ └── web.xml
│ │ ├── css
│ │ └── bootstrap.min.css
│ │ ├── favicon.ico
│ │ ├── index.jsp
│ │ ├── js
│ │ ├── bootstrap.min.js
│ │ └── jquery-3.3.1.min.js
│ │ └── proxy.html
│ └── test
│ ├── java
│ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── proxy
│ │ └── container
│ │ └── ProxyBootstrapForTest.java
│ └── resources
│ └── conf
│ ├── agent_config.properties
│ ├── agent_config_override.properties
│ ├── global.properties
│ ├── jdbc.properties
│ ├── profiler.properties
│ ├── prometheus.properties
│ ├── registry.properties
│ ├── releaseInfo_config.properties
│ └── server.properties
├── bistoury-remoting
├── pom.xml
└── src
│ ├── main
│ └── java
│ │ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── remoting
│ │ ├── CommandCodeProcessor.java
│ │ ├── coder
│ │ ├── AgentDecoder.java
│ │ └── AgentEncoder.java
│ │ ├── command
│ │ ├── CommandSerializer.java
│ │ ├── CpuTimeCommand.java
│ │ ├── DecompilerCommand.java
│ │ ├── DownloadCommand.java
│ │ ├── HeapHistoCommand.java
│ │ ├── MachineCommand.java
│ │ ├── MonitorCommand.java
│ │ ├── ThreadCommand.java
│ │ └── ThreadNumCommand.java
│ │ ├── netty
│ │ ├── AgentConstants.java
│ │ ├── AgentRemotingExecutor.java
│ │ ├── CancelProcessor.java
│ │ ├── DefaultRunningTask.java
│ │ ├── DefaultTaskStore.java
│ │ ├── JobPauseProcessor.java
│ │ ├── JobResumeProcessor.java
│ │ ├── NettyExecuteHandler.java
│ │ ├── Processor.java
│ │ ├── RequestHandler.java
│ │ ├── ResponseWriter.java
│ │ ├── RunnableTask.java
│ │ ├── RunnableTasks.java
│ │ ├── Task.java
│ │ ├── TaskFactory.java
│ │ ├── TaskProcessor.java
│ │ └── TaskStore.java
│ │ ├── protocol
│ │ ├── AgentServerInfo.java
│ │ ├── CodeTypeMappingStore.java
│ │ ├── CodeTypeMappingStores.java
│ │ ├── CommandCode.java
│ │ ├── Datagram.java
│ │ ├── DefaultCodeTypeMappingStore.java
│ │ ├── ErrorCode.java
│ │ ├── PayloadHolder.java
│ │ ├── RemotingBuilder.java
│ │ ├── RemotingHeader.java
│ │ ├── RequestData.java
│ │ ├── ResponseCode.java
│ │ └── payloadHolderImpl
│ │ │ ├── ErrorResponsePayloadHolder.java
│ │ │ ├── RequestPayloadHolder.java
│ │ │ ├── ResponsePayloadHolder.java
│ │ │ └── ResponseStringPayloadHolder.java
│ │ └── util
│ │ ├── LocalHost.java
│ │ └── PayloadHolderUtils.java
│ └── test
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── remoting
│ ├── PSTest.java
│ └── netty
│ └── qjtools
│ └── QJToolsPrintStreamTest.java
├── bistoury-serverside-common
├── pom.xml
└── src
│ └── main
│ ├── java
│ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── serverside
│ │ ├── agile
│ │ ├── Base64.java
│ │ ├── Conf.java
│ │ ├── Numbers.java
│ │ └── Strings.java
│ │ ├── bean
│ │ ├── ApiResult.java
│ │ ├── ApiStatus.java
│ │ ├── Profiler.java
│ │ └── ProfilerSettings.java
│ │ ├── common
│ │ ├── BistouryServerConstants.java
│ │ ├── MockZkClientImpl.java
│ │ ├── UUIDUtil.java
│ │ ├── ZKClient.java
│ │ ├── ZKClientCache.java
│ │ ├── ZKClientImpl.java
│ │ └── encryption
│ │ │ ├── DefaultRequestEncryption.java
│ │ │ ├── Encryption.java
│ │ │ ├── EncryptionUtils.java
│ │ │ ├── RSAEncryption.java
│ │ │ └── RequestEncryption.java
│ │ ├── configuration
│ │ ├── DynamicConfig.java
│ │ ├── DynamicConfigFactory.java
│ │ ├── DynamicConfigLoader.java
│ │ ├── Listener.java
│ │ └── local
│ │ │ ├── ConfigWatcher.java
│ │ │ ├── LocalDynamicConfig.java
│ │ │ └── LocalDynamicConfigFactory.java
│ │ ├── database
│ │ └── H2DataBeseUtil.java
│ │ ├── exception
│ │ └── PermissionDenyException.java
│ │ ├── jdbc
│ │ ├── DataSourceFactory.java
│ │ ├── DefaultDataSourceFactory.java
│ │ └── JdbcTemplateHolder.java
│ │ ├── metrics
│ │ ├── BistouryCounter.java
│ │ ├── BistouryMeter.java
│ │ ├── BistouryMetricRegistry.java
│ │ ├── BistouryTimer.java
│ │ ├── Metrics.java
│ │ └── MockRegistry.java
│ │ ├── store
│ │ └── RegistryStore.java
│ │ └── util
│ │ ├── BistouryFileStoreUtil.java
│ │ ├── ResultHelper.java
│ │ └── ServerManager.java
│ └── resources
│ ├── META-INF
│ └── services
│ │ └── qunar.tc.bistoury.serverside.configuration.DynamicConfigFactory
│ ├── rsa-private-key.pem
│ └── rsa-public-key.pem
├── bistoury-ui-service-impl
├── pom.xml
└── src
│ └── main
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── ui
│ ├── dao
│ ├── GitlabPrivateTokenDao.java
│ ├── ProfilerDao.java
│ ├── UserDao.java
│ └── impl
│ │ ├── GitlabPrivateTokenDaoImpl.java
│ │ ├── ProfilerDaoImpl.java
│ │ └── UserDaoImpl.java
│ ├── git
│ ├── GitRepositoryApi.java
│ ├── GithubRepositoryApiImpl.java
│ └── GitlabRepositoryApiImpl.java
│ ├── security
│ ├── LoginContext.java
│ └── LoginInterceptorImpl.java
│ └── service
│ └── impl
│ ├── AESCryptServiceImpl.java
│ ├── BistouryLoginManager.java
│ ├── DefaultJarFileStore.java
│ ├── GitPrivateTokenServiceImpl.java
│ ├── GitRepositoryStoreServiceImpl.java
│ ├── LinkRedirectServiceImpl.java
│ ├── MavenRepositoryServiceImpl.java
│ ├── ProfilerServiceImpl.java
│ ├── ProxyServiceImpl.java
│ ├── ReleaseInfoServiceImpl.java
│ └── UserServiceImpl.java
├── bistoury-ui-service
├── pom.xml
└── src
│ └── main
│ └── java
│ └── qunar
│ └── tc
│ └── bistoury
│ └── ui
│ ├── exception
│ ├── GlobalExceptionHandler.java
│ ├── SourceFileNotFoundException.java
│ └── SourceFileReadException.java
│ ├── model
│ ├── GitHubFile.java
│ ├── GitlabFile.java
│ ├── MavenInfo.java
│ ├── PrivateToken.java
│ ├── ReleaseInfo.java
│ └── User.java
│ ├── security
│ └── LoginInterceptor.java
│ ├── service
│ ├── AESCryptService.java
│ ├── GitPrivateTokenService.java
│ ├── GitRepositoryStoreService.java
│ ├── JarFileStore.java
│ ├── LoginManager.java
│ ├── MavenRepositoryService.java
│ ├── ProfilerService.java
│ ├── ProxyService.java
│ ├── ReleaseInfoService.java
│ ├── URLRedirectService.java
│ └── UserService.java
│ └── util
│ ├── PropertiesReleaseInfoParser.java
│ ├── ProxyInfo.java
│ ├── ProxyInfoParser.java
│ └── ReleaseInfoParse.java
├── bistoury-ui
├── conf
│ ├── config.properties
│ ├── jdbc.properties
│ ├── prometheus.properties
│ ├── registry.properties
│ ├── server.properties
│ └── url_redirect.properties
├── pom.xml
├── sql
│ └── bistoury_init.sql
└── src
│ ├── assembly
│ └── assembly-ui.xml
│ ├── bin
│ ├── base.sh
│ ├── bistoury-ui-env.sh
│ └── bistoury-ui.sh
│ ├── main
│ ├── java
│ │ └── qunar
│ │ │ └── tc
│ │ │ └── bistoury
│ │ │ └── ui
│ │ │ ├── connection
│ │ │ └── DownloadWebSocket.java
│ │ │ ├── container
│ │ │ └── Bootstrap.java
│ │ │ ├── controller
│ │ │ ├── AgentMetaController.java
│ │ │ ├── AppController.java
│ │ │ ├── AppServerController.java
│ │ │ ├── ApplicationController.java
│ │ │ ├── ConfigController.java
│ │ │ ├── DownloadFileController.java
│ │ │ ├── ErrorCodeMappingController.java
│ │ │ ├── GitlabRepositoryApiController.java
│ │ │ ├── HelpController.java
│ │ │ ├── LoginController.java
│ │ │ ├── MavenRepositoryApiController.java
│ │ │ ├── PrivateTokenApiController.java
│ │ │ ├── ProfilerController.java
│ │ │ ├── ReleaseInfoController.java
│ │ │ └── URLRedirectController.java
│ │ │ └── filter
│ │ │ ├── XSSRequestWrapper.java
│ │ │ └── XssFilter.java
│ ├── resources.local
│ │ └── spring
│ │ │ └── database.xml
│ ├── resources
│ │ ├── META-INF
│ │ │ └── services
│ │ │ │ └── qunar.tc.bistoury.serverside.jdbc.DataSourceFactory
│ │ ├── logback.xml
│ │ └── spring
│ │ │ ├── context.xml
│ │ │ ├── database.xml
│ │ │ └── service.xml
│ └── webapp
│ │ ├── WEB-INF
│ │ ├── springmvc-servlet.xml
│ │ └── web.xml
│ │ ├── application.html
│ │ ├── css
│ │ ├── application.css
│ │ ├── base.css
│ │ ├── bootstrap-chosen.css
│ │ ├── bootstrap-datetimepicker.min.css
│ │ ├── bootstrap-select.min.css
│ │ ├── bootstrap-table.css
│ │ ├── bootstrap-theme.min.css
│ │ ├── bootstrap-treeview.css
│ │ ├── bootstrap.min.css
│ │ ├── chosen-sprite.png
│ │ ├── cpu-profiler.css
│ │ ├── daterangepicker-1.3.7.css
│ │ ├── daterangepicker-bs3.css
│ │ ├── daterangepicker.css
│ │ ├── debug.css
│ │ ├── header.css
│ │ ├── help.less
│ │ ├── images
│ │ │ ├── ui-bg_diagonals-thick_18_b81900_40x40.png
│ │ │ ├── ui-bg_diagonals-thick_20_666666_40x40.png
│ │ │ ├── ui-bg_flat_10_000000_40x100.png
│ │ │ ├── ui-bg_glass_100_f6f6f6_1x400.png
│ │ │ ├── ui-bg_glass_100_fdf5ce_1x400.png
│ │ │ ├── ui-bg_glass_65_ffffff_1x400.png
│ │ │ ├── ui-bg_gloss-wave_35_f6a828_500x100.png
│ │ │ ├── ui-bg_highlight-soft_100_eeeeee_1x100.png
│ │ │ ├── ui-bg_highlight-soft_75_ffe45c_1x100.png
│ │ │ ├── ui-icons_222222_256x240.png
│ │ │ ├── ui-icons_228ef1_256x240.png
│ │ │ ├── ui-icons_ef8c08_256x240.png
│ │ │ ├── ui-icons_ffd27a_256x240.png
│ │ │ └── ui-icons_ffffff_256x240.png
│ │ ├── jquery-ui.min.css
│ │ ├── jquery-ui.structure.min.css
│ │ ├── jquery-ui.theme.min.css
│ │ ├── jstack-dump.css
│ │ ├── jstree
│ │ │ ├── 32px.png
│ │ │ ├── 40px.png
│ │ │ ├── style.min.css
│ │ │ └── throbber.gif
│ │ ├── katex.min.css
│ │ ├── main.css
│ │ ├── menu.css
│ │ ├── monitor.css
│ │ ├── qconsole.css
│ │ └── spop.min.css
│ │ ├── debug.html
│ │ ├── download.html
│ │ ├── favicon.ico
│ │ ├── fonts
│ │ ├── glyphicons-halflings-regular.eot
│ │ ├── glyphicons-halflings-regular.svg
│ │ ├── glyphicons-halflings-regular.ttf
│ │ ├── glyphicons-halflings-regular.woff
│ │ └── glyphicons-halflings-regular.woff2
│ │ ├── help.html
│ │ ├── help.md
│ │ ├── highlight
│ │ ├── CHANGES.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── README.ru.md
│ │ ├── highlight.pack.js
│ │ └── styles
│ │ │ ├── a11y-dark.css
│ │ │ ├── a11y-light.css
│ │ │ ├── agate.css
│ │ │ ├── an-old-hope.css
│ │ │ ├── androidstudio.css
│ │ │ ├── arduino-light.css
│ │ │ ├── arta.css
│ │ │ ├── ascetic.css
│ │ │ ├── atelier-cave-dark.css
│ │ │ ├── atelier-cave-light.css
│ │ │ ├── atelier-dune-dark.css
│ │ │ ├── atelier-dune-light.css
│ │ │ ├── atelier-estuary-dark.css
│ │ │ ├── atelier-estuary-light.css
│ │ │ ├── atelier-forest-dark.css
│ │ │ ├── atelier-forest-light.css
│ │ │ ├── atelier-heath-dark.css
│ │ │ ├── atelier-heath-light.css
│ │ │ ├── atelier-lakeside-dark.css
│ │ │ ├── atelier-lakeside-light.css
│ │ │ ├── atelier-plateau-dark.css
│ │ │ ├── atelier-plateau-light.css
│ │ │ ├── atelier-savanna-dark.css
│ │ │ ├── atelier-savanna-light.css
│ │ │ ├── atelier-seaside-dark.css
│ │ │ ├── atelier-seaside-light.css
│ │ │ ├── atelier-sulphurpool-dark.css
│ │ │ ├── atelier-sulphurpool-light.css
│ │ │ ├── atom-one-dark-reasonable.css
│ │ │ ├── atom-one-dark.css
│ │ │ ├── atom-one-light.css
│ │ │ ├── brown-paper.css
│ │ │ ├── brown-papersq.png
│ │ │ ├── codepen-embed.css
│ │ │ ├── color-brewer.css
│ │ │ ├── darcula.css
│ │ │ ├── dark.css
│ │ │ ├── darkula.css
│ │ │ ├── default.css
│ │ │ ├── docco.css
│ │ │ ├── dracula.css
│ │ │ ├── far.css
│ │ │ ├── foundation.css
│ │ │ ├── github-gist.css
│ │ │ ├── github.css
│ │ │ ├── gml.css
│ │ │ ├── googlecode.css
│ │ │ ├── grayscale.css
│ │ │ ├── gruvbox-dark.css
│ │ │ ├── gruvbox-light.css
│ │ │ ├── hopscotch.css
│ │ │ ├── hybrid.css
│ │ │ ├── idea.css
│ │ │ ├── ir-black.css
│ │ │ ├── isbl-editor-dark.css
│ │ │ ├── isbl-editor-light.css
│ │ │ ├── kimbie.dark.css
│ │ │ ├── kimbie.light.css
│ │ │ ├── lightfair.css
│ │ │ ├── magula.css
│ │ │ ├── mono-blue.css
│ │ │ ├── monokai-sublime.css
│ │ │ ├── monokai.css
│ │ │ ├── nord.css
│ │ │ ├── obsidian.css
│ │ │ ├── ocean.css
│ │ │ ├── paraiso-dark.css
│ │ │ ├── paraiso-light.css
│ │ │ ├── pojoaque.css
│ │ │ ├── pojoaque.jpg
│ │ │ ├── purebasic.css
│ │ │ ├── qtcreator_dark.css
│ │ │ ├── qtcreator_light.css
│ │ │ ├── railscasts.css
│ │ │ ├── rainbow.css
│ │ │ ├── routeros.css
│ │ │ ├── school-book.css
│ │ │ ├── school-book.png
│ │ │ ├── shades-of-purple.css
│ │ │ ├── solarized-dark.css
│ │ │ ├── solarized-light.css
│ │ │ ├── sunburst.css
│ │ │ ├── tomorrow-night-blue.css
│ │ │ ├── tomorrow-night-bright.css
│ │ │ ├── tomorrow-night-eighties.css
│ │ │ ├── tomorrow-night.css
│ │ │ ├── tomorrow.css
│ │ │ ├── vs.css
│ │ │ ├── vs2015.css
│ │ │ ├── xcode.css
│ │ │ ├── xt256.css
│ │ │ └── zenburn.css
│ │ ├── html
│ │ ├── jstack-dump.html
│ │ └── report.html
│ │ ├── image
│ │ └── tcdev.png
│ │ ├── js
│ │ ├── UUID.js
│ │ ├── application.js
│ │ ├── base64.js
│ │ ├── bistoury.js
│ │ ├── bootstrap-datetimepicker.min.js
│ │ ├── bootstrap-select.min.js
│ │ ├── bootstrap-table-zh-CN.js
│ │ ├── bootstrap-table.js
│ │ ├── bootstrap-treeview.js
│ │ ├── bootstrap.min.js
│ │ ├── chosen.jquery.js
│ │ ├── daterangepicker-1.3.7.js
│ │ ├── daterangepicker.min.js
│ │ ├── debug.js
│ │ ├── download.js
│ │ ├── echarts.common.min.js
│ │ ├── handlebars-v4.0.5.js
│ │ ├── header.js
│ │ ├── jqconsole.js
│ │ ├── jqconsole.min.js
│ │ ├── jquery-3.3.1.min.js
│ │ ├── jquery-ui.min.js
│ │ ├── jquery.cookie.js
│ │ ├── jsencrypt.js
│ │ ├── jstack-dump.js
│ │ ├── jstree.min.js
│ │ ├── machine.js
│ │ ├── mode-ecb.js
│ │ ├── moment-2.5.1.min.js
│ │ ├── moment.min.js
│ │ ├── monitor.js
│ │ ├── profiler.js
│ │ ├── qconsole.js
│ │ ├── report.js
│ │ ├── spop.min.js
│ │ ├── tripledes.js
│ │ ├── uploadimgs.js
│ │ └── websocket.js
│ │ ├── login.html
│ │ ├── machine.html
│ │ ├── moment.js
│ │ ├── monitor.html
│ │ ├── qconsole.html
│ │ └── redirectError.html
│ └── test
│ ├── java
│ └── qunar
│ │ └── tc
│ │ └── bistoury
│ │ └── ui
│ │ ├── container
│ │ └── UiBootstrapForTest.java
│ │ ├── controller
│ │ └── DownloadFileControllerTest.java
│ │ └── git
│ │ ├── GithubTest.java
│ │ └── github.http
│ └── resources
│ └── conf
│ ├── config.properties
│ ├── jdbc.properties
│ ├── prometheus.properties
│ ├── registry.properties
│ ├── server.properties
│ └── url_redirect.properties
├── docs
├── cn
│ ├── FAQ.md
│ ├── PID.md
│ ├── application.md
│ ├── commands.md
│ ├── debug.md
│ ├── deploy.md
│ ├── design.md
│ ├── design
│ │ └── design.md
│ ├── downloadFile.md
│ ├── gitlab_maven.md
│ ├── java11.md
│ ├── jmap.md
│ ├── jstack.md
│ ├── monitor.md
│ ├── profiler.md
│ ├── quick_start.md
│ ├── release.md
│ └── store.md
└── image
│ ├── app_add.png
│ ├── app_info.png
│ ├── app_panel.png
│ ├── app_server.png
│ ├── app_server_manger.png
│ ├── bistoury_qq_small.png
│ ├── cannot_lib_class.png
│ ├── console.png
│ ├── debug-main.png
│ ├── debug.png
│ ├── debug_class_list.png
│ ├── debug_panel.png
│ ├── design.png
│ ├── design
│ ├── agent_connect_to_proxy.png
│ ├── command_execute.png
│ └── ui_choose_proxy.png
│ ├── deug_panel.png
│ ├── download.png
│ ├── image-20210819175338181.png
│ ├── image-20210819175409442.png
│ ├── image-20210819175554861.png
│ ├── jmap_panel.png
│ ├── jstack.png
│ ├── jstack_cpu_thread.png
│ ├── jstack_entry.png
│ ├── jstack_jmap_switch.png
│ ├── jstack_panel.png
│ ├── jstack_thread_search.png
│ ├── jstack_thread_stacktrace.png
│ ├── jvm.png
│ ├── monitor.png
│ ├── monitor_class_list.png
│ ├── monitor_display.png
│ ├── monitor_entry.png
│ ├── monitor_panel.png
│ ├── private_token.png
│ ├── profiler_method.png
│ ├── profiler_stack.png
│ ├── profiler_start.png
│ ├── profiler_start_step_2.png
│ └── thread_dump.png
├── mvnw
├── mvnw.cmd
├── pom.xml
└── script
├── build.sh
├── debug.sh
├── h2
├── data.sql
├── h2-1.4.199.jar
├── h2.sh
└── schema.sql
├── quick_start.sh
└── quick_start_build.sh
/.github/ISSUE_TEMPLATE/BUG_REPORT.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug Report
3 | about: If you would like to report a issue to Bistouryx, please use this template.
4 |
5 |
6 | ---
7 |
8 | - [ ] I have searched the [issues](https://github.com/xopencode/bistouryX/issues) of this repository and believe that this is not a duplicate.
9 |
10 | ### Ⅰ. Issue Description
11 |
12 |
13 | ### Ⅱ. Describe what happened
14 |
15 | If there is an exception, please attach the exception trace:
16 |
17 | ```
18 | Just paste your stack trace here!
19 | ```
20 |
21 |
22 | ### Ⅲ. Describe what you expected to happen
23 |
24 |
25 | ### Ⅳ. How to reproduce it (as minimally and precisely as possible)
26 |
27 | 1. xxx
28 | 2. xxx
29 | 3. xxx
30 |
31 | ### Ⅴ. Anything else we need to know?
32 |
33 |
34 | ### Ⅵ. Environment:
35 |
36 | - JDK version :
37 | - OS :
38 | - Others:
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/FEATURE_REQUEST.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature Request
3 | about: Suggest an idea for BistouryX
4 |
5 | ---
6 |
7 | ## Why you need it?
8 | Is your feature request related to a problem? Please describe in details
9 |
10 |
11 | ## How it could be?
12 | A clear and concise description of what you want to happen. You can explain more about input of the feature, and output of it.
13 |
14 |
15 | ## Other related information
16 | Add any other context or screenshots about the feature request here.
17 |
18 |
--------------------------------------------------------------------------------
/.github/PULL_REQUEST_TEMPLATE.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ### Ⅰ. Describe what this PR did
4 |
5 |
6 | ### Ⅱ. Does this pull request fix one issue?
7 |
8 |
9 |
10 | ### Ⅲ. Why don't you add test cases (unit test/integration test)?
11 |
12 |
13 | ### Ⅳ. Describe how to verify it
14 |
15 |
16 | ### Ⅴ. Special notes for reviews
17 |
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # kdiff3 ignore
2 | *.orig
3 |
4 | # maven ignore
5 | target/
6 |
7 | # eclipse ignore
8 | .settings/
9 | .project
10 | .classpath
11 | classes/**
12 |
13 | # idea ignore
14 | .idea/
15 | *.ipr
16 | *.iml
17 | *.iws
18 |
19 | # temp ignore
20 | *.log
21 | *.cache
22 | *.diff
23 | *.patch
24 | *.tmp
25 |
26 | # system ignore
27 | .DS_Store
28 | Thumbs.db
29 |
30 | # package ignore (optional)
31 | # *.jar
32 | # *.war
33 | # *.zip
34 | # *.tar
35 | # *.tar.gz
36 |
37 | # embedded tomcat
38 | tomcat.8080/**
39 |
40 | # pods ignore
41 | Pods/
42 |
43 | bistoury-*.tar.gz
44 |
--------------------------------------------------------------------------------
/bistoury-agent-common/src/main/java/qunar/tc/bistoury/agent/common/job/ContinueResponseJob.java:
--------------------------------------------------------------------------------
1 | package qunar.tc.bistoury.agent.common.job;
2 |
3 | import com.google.common.util.concurrent.ListeningExecutorService;
4 |
5 | /**
6 | * @author zhenyu.nie created on 2019 2019/10/16 19:20
7 | */
8 | public interface ContinueResponseJob {
9 |
10 | String getId();
11 |
12 | void init() throws Exception;
13 |
14 | boolean doResponse() throws Exception;
15 |
16 | void clear();
17 |
18 | void finish() throws Exception;
19 |
20 | void error(Throwable t);
21 |
22 | void cancel();
23 |
24 | ListeningExecutorService getExecutor();
25 | }
26 |
--------------------------------------------------------------------------------
/bistoury-agent-common/src/main/java/qunar/tc/bistoury/agent/common/job/ResponseJobStore.java:
--------------------------------------------------------------------------------
1 | package qunar.tc.bistoury.agent.common.job;
2 |
3 | /**
4 | * @author zhenyu.nie created on 2019 2019/10/16 17:57
5 | */
6 | public interface ResponseJobStore {
7 |
8 | void setWritable(boolean writable);
9 |
10 | void submit(ContinueResponseJob job);
11 |
12 | void pause(String id);
13 |
14 | void resume(String id);
15 |
16 | void stop(String id);
17 |
18 | void close();
19 | }
20 |
--------------------------------------------------------------------------------
/bistoury-agent-common/src/main/java/qunar/tc/bistoury/agent/common/kv/KvDb.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 Qunar, Inc.
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package qunar.tc.bistoury.agent.common.kv;
19 |
20 | import java.util.Map;
21 |
22 | /**
23 | * @author zhenyu.nie created on 2019 2019/1/8 17:20
24 | */
25 | public interface KvDb {
26 |
27 | String get(String key);
28 |
29 | void put(String key, String value);
30 |
31 | void putBatch(Map data);
32 | }
33 |
--------------------------------------------------------------------------------
/bistoury-agent-common/src/main/java/qunar/tc/bistoury/agent/common/kv/KvDbs.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 Qunar, Inc.
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package qunar.tc.bistoury.agent.common.kv;
19 |
20 | /**
21 | * @author zhenyu.nie created on 2019 2019/1/8 19:16
22 | */
23 | public class KvDbs {
24 |
25 | private static final KvDb kvDb;
26 |
27 | static {
28 | kvDb = new KvDbWrapper();
29 | }
30 |
31 | public static KvDb getKvDb() {
32 | return kvDb;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/bistoury-agent-common/src/main/java/qunar/tc/bistoury/agent/common/pid/PidHandler.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 Qunar, Inc.
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package qunar.tc.bistoury.agent.common.pid;
19 |
20 | /**
21 | * @author: leix.xie
22 | * @date: 2019/3/13 17:14
23 | * @describe:
24 | */
25 | public interface PidHandler {
26 |
27 | int priority();
28 |
29 | int getPid();
30 | }
31 |
--------------------------------------------------------------------------------
/bistoury-agent-common/src/main/java/qunar/tc/bistoury/agent/common/pid/PidHandlerFactory.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 Qunar, Inc.
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package qunar.tc.bistoury.agent.common.pid;
19 |
20 | /**
21 | * @author zhenyu.nie created on 2019 2019/7/24 15:20
22 | */
23 | public interface PidHandlerFactory {
24 |
25 | PidHandler create();
26 | }
27 |
--------------------------------------------------------------------------------
/bistoury-agent-common/src/main/java/qunar/tc/bistoury/agent/common/task/AgentGlobalTaskFactory.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 Qunar, Inc.
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package qunar.tc.bistoury.agent.common.task;
19 |
20 | /**
21 | * @author zhenyu.nie created on 2019 2019/1/8 17:13
22 | */
23 | public interface AgentGlobalTaskFactory {
24 |
25 | void start();
26 | }
27 |
--------------------------------------------------------------------------------
/bistoury-agent-common/src/test/resources/logback.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | [%d{yyyy-MM-dd HH:mm:ss:SSS} QTraceId[%X{qtraceid}] [%thread] %5p %c:%L] %m%n
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/bistoury-agent-task/src/main/java/qunar/tc/bistoury/agent/task/cpujstack/PidExecutor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 Qunar, Inc.
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package qunar.tc.bistoury.agent.task.cpujstack;
19 |
20 | /**
21 | * @author zhenyu.nie created on 2019 2019/1/10 13:50
22 | */
23 | public interface PidExecutor {
24 |
25 | String execute(int pid);
26 | }
27 |
--------------------------------------------------------------------------------
/bistoury-agent-task/src/main/java/qunar/tc/bistoury/agent/task/cpujstack/PidRecordExecutor.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2019 Qunar, Inc.
3 | *
4 | * This program is free software: you can redistribute it and/or modify
5 | * it under the terms of the GNU General Public License as published by
6 | * the Free Software Foundation, either version 3 of the License, or
7 | * (at your option) any later version.
8 | *
9 | * This program is distributed in the hope that it will be useful,
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 | * GNU General Public License for more details.
13 | *
14 | * You should have received a copy of the GNU General Public License
15 | * along with this program. If not, see .
16 | */
17 |
18 | package qunar.tc.bistoury.agent.task.cpujstack;
19 |
20 | import com.google.common.util.concurrent.ListenableFuture;
21 |
22 | import java.util.Map;
23 |
24 | /**
25 | * @author cai.wen
26 | */
27 | public interface PidRecordExecutor {
28 |
29 | ListenableFuture