Home | History | Annotate | Download | only in src
      1 #include "usdt_sample_lib1/lib1.h"
      2 
      3 // std
      4 #include <atomic>
      5 #include <chrono>
      6 #include <iostream>
      7 #include <thread>
      8 
      9 // usdt_sample_lib1
     10 #include "folly/tracing/StaticTracepoint.h"
     11 
     12 // When using systemtap-sdt-devel, the following file should be included:
     13 // #include "usdt_sample_lib1/lib1_sdt.h"
     14 
     15 OperationRequest::OperationRequest(const std::string& input_)
     16     : _input(input_)
     17 {
     18 }
     19 
     20 OperationResponse::OperationResponse(const std::string& output_)
     21     : _output(output_)
     22 {
     23 }
     24 
     25 OperationProvider::OperationProvider(std::uint32_t minLatencyMs_, std::uint32_t maxLatencyMs_)
     26     : _gen(std::random_device()())
     27     , _dis(minLatencyMs_, maxLatencyMs_)
     28 {
     29 }
     30 
     31 std::shared_future<OperationResponse> OperationProvider::executeAsync(const OperationRequest& request)
     32 {
     33     static std::atomic<std::uint64_t> operationIdCounter(0);
     34     std::uint64_t operationId = operationIdCounter++;
     35 
     36     FOLLY_SDT(usdt_sample_lib1, operation_start, operationId, request.input().c_str());
     37 
     38 /* Below an example of how to use this sample with systemtap-sdt-devel:
     39     if (USDT_SAMPLE_LIB1_OPERATION_START_ENABLED()) {
     40         //std::cout << "operation_start probe enabled." << std::endl;
     41         USDT_SAMPLE_LIB1_OPERATION_START(operationId, &inputBuf);
     42     }
     43 */
     44 
     45     auto latencyMs = _dis(_gen);
     46 
     47     return std::async(std::launch::async, [latencyMs, operationId, request]() {
     48         std::this_thread::sleep_for(std::chrono::milliseconds(latencyMs));
     49 
     50         auto output = std::string("resp_") + request.input();
     51         OperationResponse response(output);
     52 
     53         FOLLY_SDT(usdt_sample_lib1, operation_end, operationId, response.output().c_str());
     54 
     55 /* Below an example of how to use this sample with systemtap-sdt-devel:
     56         if (USDT_SAMPLE_LIB1_OPERATION_END_ENABLED()) {
     57             //std::cout << "operation_end probe enabled." << std::endl;
     58             USDT_SAMPLE_LIB1_OPERATION_END(operationId, &outputBuf);
     59         }
     60 */
     61 
     62         return response;
     63     });
     64 }
     65