if not modules then modules = { } end modules ['node-snp'] = {
    version   = 1.001,
    comment   = "companion to node-ini.mkiv",
    author    = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
    copyright = "PRAGMA ADE / ConTeXt Development Team",
    license   = "see context related readme files"
}

if not nodes then
    nodes = { } -- also loaded in mtx-timing
end

local snapshots = { }
nodes.snapshots = snapshots

local status    = status

local nodeusage = nodes.pool and nodes.pool.usage
local nodestock = nodes.pool and nodes.pool.stock
local clock     = os.gettimeofday or os.clock -- should go in environment
local lasttime  = clock()
local samples   = { }

function snapshots.takesample(comment)
    if nodeusage then
        local c = clock()
        samples[#samples+1] = {
            nodes            = nodeusage(),
            stock            = nodestock(),
            texcallbacks     = status.getcallbackstate(),
            mpcallbacks      = mplib.getcallbackstate(),
            backendcallbacks = backends.getcallbackstate(),
            luavariables     = status.getluastate(),
            texvariables     = status.gettexstate(),
            comment          = comment,
            variables        = {
                lasttime = c,
                elapsed  = c - lasttime,
            },
            memories         = {
                pool      = status.getpoolstate(),
                hash      = status.gethashstate(),
                lookup    = status.getlookupstate(),
                node      = status.getnodestate(),
                token     = status.gettokenstate(),
                buffer    = status.getbufferstate(),
                input     = status.getinputstate(),
                file      = status.getfilestate(),
                nest      = status.getneststate(),
                parameter = status.getparameterstate(),
                save      = status.getsavestate(),
                expand    = status.getexpandstate(),
                read      = status.getreadstate(),
                font      = status.getfontstate(),
                language  = status.getlanguagestate(),
                mark      = status.getmarkstate(),
                sparse    = status.getsparsestate(),
                insert    = status.getinsertstate(),
                mvl       = status.getmvlstate(),
            },
        }
    end
end

function snapshots.getsamples()
    return samples -- one return value !
end

function snapshots.resetsamples()
    samples = { }
end
