SiddiqSoft.TimeThis 2.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package SiddiqSoft.TimeThis --version 2.0.0                
NuGet\Install-Package SiddiqSoft.TimeThis -Version 2.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="SiddiqSoft.TimeThis" Version="2.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add SiddiqSoft.TimeThis --version 2.0.0                
#r "nuget: SiddiqSoft.TimeThis, 2.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install SiddiqSoft.TimeThis as a Cake Addin
#addin nuget:?package=SiddiqSoft.TimeThis&version=2.0.0

// Install SiddiqSoft.TimeThis as a Cake Tool
#tool nuget:?package=SiddiqSoft.TimeThis&version=2.0.0                

TimeThis : Simple stopwatch for scope

Build Status alternate text is missing from this package README image alternate text is missing from this package README image alternate text is missing from this package README image

Objective

Provide for a simple utility class where we can time the operation of a code block and allow the time to be updated in an optional lambda.

auto handleHTTPMessage(auto req)
{
    if( req == HTTP_GET )
    {
        if( req == "/v1/something" )
        {
            // Consider the scenario where we would like to inform
            // the client time taken.
            auto     resp= createResponse();
            // Declaration of the lambda takes the resp object
            // and sets the header and logs to our global logger
            TimeThis tt{ [&g_logger,&resp](const auto& delta) {
                // Get the time in milliseconds..
                            auto ttx= std::chrono::duration_cast<milliseconds>(tt.elapsed());
                            // Set the diagnostic header
                            resp->addHeader("X-Diagnostic-Time", std::to_string(ttx.count()) );
                            // Log this response
                            g_logger->debug("Processing /v1/something took {}ms", ttx );
                        }
                     }; // notes the call function and starts the stopwatch
            // Some other work..Perhaps lookup db, etc.
            ..
            ..
            resp= ...; // set the body
            return resp;
        }
    }
}
  • Support formatter for std::format when available
  • Support use of std::source_location when available
  • Simple "api" where all of your work is in your lambda

Usage

Options

Nuget

Cmake

    .
    # Fetch the latest or specify the tag..
    FetchContent_Declare(   timethis
                            GIT_REPOSITORY https://github.com/siddiqsoft/TimeThis.git
                            GIT_SHALLOW 1)
    FetchContent_MakeAvailable(timethis)
    .
    .
    target_link_libraries(${PROJECT_NAME} timethis)

You may then use timethis by adding #include "siddiqsoft/timethis.hpp in your client code.

Source Examples

#include "gtest/gtest.h"
#include "siddiqsoft/timethis.hpp"


TEST(examples, Example1)
{
    bool passTest {false};

    try
    {
        // Use initializer list-style instantiation; we do not allow move/assignment construction.
        // Note that the `()` is not required when the lambda/function takes no argument.
        siddiqsoft::TimeThis tt {[&passTest] {
            // Runs when this scope ends
            passTest = true;
        }};

        auto timeTaken= tt.elapsed();
    }
    catch (...) {
        EXPECT_TRUE(false); // if we throw then the test fails.
    }

    // Iff the lambda runs, it should be true
    EXPECT_TRUE(passTest);
}

Notes

  • Supported prefix:
    • Darwin
    • Linux
    • Windows

<small align="right">

© 2021 Siddiq Software LLC. All rights reserved.

</small>

Product Compatible and additional computed target framework versions.
native native is compatible. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

This package has no dependencies.

NuGet packages (1)

Showing the top 1 NuGet packages that depend on SiddiqSoft.TimeThis:

Package Downloads
SiddiqSoft.CosmosClient

Azure Cosmos REST-API Client for Modern C++

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.1.2 159 11/14/2024
2.1.1 82 11/8/2024
2.0.2 85 11/5/2024
2.0.1 79 11/5/2024
2.0.0 79 11/5/2024
1.3.1 81 11/5/2024
1.3.0 100 10/30/2024
1.2.1 83 10/30/2024
1.1.5 716 11/20/2021
1.1.4 331 7/30/2021
1.1.3 312 7/28/2021
1.1.2 362 7/28/2021
1.1.1 354 7/28/2021
1.1.0 9,091 7/28/2021
1.0.1 8,561 7/28/2021