auser-poolparty 1.3.0 → 1.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION.yml +1 -1
- data/examples/monitored_cloud.rb +1 -1
- data/examples/thrift/thrift_example.rb +1 -1
- data/lib/proto/command_interface_handler.rb +1 -1
- data/vendor/gems/thrift/CHANGES +35 -0
- data/vendor/gems/thrift/CONTRIBUTORS +77 -0
- data/vendor/gems/thrift/DISCLAIMER +6 -0
- data/vendor/gems/thrift/LICENSE +202 -0
- data/vendor/gems/thrift/Makefile.am +28 -0
- data/vendor/gems/thrift/NEWS +79 -0
- data/vendor/gems/thrift/NOTICE +26 -0
- data/vendor/gems/thrift/README +137 -0
- data/vendor/gems/thrift/aclocal/ax_boost_base.m4 +198 -0
- data/vendor/gems/thrift/aclocal/ax_javac_and_java.m4 +107 -0
- data/vendor/gems/thrift/aclocal/ax_lib_event.m4 +194 -0
- data/vendor/gems/thrift/aclocal/ax_lib_zlib.m4 +173 -0
- data/vendor/gems/thrift/aclocal/ax_signed_right_shift.m4 +127 -0
- data/vendor/gems/thrift/aclocal/ax_thrift_internal.m4 +39 -0
- data/vendor/gems/thrift/bootstrap.sh +35 -0
- data/vendor/gems/thrift/cleanup.sh +58 -0
- data/vendor/gems/thrift/compiler/cpp/Makefile.am +136 -0
- data/vendor/gems/thrift/compiler/cpp/README +39 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_cocoa_generator.cc +2331 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_cpp_generator.cc +3003 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_csharp_generator.cc +1700 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_erl_generator.cc +932 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.cc +173 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_generator.h +321 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_hs_generator.cc +1445 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_html_generator.cc +637 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_java_generator.cc +3069 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_ocaml_generator.cc +1673 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_oop_generator.h +77 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_perl_generator.cc +1812 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_php_generator.cc +2281 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_py_generator.cc +2310 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_rb_generator.cc +1114 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_st_generator.cc +1071 -0
- data/vendor/gems/thrift/compiler/cpp/src/generate/t_xsd_generator.cc +354 -0
- data/vendor/gems/thrift/compiler/cpp/src/globals.h +117 -0
- data/vendor/gems/thrift/compiler/cpp/src/main.cc +1207 -0
- data/vendor/gems/thrift/compiler/cpp/src/main.h +103 -0
- data/vendor/gems/thrift/compiler/cpp/src/md5.c +381 -0
- data/vendor/gems/thrift/compiler/cpp/src/md5.h +91 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_base_type.h +137 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_const.h +59 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_const_value.h +121 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_container.h +56 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_doc.h +51 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum.h +59 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_enum_value.h +64 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_field.h +150 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_function.h +93 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_list.h +56 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_map.h +64 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_program.h +223 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_scope.h +86 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_service.h +68 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_set.h +55 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_struct.h +127 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_type.h +176 -0
- data/vendor/gems/thrift/compiler/cpp/src/parse/t_typedef.h +70 -0
- data/vendor/gems/thrift/compiler/cpp/src/platform.h +36 -0
- data/vendor/gems/thrift/compiler/cpp/src/thriftl.ll +303 -0
- data/vendor/gems/thrift/compiler/cpp/src/thrifty.yy +1140 -0
- data/vendor/gems/thrift/configure.ac +255 -0
- data/vendor/gems/thrift/contrib/fb303/LICENSE +16 -0
- data/vendor/gems/thrift/contrib/fb303/Makefile.am +31 -0
- data/vendor/gems/thrift/contrib/fb303/README +37 -0
- data/vendor/gems/thrift/contrib/fb303/acinclude.m4 +258 -0
- data/vendor/gems/thrift/contrib/fb303/aclocal/ax_boost_base.m4 +198 -0
- data/vendor/gems/thrift/contrib/fb303/bootstrap.sh +26 -0
- data/vendor/gems/thrift/contrib/fb303/configure.ac +115 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.cpp +124 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/FacebookBase.h +103 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/Makefile.am +84 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.cpp +481 -0
- data/vendor/gems/thrift/contrib/fb303/cpp/ServiceTracker.h +215 -0
- data/vendor/gems/thrift/contrib/fb303/global_footer.mk +21 -0
- data/vendor/gems/thrift/contrib/fb303/global_header.mk +38 -0
- data/vendor/gems/thrift/contrib/fb303/if/fb303.thrift +112 -0
- data/vendor/gems/thrift/contrib/fb303/java/FacebookBase.java +103 -0
- data/vendor/gems/thrift/contrib/fb303/java/build.xml +84 -0
- data/vendor/gems/thrift/contrib/fb303/php/FacebookBase.php +89 -0
- data/vendor/gems/thrift/contrib/fb303/py/Makefile.am +44 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303/FacebookBase.py +82 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/__init__.py +20 -0
- data/vendor/gems/thrift/contrib/fb303/py/fb303_scripts/fb303_simple_mgmt.py +195 -0
- data/vendor/gems/thrift/contrib/fb303/py/setup.py +27 -0
- data/vendor/gems/thrift/contrib/thrift.el +126 -0
- data/vendor/gems/thrift/contrib/thrift.spec +206 -0
- data/vendor/gems/thrift/contrib/thrift.vim +91 -0
- data/vendor/gems/thrift/contrib/thrift_dump.cpp +91 -0
- data/vendor/gems/thrift/doc/lgpl-2.1.txt +504 -0
- data/vendor/gems/thrift/doc/otp-base-license.txt +20 -0
- data/vendor/gems/thrift/doc/thrift.bnf +96 -0
- data/vendor/gems/thrift/doc/thrift.tex +1057 -0
- data/vendor/gems/thrift/lib/Makefile.am +55 -0
- data/vendor/gems/thrift/lib/cocoa/README +21 -0
- data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.h +44 -0
- data/vendor/gems/thrift/lib/cocoa/src/TApplicationException.m +130 -0
- data/vendor/gems/thrift/lib/cocoa/src/TException.h +34 -0
- data/vendor/gems/thrift/lib/cocoa/src/TException.m +64 -0
- data/vendor/gems/thrift/lib/cocoa/src/TProcessor.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/TProcessorFactory.h +27 -0
- data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.h +27 -0
- data/vendor/gems/thrift/lib/cocoa/src/TSharedProcessorFactory.m +51 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.h +51 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TBinaryProtocol.m +477 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocol.h +148 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.h +25 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolException.m +23 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolFactory.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.h +29 -0
- data/vendor/gems/thrift/lib/cocoa/src/protocol/TProtocolUtil.m +104 -0
- data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.h +50 -0
- data/vendor/gems/thrift/lib/cocoa/src/server/TSocketServer.m +153 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.h +42 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/THTTPClient.m +159 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.h +35 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSFileHandleTransport.m +91 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.h +38 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TNSStreamTransport.m +89 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.h +32 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TSocketClient.m +58 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransport.h +36 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.h +30 -0
- data/vendor/gems/thrift/lib/cocoa/src/transport/TTransportException.m +43 -0
- data/vendor/gems/thrift/lib/cpp/Makefile.am +158 -0
- data/vendor/gems/thrift/lib/cpp/README +67 -0
- data/vendor/gems/thrift/lib/cpp/src/TLogging.h +163 -0
- data/vendor/gems/thrift/lib/cpp/src/TProcessor.h +53 -0
- data/vendor/gems/thrift/lib/cpp/src/TReflectionLocal.h +96 -0
- data/vendor/gems/thrift/lib/cpp/src/Thrift.cpp +148 -0
- data/vendor/gems/thrift/lib/cpp/src/Thrift.h +191 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Exception.h +60 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/FunctionRunner.h +77 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.cpp +137 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Monitor.h +84 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.cpp +160 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Mutex.h +114 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.cpp +314 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/PosixThreadFactory.h +130 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Thread.h +125 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.cpp +493 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/ThreadManager.h +169 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.cpp +284 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/TimerManager.h +122 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.cpp +55 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/Util.h +100 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/Tests.cpp +155 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadFactoryTests.h +354 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/ThreadManagerTests.h +379 -0
- data/vendor/gems/thrift/lib/cpp/src/concurrency/test/TimerManagerTests.h +155 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.cpp +122 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/PeekProcessor.h +77 -0
- data/vendor/gems/thrift/lib/cpp/src/processor/StatsProcessor.h +264 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.cpp +79 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBase64Utils.h +42 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.cpp +394 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TBinaryProtocol.h +254 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.cpp +736 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TCompactProtocol.h +279 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.cpp +346 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDebugProtocol.h +225 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.cpp +762 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TDenseProtocol.h +253 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.cpp +998 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TJSONProtocol.h +340 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TOneWayProtocol.h +304 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocol.h +438 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolException.h +104 -0
- data/vendor/gems/thrift/lib/cpp/src/protocol/TProtocolTap.h +187 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.cpp +750 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TNonblockingServer.h +435 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TServer.cpp +38 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TServer.h +213 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.cpp +118 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TSimpleServer.h +70 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.cpp +217 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadPoolServer.h +79 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.cpp +243 -0
- data/vendor/gems/thrift/lib/cpp/src/server/TThreadedServer.h +74 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.cpp +370 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TBufferTransports.h +667 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.cpp +77 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFDTransport.h +73 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.cpp +953 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TFileTransport.h +442 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.cpp +348 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/THttpClient.h +111 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.cpp +368 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerSocket.h +76 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TServerTransport.h +92 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TShortReadTransport.h +96 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.cpp +54 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSimpleFileTransport.h +41 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.cpp +591 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocket.h +242 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.cpp +235 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TSocketPool.h +191 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransport.h +224 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.cpp +31 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportException.h +117 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.cpp +178 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TTransportUtils.h +287 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.cpp +299 -0
- data/vendor/gems/thrift/lib/cpp/src/transport/TZlibTransport.h +219 -0
- data/vendor/gems/thrift/lib/cpp/thrift-nb.pc.in +30 -0
- data/vendor/gems/thrift/lib/cpp/thrift-z.pc.in +30 -0
- data/vendor/gems/thrift/lib/cpp/thrift.pc.in +29 -0
- data/vendor/gems/thrift/lib/csharp/Makefile.am +70 -0
- data/vendor/gems/thrift/lib/csharp/README +26 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/Properties/AssemblyInfo.cs +55 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftBuild.cs +242 -0
- data/vendor/gems/thrift/lib/csharp/ThriftMSBuildTask/ThriftMSBuildTask.csproj +62 -0
- data/vendor/gems/thrift/lib/csharp/src/Collections/THashSet.cs +142 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TBase.cs +34 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TBinaryProtocol.cs +392 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TField.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TList.cs +50 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMap.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessage.cs +58 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TMessageType.cs +31 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocol.cs +87 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolException.cs +61 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolFactory.cs +29 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TProtocolUtil.cs +94 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TSet.cs +50 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TStruct.cs +42 -0
- data/vendor/gems/thrift/lib/csharp/src/Protocol/TType.cs +40 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TServer.cs +135 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TSimpleServer.cs +148 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TThreadPoolServer.cs +186 -0
- data/vendor/gems/thrift/lib/csharp/src/Server/TThreadedServer.cs +234 -0
- data/vendor/gems/thrift/lib/csharp/src/TApplicationException.cs +131 -0
- data/vendor/gems/thrift/lib/csharp/src/TProcessor.cs +29 -0
- data/vendor/gems/thrift/lib/csharp/src/Thrift.csproj +73 -0
- data/vendor/gems/thrift/lib/csharp/src/Thrift.sln +35 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TBufferedTransport.cs +100 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TServerSocket.cs +157 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TServerTransport.cs +39 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TSocket.cs +144 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TStreamTransport.cs +103 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransport.cs +66 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportException.cs +64 -0
- data/vendor/gems/thrift/lib/csharp/src/Transport/TTransportFactory.cs +38 -0
- data/vendor/gems/thrift/lib/erl/Makefile +37 -0
- data/vendor/gems/thrift/lib/erl/README +56 -0
- data/vendor/gems/thrift/lib/erl/build/beamver +59 -0
- data/vendor/gems/thrift/lib/erl/build/buildtargets.mk +15 -0
- data/vendor/gems/thrift/lib/erl/build/colors.mk +24 -0
- data/vendor/gems/thrift/lib/erl/build/docs.mk +12 -0
- data/vendor/gems/thrift/lib/erl/build/mime.types +98 -0
- data/vendor/gems/thrift/lib/erl/build/otp.mk +146 -0
- data/vendor/gems/thrift/lib/erl/build/otp_subdir.mk +85 -0
- data/vendor/gems/thrift/lib/erl/build/raw_test.mk +29 -0
- data/vendor/gems/thrift/lib/erl/include/thrift_constants.hrl +54 -0
- data/vendor/gems/thrift/lib/erl/include/thrift_protocol.hrl +31 -0
- data/vendor/gems/thrift/lib/erl/src/Makefile +116 -0
- data/vendor/gems/thrift/lib/erl/src/test_handler.erl +26 -0
- data/vendor/gems/thrift/lib/erl/src/test_service.erl +29 -0
- data/vendor/gems/thrift/lib/erl/src/thrift.app.src +44 -0
- data/vendor/gems/thrift/lib/erl/src/thrift.appup.src +1 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_base64_transport.erl +64 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_binary_protocol.erl +325 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_buffered_transport.erl +180 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_client.erl +384 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_disk_log_transport.erl +118 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_file_transport.erl +87 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_framed_transport.erl +208 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_http_transport.erl +199 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_memory_buffer.erl +164 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_processor.erl +188 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_protocol.erl +356 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_server.erl +183 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_service.erl +25 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_socket_server.erl +249 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_socket_transport.erl +119 -0
- data/vendor/gems/thrift/lib/erl/src/thrift_transport.erl +57 -0
- data/vendor/gems/thrift/lib/erl/vsn.mk +1 -0
- data/vendor/gems/thrift/lib/hs/README +82 -0
- data/vendor/gems/thrift/lib/hs/Setup.lhs +23 -0
- data/vendor/gems/thrift/lib/hs/TODO +2 -0
- data/vendor/gems/thrift/lib/hs/Thrift.cabal +20 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift.hs +111 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol.hs +191 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Protocol/Binary.hs +147 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Server.hs +65 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Transport.hs +60 -0
- data/vendor/gems/thrift/lib/hs/src/Thrift/Transport/Handle.hs +58 -0
- data/vendor/gems/thrift/lib/java/Makefile.am +38 -0
- data/vendor/gems/thrift/lib/java/README +43 -0
- data/vendor/gems/thrift/lib/java/build.xml +195 -0
- data/vendor/gems/thrift/lib/java/ivy.xml +8 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/IntRangeSet.java +171 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TApplicationException.java +123 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBase.java +66 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TBaseHelper.java +102 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TByteArrayOutputStream.java +46 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TDeserializer.java +94 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TException.java +45 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TFieldRequirementType.java +30 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessor.java +32 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TProcessorFactory.java +39 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/TSerializer.java +110 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldMetaData.java +69 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/FieldValueMetaData.java +42 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/ListMetaData.java +29 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/MapMetaData.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/SetMetaData.java +29 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/meta_data/StructMetaData.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBase64Utils.java +128 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TBinaryProtocol.java +331 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TCompactProtocol.java +741 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TField.java +48 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TJSONProtocol.java +927 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TList.java +38 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMap.java +40 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessage.java +48 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TMessageType.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocol.java +146 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolException.java +81 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolFactory.java +30 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TProtocolUtil.java +158 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSet.java +42 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TSimpleJSONProtocol.java +384 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TStruct.java +36 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/protocol/TType.java +40 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/THsHaServer.java +304 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TNonblockingServer.java +772 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TServer.java +126 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TSimpleServer.java +145 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/server/TThreadPoolServer.java +271 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TFramedTransport.java +126 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/THttpClient.java +157 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TIOStreamTransport.java +159 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TMemoryBuffer.java +98 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerSocket.java +160 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingServerTransport.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingSocket.java +213 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TNonblockingTransport.java +31 -0
- data/vendor/gems/thrift/lib/java/src/org/apache/thrift/transport/TServerSocket.java +145 -0
- metadata +348 -37
- data/vendor/gems/trollop/FAQ.txt +0 -35
- data/vendor/gems/trollop/History.txt +0 -84
- data/vendor/gems/trollop/Manifest.txt +0 -7
- data/vendor/gems/trollop/README.txt +0 -38
- data/vendor/gems/trollop/Rakefile +0 -36
- data/vendor/gems/trollop/lib/trollop.rb +0 -695
- data/vendor/gems/trollop/release-script.txt +0 -13
- data/vendor/gems/trollop/test/test_trollop.rb +0 -957
- data/vendor/gems/trollop/www/index.html +0 -167
@@ -0,0 +1,103 @@
|
|
1
|
+
/*
|
2
|
+
* Licensed to the Apache Software Foundation (ASF) under one
|
3
|
+
* or more contributor license agreements. See the NOTICE file
|
4
|
+
* distributed with this work for additional information
|
5
|
+
* regarding copyright ownership. The ASF licenses this file
|
6
|
+
* to you under the Apache License, Version 2.0 (the
|
7
|
+
* "License"); you may not use this file except in compliance
|
8
|
+
* with the License. You may obtain a copy of the License at
|
9
|
+
*
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
*
|
12
|
+
* Unless required by applicable law or agreed to in writing,
|
13
|
+
* software distributed under the License is distributed on an
|
14
|
+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
15
|
+
* KIND, either express or implied. See the License for the
|
16
|
+
* specific language governing permissions and limitations
|
17
|
+
* under the License.
|
18
|
+
*/
|
19
|
+
|
20
|
+
#ifndef _FACEBOOK_TB303_FACEBOOKBASE_H_
|
21
|
+
#define _FACEBOOK_TB303_FACEBOOKBASE_H_ 1
|
22
|
+
|
23
|
+
#include "FacebookService.h"
|
24
|
+
|
25
|
+
#include "server/TServer.h"
|
26
|
+
#include "concurrency/Mutex.h"
|
27
|
+
|
28
|
+
#include <time.h>
|
29
|
+
#include <string>
|
30
|
+
#include <map>
|
31
|
+
|
32
|
+
namespace facebook { namespace fb303 {
|
33
|
+
|
34
|
+
using apache::thrift::concurrency::Mutex;
|
35
|
+
using apache::thrift::concurrency::ReadWriteMutex;
|
36
|
+
using apache::thrift::server::TServer;
|
37
|
+
|
38
|
+
struct ReadWriteInt : ReadWriteMutex {int64_t value;};
|
39
|
+
struct ReadWriteCounterMap : ReadWriteMutex,
|
40
|
+
std::map<std::string, ReadWriteInt> {};
|
41
|
+
|
42
|
+
/**
|
43
|
+
* Base Facebook service implementation in C++.
|
44
|
+
*
|
45
|
+
*/
|
46
|
+
class FacebookBase : virtual public FacebookServiceIf {
|
47
|
+
protected:
|
48
|
+
FacebookBase(std::string name);
|
49
|
+
virtual ~FacebookBase() {}
|
50
|
+
|
51
|
+
public:
|
52
|
+
void getName(std::string& _return);
|
53
|
+
virtual void getVersion(std::string& _return) { _return = ""; }
|
54
|
+
|
55
|
+
virtual fb_status getStatus() = 0;
|
56
|
+
virtual void getStatusDetails(std::string& _return) { _return = ""; }
|
57
|
+
|
58
|
+
void setOption(const std::string& key, const std::string& value);
|
59
|
+
void getOption(std::string& _return, const std::string& key);
|
60
|
+
void getOptions(std::map<std::string, std::string> & _return);
|
61
|
+
|
62
|
+
int64_t aliveSince();
|
63
|
+
|
64
|
+
virtual void reinitialize() {}
|
65
|
+
|
66
|
+
virtual void shutdown() {
|
67
|
+
if (server_.get() != NULL) {
|
68
|
+
server_->stop();
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
int64_t incrementCounter(const std::string& key, int64_t amount = 1);
|
73
|
+
int64_t setCounter(const std::string& key, int64_t value);
|
74
|
+
|
75
|
+
void getCounters(std::map<std::string, int64_t>& _return);
|
76
|
+
int64_t getCounter(const std::string& key);
|
77
|
+
|
78
|
+
/**
|
79
|
+
* Set server handle for shutdown method
|
80
|
+
*/
|
81
|
+
void setServer(boost::shared_ptr<TServer> server) {
|
82
|
+
server_ = server;
|
83
|
+
}
|
84
|
+
|
85
|
+
void getCpuProfile(std::string& _return, int32_t durSecs) { _return = ""; }
|
86
|
+
|
87
|
+
private:
|
88
|
+
|
89
|
+
std::string name_;
|
90
|
+
int64_t aliveSince_;
|
91
|
+
|
92
|
+
std::map<std::string, std::string> options_;
|
93
|
+
Mutex optionsLock_;
|
94
|
+
|
95
|
+
ReadWriteCounterMap counters_;
|
96
|
+
|
97
|
+
boost::shared_ptr<TServer> server_;
|
98
|
+
|
99
|
+
};
|
100
|
+
|
101
|
+
}} // facebook::tb303
|
102
|
+
|
103
|
+
#endif // _FACEBOOK_TB303_FACEBOOKBASE_H_
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#
|
2
|
+
# Licensed to the Apache Software Foundation (ASF) under one
|
3
|
+
# or more contributor license agreements. See the NOTICE file
|
4
|
+
# distributed with this work for additional information
|
5
|
+
# regarding copyright ownership. The ASF licenses this file
|
6
|
+
# to you under the Apache License, Version 2.0 (the
|
7
|
+
# "License"); you may not use this file except in compliance
|
8
|
+
# with the License. You may obtain a copy of the License at
|
9
|
+
#
|
10
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
#
|
12
|
+
# Unless required by applicable law or agreed to in writing,
|
13
|
+
# software distributed under the License is distributed on an
|
14
|
+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
15
|
+
# KIND, either express or implied. See the License for the
|
16
|
+
# specific language governing permissions and limitations
|
17
|
+
# under the License.
|
18
|
+
#
|
19
|
+
|
20
|
+
@GLOBAL_HEADER_MK@
|
21
|
+
|
22
|
+
@PRODUCT_MK@
|
23
|
+
|
24
|
+
|
25
|
+
# User specified path variables set in configure.ac.
|
26
|
+
# thrift_home
|
27
|
+
#
|
28
|
+
THRIFT = $(thrift_home)/bin/thrift
|
29
|
+
|
30
|
+
# User defined conditionals and conditonal statements set up in configure.ac.
|
31
|
+
if DEBUG
|
32
|
+
DEBUG_CPPFLAGS = -DDEBUG_TIMING
|
33
|
+
endif
|
34
|
+
|
35
|
+
# Set common flags recognized by automake.
|
36
|
+
# DO NOT USE CPPFLAGS, CXXFLAGS, CFLAGS, LDFLAGS here! Set in configure.ac and|or override on command line.
|
37
|
+
# USE flags AM_CXXFLAGS, AM_CFLAGS, AM_CPPFLAGS, AM_LDFLAGS, LDADD in this section.
|
38
|
+
|
39
|
+
AM_CPPFLAGS = -I..
|
40
|
+
AM_CPPFLAGS += -Igen-cpp
|
41
|
+
AM_CPPFLAGS += -I$(thrift_home)/include/thrift
|
42
|
+
AM_CPPFLAGS += $(BOOST_CPPFLAGS)
|
43
|
+
AM_CPPFLAGS += $(FB_CPPFLAGS) $(DEBUG_CPPFLAGS)
|
44
|
+
|
45
|
+
# GENERATE BUILD RULES
|
46
|
+
# Set Program/library specific flags recognized by automake.
|
47
|
+
# Use <progname|libname>_<FLAG> to set prog / lib specific flag s
|
48
|
+
# foo_CXXFLAGS foo_CPPFLAGS foo_LDFLAGS foo_LDADD
|
49
|
+
|
50
|
+
fb303_lib = gen-cpp/FacebookService.cpp gen-cpp/fb303_constants.cpp gen-cpp/fb303_types.cpp FacebookBase.cpp ServiceTracker.cpp
|
51
|
+
|
52
|
+
# Static -- multiple libraries can be defined
|
53
|
+
if STATIC
|
54
|
+
lib_LIBRARIES = libfb303.a
|
55
|
+
libfb303_a_SOURCES = $(fb303_lib)
|
56
|
+
INTERNAL_LIBS = libfb303.a
|
57
|
+
endif
|
58
|
+
|
59
|
+
# Shared -- multiple libraries can be defined
|
60
|
+
if SHARED
|
61
|
+
shareddir = lib
|
62
|
+
shared_PROGRAMS = libfb303.so
|
63
|
+
libfb303_so_SOURCES = $(fb303_lib)
|
64
|
+
libfb303_so_CXXFLAGS = $(SHARED_CXXFLAGS)
|
65
|
+
libfb303_so_LDFLAGS = $(SHARED_LDFLAGS)
|
66
|
+
INTERNAL_LIBS = libfb303.so
|
67
|
+
endif
|
68
|
+
|
69
|
+
# Set up Thrift specific activity here.
|
70
|
+
# We assume that a <name>+types.cpp will always be built from <name>.thrift.
|
71
|
+
$(eval $(call thrift_template,.,../if/fb303.thrift,-I $(thrift_home)/share --gen cpp ))
|
72
|
+
|
73
|
+
include_fb303dir = $(includedir)/thrift/fb303
|
74
|
+
include_fb303_HEADERS = FacebookBase.h ServiceTracker.h gen-cpp/FacebookService.h gen-cpp/fb303_constants.h gen-cpp/fb303_types.h
|
75
|
+
|
76
|
+
include_fb303ifdir = $(prefix)/share/fb303/if
|
77
|
+
include_fb303if_HEADERS = ../if/fb303.thrift
|
78
|
+
|
79
|
+
BUILT_SOURCES = thriftstyle
|
80
|
+
|
81
|
+
# Add to pre-existing target clean
|
82
|
+
clean-local: clean-common
|
83
|
+
|
84
|
+
@GLOBAL_FOOTER_MK@
|
@@ -0,0 +1,481 @@
|
|
1
|
+
/*
|
2
|
+
* Licensed to the Apache Software Foundation (ASF) under one
|
3
|
+
* or more contributor license agreements. See the NOTICE file
|
4
|
+
* distributed with this work for additional information
|
5
|
+
* regarding copyright ownership. The ASF licenses this file
|
6
|
+
* to you under the Apache License, Version 2.0 (the
|
7
|
+
* "License"); you may not use this file except in compliance
|
8
|
+
* with the License. You may obtain a copy of the License at
|
9
|
+
*
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
11
|
+
*
|
12
|
+
* Unless required by applicable law or agreed to in writing,
|
13
|
+
* software distributed under the License is distributed on an
|
14
|
+
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
15
|
+
* KIND, either express or implied. See the License for the
|
16
|
+
* specific language governing permissions and limitations
|
17
|
+
* under the License.
|
18
|
+
*/
|
19
|
+
|
20
|
+
#include <sys/time.h>
|
21
|
+
|
22
|
+
#include "FacebookBase.h"
|
23
|
+
#include "ServiceTracker.h"
|
24
|
+
#include "concurrency/ThreadManager.h"
|
25
|
+
|
26
|
+
using namespace std;
|
27
|
+
using namespace facebook::fb303;
|
28
|
+
using namespace apache::thrift::concurrency;
|
29
|
+
|
30
|
+
|
31
|
+
uint64_t ServiceTracker::CHECKPOINT_MINIMUM_INTERVAL_SECONDS = 60;
|
32
|
+
int ServiceTracker::LOG_LEVEL = 5;
|
33
|
+
|
34
|
+
|
35
|
+
ServiceTracker::ServiceTracker(facebook::fb303::FacebookBase *handler,
|
36
|
+
void (*logMethod)(int, const string &),
|
37
|
+
bool featureCheckpoint,
|
38
|
+
bool featureStatusCheck,
|
39
|
+
bool featureThreadCheck,
|
40
|
+
Stopwatch::Unit stopwatchUnit)
|
41
|
+
: handler_(handler), logMethod_(logMethod),
|
42
|
+
featureCheckpoint_(featureCheckpoint),
|
43
|
+
featureStatusCheck_(featureStatusCheck),
|
44
|
+
featureThreadCheck_(featureThreadCheck),
|
45
|
+
stopwatchUnit_(stopwatchUnit),
|
46
|
+
checkpointServices_(0)
|
47
|
+
{
|
48
|
+
if (featureCheckpoint_) {
|
49
|
+
time_t now = time(NULL);
|
50
|
+
checkpointTime_ = now;
|
51
|
+
} else {
|
52
|
+
checkpointTime_ = 0;
|
53
|
+
}
|
54
|
+
}
|
55
|
+
|
56
|
+
/**
|
57
|
+
* Registers the beginning of a "service method": basically, any of
|
58
|
+
* the implementations of Thrift remote procedure calls that a
|
59
|
+
* FacebookBase handler is handling. Controls concurrent
|
60
|
+
* services and reports statistics (via log and via fb303 counters).
|
61
|
+
* Throws an exception if the server is not ready to handle service
|
62
|
+
* methods yet.
|
63
|
+
*
|
64
|
+
* note: The relationship between startService() and finishService()
|
65
|
+
* is currently defined so that a call to finishService() should only
|
66
|
+
* be matched to this call to startService() if this method returns
|
67
|
+
* without exception. It wouldn't be a problem to implement things
|
68
|
+
* the other way, so that *every* start needed a finish, but this
|
69
|
+
* convention was chosen to match the way an object's constructor and
|
70
|
+
* destructor work together, i.e. to work well with ServiceMethod
|
71
|
+
* objects.
|
72
|
+
*
|
73
|
+
* @param const ServiceMethod &serviceMethod A reference to the ServiceMethod
|
74
|
+
* object instantiated at the start
|
75
|
+
* of the service method.
|
76
|
+
*/
|
77
|
+
void
|
78
|
+
ServiceTracker::startService(const ServiceMethod &serviceMethod)
|
79
|
+
{
|
80
|
+
// note: serviceMethod.timer_ automatically starts at construction.
|
81
|
+
|
82
|
+
// log service start
|
83
|
+
logMethod_(5, serviceMethod.signature_);
|
84
|
+
|
85
|
+
// check handler ready
|
86
|
+
if (featureStatusCheck_ && !serviceMethod.featureLogOnly_) {
|
87
|
+
// note: Throwing exceptions before counting statistics. See note
|
88
|
+
// in method header.
|
89
|
+
// note: A STOPPING server is not accepting new connections, but it
|
90
|
+
// is still handling any already-connected threads -- so from the
|
91
|
+
// service method's point of view, a status of STOPPING is a green
|
92
|
+
// light.
|
93
|
+
facebook::fb303::fb_status status = handler_->getStatus();
|
94
|
+
if (status != facebook::fb303::ALIVE
|
95
|
+
&& status != facebook::fb303::STOPPING) {
|
96
|
+
if (status == facebook::fb303::STARTING) {
|
97
|
+
throw ServiceException("Server starting up; please try again later");
|
98
|
+
} else {
|
99
|
+
throw ServiceException("Server not alive; please try again later");
|
100
|
+
}
|
101
|
+
}
|
102
|
+
}
|
103
|
+
|
104
|
+
// check server threads
|
105
|
+
if (featureThreadCheck_ && !serviceMethod.featureLogOnly_) {
|
106
|
+
// note: Might want to put these messages in reportCheckpoint() if
|
107
|
+
// log is getting spammed.
|
108
|
+
if (threadManager_ != NULL) {
|
109
|
+
size_t idle_count = threadManager_->idleWorkerCount();
|
110
|
+
if (idle_count == 0) {
|
111
|
+
stringstream message;
|
112
|
+
message << "service " << serviceMethod.signature_
|
113
|
+
<< ": all threads (" << threadManager_->workerCount()
|
114
|
+
<< ") in use";
|
115
|
+
logMethod_(3, message.str());
|
116
|
+
}
|
117
|
+
}
|
118
|
+
}
|
119
|
+
}
|
120
|
+
|
121
|
+
/**
|
122
|
+
* Logs a significant step in the middle of a "service method"; see
|
123
|
+
* startService.
|
124
|
+
*
|
125
|
+
* @param const ServiceMethod &serviceMethod A reference to the ServiceMethod
|
126
|
+
* object instantiated at the start
|
127
|
+
* of the service method.
|
128
|
+
* @return int64_t Elapsed units (see stopwatchUnit_) since ServiceMethod
|
129
|
+
* instantiation.
|
130
|
+
*/
|
131
|
+
int64_t
|
132
|
+
ServiceTracker::stepService(const ServiceMethod &serviceMethod,
|
133
|
+
const string &stepName)
|
134
|
+
{
|
135
|
+
stringstream message;
|
136
|
+
string elapsed_label;
|
137
|
+
int64_t elapsed = serviceMethod.timer_.elapsedUnits(stopwatchUnit_,
|
138
|
+
&elapsed_label);
|
139
|
+
message << serviceMethod.signature_
|
140
|
+
<< ' ' << stepName
|
141
|
+
<< " [" << elapsed_label << ']';
|
142
|
+
logMethod_(5, message.str());
|
143
|
+
return elapsed;
|
144
|
+
}
|
145
|
+
|
146
|
+
/**
|
147
|
+
* Registers the end of a "service method"; see startService().
|
148
|
+
*
|
149
|
+
* @param const ServiceMethod &serviceMethod A reference to the ServiceMethod
|
150
|
+
* object instantiated at the start
|
151
|
+
* of the service method.
|
152
|
+
*/
|
153
|
+
void
|
154
|
+
ServiceTracker::finishService(const ServiceMethod &serviceMethod)
|
155
|
+
{
|
156
|
+
// log end of service
|
157
|
+
stringstream message;
|
158
|
+
string duration_label;
|
159
|
+
int64_t duration = serviceMethod.timer_.elapsedUnits(stopwatchUnit_,
|
160
|
+
&duration_label);
|
161
|
+
message << serviceMethod.signature_
|
162
|
+
<< " finish [" << duration_label << ']';
|
163
|
+
logMethod_(5, message.str());
|
164
|
+
|
165
|
+
// count, record, and maybe report service statistics
|
166
|
+
if (!serviceMethod.featureLogOnly_) {
|
167
|
+
|
168
|
+
if (!featureCheckpoint_) {
|
169
|
+
|
170
|
+
// lifetime counters
|
171
|
+
// (note: No need to lock statisticsMutex_ if not doing checkpoint;
|
172
|
+
// FacebookService::incrementCounter() is already thread-safe.)
|
173
|
+
handler_->incrementCounter("lifetime_services");
|
174
|
+
|
175
|
+
} else {
|
176
|
+
|
177
|
+
statisticsMutex_.lock();
|
178
|
+
// note: No exceptions expected from this code block. Wrap in a try
|
179
|
+
// just to be safe.
|
180
|
+
try {
|
181
|
+
|
182
|
+
// lifetime counters
|
183
|
+
// note: Good to synchronize this with the increment of
|
184
|
+
// checkpoint services, even though incrementCounter() is
|
185
|
+
// already thread-safe, for the sake of checkpoint reporting
|
186
|
+
// consistency (i.e. since the last checkpoint,
|
187
|
+
// lifetime_services has incremented by checkpointServices_).
|
188
|
+
handler_->incrementCounter("lifetime_services");
|
189
|
+
|
190
|
+
// checkpoint counters
|
191
|
+
checkpointServices_++;
|
192
|
+
checkpointDuration_ += duration;
|
193
|
+
|
194
|
+
// per-service timing
|
195
|
+
// note kjv: According to my tests it is very slightly faster to
|
196
|
+
// call insert() once (and detect not-found) than calling find()
|
197
|
+
// and then maybe insert (if not-found). However, the difference
|
198
|
+
// is tiny for small maps like this one, and the code for the
|
199
|
+
// faster solution is slightly less readable. Also, I wonder if
|
200
|
+
// the instantiation of the (often unused) pair to insert makes
|
201
|
+
// the first algorithm slower after all.
|
202
|
+
map<string, pair<uint64_t, uint64_t> >::iterator iter;
|
203
|
+
iter = checkpointServiceDuration_.find(serviceMethod.name_);
|
204
|
+
if (iter != checkpointServiceDuration_.end()) {
|
205
|
+
iter->second.first++;
|
206
|
+
iter->second.second += duration;
|
207
|
+
} else {
|
208
|
+
checkpointServiceDuration_.insert(make_pair(serviceMethod.name_,
|
209
|
+
make_pair(1, duration)));
|
210
|
+
}
|
211
|
+
|
212
|
+
// maybe report checkpoint
|
213
|
+
// note: ...if it's been long enough since the last report.
|
214
|
+
time_t now = time(NULL);
|
215
|
+
uint64_t check_interval = now - checkpointTime_;
|
216
|
+
if (check_interval >= CHECKPOINT_MINIMUM_INTERVAL_SECONDS) {
|
217
|
+
reportCheckpoint();
|
218
|
+
}
|
219
|
+
|
220
|
+
} catch (...) {
|
221
|
+
statisticsMutex_.unlock();
|
222
|
+
throw;
|
223
|
+
}
|
224
|
+
statisticsMutex_.unlock();
|
225
|
+
|
226
|
+
}
|
227
|
+
}
|
228
|
+
}
|
229
|
+
|
230
|
+
/**
|
231
|
+
* Logs some statistics gathered since the last call to this method.
|
232
|
+
*
|
233
|
+
* note: Thread race conditions on this method could cause
|
234
|
+
* misreporting and/or undefined behavior; the caller must protect
|
235
|
+
* uses of the object variables (and calls to this method) with a
|
236
|
+
* mutex.
|
237
|
+
*
|
238
|
+
*/
|
239
|
+
void
|
240
|
+
ServiceTracker::reportCheckpoint()
|
241
|
+
{
|
242
|
+
time_t now = time(NULL);
|
243
|
+
|
244
|
+
uint64_t check_count = checkpointServices_;
|
245
|
+
uint64_t check_interval = now - checkpointTime_;
|
246
|
+
uint64_t check_duration = checkpointDuration_;
|
247
|
+
|
248
|
+
// export counters for timing of service methods (by service name)
|
249
|
+
handler_->setCounter("checkpoint_time", check_interval);
|
250
|
+
map<string, pair<uint64_t, uint64_t> >::iterator iter;
|
251
|
+
uint64_t count;
|
252
|
+
for (iter = checkpointServiceDuration_.begin();
|
253
|
+
iter != checkpointServiceDuration_.end();
|
254
|
+
iter++) {
|
255
|
+
count = iter->second.first;
|
256
|
+
handler_->setCounter(string("checkpoint_count_") + iter->first, count);
|
257
|
+
if (count == 0) {
|
258
|
+
handler_->setCounter(string("checkpoint_speed_") + iter->first,
|
259
|
+
0);
|
260
|
+
} else {
|
261
|
+
handler_->setCounter(string("checkpoint_speed_") + iter->first,
|
262
|
+
iter->second.second / count);
|
263
|
+
}
|
264
|
+
}
|
265
|
+
|
266
|
+
// reset checkpoint variables
|
267
|
+
// note: Clearing the map while other threads are using it might
|
268
|
+
// cause undefined behavior.
|
269
|
+
checkpointServiceDuration_.clear();
|
270
|
+
checkpointTime_ = now;
|
271
|
+
checkpointServices_ = 0;
|
272
|
+
checkpointDuration_ = 0;
|
273
|
+
|
274
|
+
// get lifetime variables
|
275
|
+
uint64_t life_count = handler_->getCounter("lifetime_services");
|
276
|
+
uint64_t life_interval = now - handler_->aliveSince();
|
277
|
+
|
278
|
+
// log checkpoint
|
279
|
+
stringstream message;
|
280
|
+
message << "checkpoint_time:" << check_interval
|
281
|
+
<< " checkpoint_services:" << check_count
|
282
|
+
<< " checkpoint_speed_sum:" << check_duration
|
283
|
+
<< " lifetime_time:" << life_interval
|
284
|
+
<< " lifetime_services:" << life_count;
|
285
|
+
if (featureThreadCheck_ && threadManager_ != NULL) {
|
286
|
+
size_t worker_count = threadManager_->workerCount();
|
287
|
+
size_t idle_count = threadManager_->idleWorkerCount();
|
288
|
+
message << " total_workers:" << worker_count
|
289
|
+
<< " active_workers:" << (worker_count - idle_count);
|
290
|
+
}
|
291
|
+
logMethod_(4, message.str());
|
292
|
+
}
|
293
|
+
|
294
|
+
/**
|
295
|
+
* Remembers the thread manager used in the server, for monitoring thread
|
296
|
+
* activity.
|
297
|
+
*
|
298
|
+
* @param shared_ptr<ThreadManager> threadManager The server's thread manager.
|
299
|
+
*/
|
300
|
+
void
|
301
|
+
ServiceTracker::setThreadManager(boost::shared_ptr<ThreadManager>
|
302
|
+
threadManager)
|
303
|
+
{
|
304
|
+
threadManager_ = threadManager;
|
305
|
+
}
|
306
|
+
|
307
|
+
/**
|
308
|
+
* Logs messages to stdout; the passed message will be logged if the
|
309
|
+
* passed level is less than or equal to LOG_LEVEL.
|
310
|
+
*
|
311
|
+
* This is the default logging method used by the ServiceTracker. An
|
312
|
+
* alternate logging method (that accepts the same parameters) may be
|
313
|
+
* specified to the constructor.
|
314
|
+
*
|
315
|
+
* @param int level A level associated with the message: higher levels
|
316
|
+
* are used to indicate higher levels of detail.
|
317
|
+
* @param string message The message to log.
|
318
|
+
*/
|
319
|
+
void
|
320
|
+
ServiceTracker::defaultLogMethod(int level, const string &message)
|
321
|
+
{
|
322
|
+
if (level <= LOG_LEVEL) {
|
323
|
+
string level_string;
|
324
|
+
time_t now = time(NULL);
|
325
|
+
char now_pretty[26];
|
326
|
+
ctime_r(&now, now_pretty);
|
327
|
+
now_pretty[24] = '\0';
|
328
|
+
switch (level) {
|
329
|
+
case 1:
|
330
|
+
level_string = "CRITICAL";
|
331
|
+
break;
|
332
|
+
case 2:
|
333
|
+
level_string = "ERROR";
|
334
|
+
break;
|
335
|
+
case 3:
|
336
|
+
level_string = "WARNING";
|
337
|
+
break;
|
338
|
+
case 5:
|
339
|
+
level_string = "DEBUG";
|
340
|
+
break;
|
341
|
+
case 4:
|
342
|
+
default:
|
343
|
+
level_string = "INFO";
|
344
|
+
break;
|
345
|
+
}
|
346
|
+
cout << '[' << level_string << "] [" << now_pretty << "] "
|
347
|
+
<< message << endl;
|
348
|
+
}
|
349
|
+
}
|
350
|
+
|
351
|
+
|
352
|
+
/**
|
353
|
+
* Creates a Stopwatch, which can report the time elapsed since its
|
354
|
+
* creation.
|
355
|
+
*
|
356
|
+
*/
|
357
|
+
Stopwatch::Stopwatch()
|
358
|
+
{
|
359
|
+
gettimeofday(&startTime_, NULL);
|
360
|
+
}
|
361
|
+
|
362
|
+
void
|
363
|
+
Stopwatch::reset()
|
364
|
+
{
|
365
|
+
gettimeofday(&startTime_, NULL);
|
366
|
+
}
|
367
|
+
|
368
|
+
uint64_t
|
369
|
+
Stopwatch::elapsedUnits(Stopwatch::Unit unit, string *label) const
|
370
|
+
{
|
371
|
+
timeval now_time;
|
372
|
+
gettimeofday(&now_time, NULL);
|
373
|
+
time_t duration_secs = now_time.tv_sec - startTime_.tv_sec;
|
374
|
+
|
375
|
+
uint64_t duration_units;
|
376
|
+
switch (unit) {
|
377
|
+
case UNIT_SECONDS:
|
378
|
+
duration_units = duration_secs
|
379
|
+
+ (now_time.tv_usec - startTime_.tv_usec + 500000) / 1000000;
|
380
|
+
if (NULL != label) {
|
381
|
+
stringstream ss_label;
|
382
|
+
ss_label << duration_units << " secs";
|
383
|
+
label->assign(ss_label.str());
|
384
|
+
}
|
385
|
+
break;
|
386
|
+
case UNIT_MICROSECONDS:
|
387
|
+
duration_units = duration_secs * 1000000
|
388
|
+
+ now_time.tv_usec - startTime_.tv_usec;
|
389
|
+
if (NULL != label) {
|
390
|
+
stringstream ss_label;
|
391
|
+
ss_label << duration_units << " us";
|
392
|
+
label->assign(ss_label.str());
|
393
|
+
}
|
394
|
+
break;
|
395
|
+
case UNIT_MILLISECONDS:
|
396
|
+
default:
|
397
|
+
duration_units = duration_secs * 1000
|
398
|
+
+ (now_time.tv_usec - startTime_.tv_usec + 500) / 1000;
|
399
|
+
if (NULL != label) {
|
400
|
+
stringstream ss_label;
|
401
|
+
ss_label << duration_units << " ms";
|
402
|
+
label->assign(ss_label.str());
|
403
|
+
}
|
404
|
+
break;
|
405
|
+
}
|
406
|
+
return duration_units;
|
407
|
+
}
|
408
|
+
|
409
|
+
/**
|
410
|
+
* Creates a ServiceMethod, used for tracking a single service method
|
411
|
+
* invocation (via the ServiceTracker). The passed name of the
|
412
|
+
* ServiceMethod is used to group statistics (e.g. counts and durations)
|
413
|
+
* for similar invocations; the passed signature is used to uniquely
|
414
|
+
* identify the particular invocation in the log.
|
415
|
+
*
|
416
|
+
* note: A version of this constructor is provided that automatically
|
417
|
+
* forms a signature the name and a passed numeric id. Silly, sure,
|
418
|
+
* but commonly used, since it often saves the caller a line or two of
|
419
|
+
* code.
|
420
|
+
*
|
421
|
+
* @param ServiceTracker *tracker The service tracker that will track this
|
422
|
+
* ServiceMethod.
|
423
|
+
* @param const string &name The service method name (usually independent
|
424
|
+
* of service method parameters).
|
425
|
+
* @param const string &signature A signature uniquely identifying the method
|
426
|
+
* invocation (usually name plus parameters).
|
427
|
+
*/
|
428
|
+
ServiceMethod::ServiceMethod(ServiceTracker *tracker,
|
429
|
+
const string &name,
|
430
|
+
const string &signature,
|
431
|
+
bool featureLogOnly)
|
432
|
+
: tracker_(tracker), name_(name), signature_(signature),
|
433
|
+
featureLogOnly_(featureLogOnly)
|
434
|
+
{
|
435
|
+
// note: timer_ automatically starts at construction.
|
436
|
+
|
437
|
+
// invoke tracker to start service
|
438
|
+
// note: Might throw. If it throws, then this object's destructor
|
439
|
+
// won't be called, which is according to plan: finishService() is
|
440
|
+
// only supposed to be matched to startService() if startService()
|
441
|
+
// returns without error.
|
442
|
+
tracker_->startService(*this);
|
443
|
+
}
|
444
|
+
|
445
|
+
ServiceMethod::ServiceMethod(ServiceTracker *tracker,
|
446
|
+
const string &name,
|
447
|
+
uint64_t id,
|
448
|
+
bool featureLogOnly)
|
449
|
+
: tracker_(tracker), name_(name), featureLogOnly_(featureLogOnly)
|
450
|
+
{
|
451
|
+
// note: timer_ automatically starts at construction.
|
452
|
+
stringstream ss_signature;
|
453
|
+
ss_signature << name << " (" << id << ')';
|
454
|
+
signature_ = ss_signature.str();
|
455
|
+
|
456
|
+
// invoke tracker to start service
|
457
|
+
// note: Might throw. If it throws, then this object's destructor
|
458
|
+
// won't be called, which is according to plan: finishService() is
|
459
|
+
// only supposed to be matched to startService() if startService()
|
460
|
+
// returns without error.
|
461
|
+
tracker_->startService(*this);
|
462
|
+
}
|
463
|
+
|
464
|
+
ServiceMethod::~ServiceMethod()
|
465
|
+
{
|
466
|
+
// invoke tracker to finish service
|
467
|
+
// note: Not expecting an exception from this code, but
|
468
|
+
// finishService() might conceivably throw an out-of-memory
|
469
|
+
// exception.
|
470
|
+
try {
|
471
|
+
tracker_->finishService(*this);
|
472
|
+
} catch (...) {
|
473
|
+
// don't throw
|
474
|
+
}
|
475
|
+
}
|
476
|
+
|
477
|
+
uint64_t
|
478
|
+
ServiceMethod::step(const std::string &stepName)
|
479
|
+
{
|
480
|
+
return tracker_->stepService(*this, stepName);
|
481
|
+
}
|