• fixed a bug with syncing endpoints

  • improved pathpoint sync logic

  • fixed an issue registering memory pressure handler

  • improved sync logic - archives will no longer read already read pathpoints


  • fixed a dangerous exploit

  • updated to work with latest cryptography


  • changed NGTT port to 2405


  • added option to clean all synced and closed events


  • enabled smok-client to successfully parse 204 as response


  • removed unused sync logs and pathpoints from NGTT

  • fixed string interpolation syntax for Python 3.6

  • code will behave better in HTTP 4xx situations

  • changed maximum logging amount behaviour


  • fixed a bug with logging bad exceptions

  • removed debug logging after syncing a pathpoint

  • fixed a bug with writing a sensor


  • fixed a bug with initializing predicates

  • fixed a bug with deleting predicates

  • removed some abstractmethods’ from checkpoints

  • fixed a bug with opening events


  • removed unnecessary profiling with logs

  • restored some debug-level logs

  • increased communicator timeout to 60s

  • increased logs timeout to 40s and added exponential backoff in case of failure

  • log syncer will display the invalid logs if a 4xx is seen from the server

  • most calls related to pathpoints and sensors will be available in the no-pathpoint mode

(you still have to provide a sensor and a pathpoint database for it to work).

  • fixed a bug with getting sensors locking up on



  • improved logging for NGTT

  • improved behaviour of the logging subsystem on low memory conditions

  • improved behaviour of connection resetting

  • fixed a bug that wouldn’t allow smok to run on Python 3.5

  • HTTP API will use minijson everywhere

  • logs won’t be synced via NGTT anymore - they are dropped too often

  • data won’t be synced via NGTT anymore - they take too long

  • SMOKDevice will raise RuntimeErrors on most calls if called after close

  • new considerations for PPDatabase and EventDatabase


  • fixed reconnecting

  • SMOKLogHandler will prune the log queue if on a low memory condition (severity condition 2)


  • removed redundant logging

  • logging is mow more bulletproof

  • bugfixes:
    • syncing data via NGTT can survive a connection reset

    • failing to sync data will not kill CommunicatorThread anymore


  • new feature: improved compression of data being sent
    • logs and pathpoint data will be compressed using MiniJSON

    • also used much shorter forms

  • new feature: pathpoint and log upload via NGTT

  • added NGTT module

  • Section does not need to be confirmed by the custom executor

  • orders now are str-able

  • log entries won’t be logged if that would overfill the buffer

  • logs will wait for at least 1 second for more entries to become available to sync them


  • bugfix release added minijson to requirements

  • v0.15 was pulled


  • added support for the NGTT protocol to this package

  • fixed the bug with loading certificates


  • added alternate syntax to PathpointValue.set_new_value

  • bugfix for setting new values to pathpoints


  • API endpoint changed to https for testing


  • added get_all_events

  • added support for deleting BAOBs

  • fixed a bug wherein metadata would still sync despite allow_sync being set to False

  • fixed a bug with non-operational PicklingMacroDatabase


  • SMOKDevice.open_event will accept any dictable metadata

  • fixed a bug about creating new events

  • delayed_boot

  • changed default provide_unknown_pathpoint to return a Pathpoint instead of raising a KeyError

    by default. I simply trust the user to provide a Pathpoint DB implementation sane enough to realize his aims.

  • fixed a bug where get_all_keys returns a key that later is proven not to exist

  • added consistency checked for BaseBAOBDatabase

  • fixed a bug with synchronizing predicates


  • Predicate state will be preserved each tick if it changes

  • changed the API of the predicate database

  • added option to specify a timestamp for event close

  • bugfix fixed certificate mess when connecting to production

  • added the RAPID CA certificate

  • bugfix updating a BAOB could trigger notification about BAOBs being synced for the first time


  • fixed SMOKDevice.reset_predicates


  • hotfix for a critical bug in 0.14


API breaking change:

  • registering statistics overhauled

Non-API breaking changes:

  • added SMOKDevice.on_baob_updated

  • added SMOKDevice.allow_sync

  • remove an useless * 1.1 in CommunicatorThread

  • added on_failed_sync and on_successful_sync

  • certificates given with CRLF line ends will be processed successfully

  • fixed a bug in DataSyncDict

  • added SMOKDevice.reset_predicates

  • added predicate databasing

  • added name mangling to PicklingDatabases

  • fixed pickle to use highest protocol in PicklingDatabases

  • Pathpoint will try to read it’s previous current value upon startup

  • refactored Pathpoint.get


  • OrderExecutorThread will now wait startup_delay seconds as well

  • added Predicate.on_group_changed

  • statistic name in BaseStatistic is no longer mandatory to override


  • changed the parameter name in SMOKClient.execute_sysctl to match order fields

  • added support for Sensor Writes

  • improved exception handling

  • added on_verbose_name_changed to Predicate

  • added an extra parameter to register_statistic


  • better exception messages for invalid certs

  • added support for SysctlOrders

  • added support for BAOB updates via sysctls

  • failure to send a Message will be retried up to 3 times

  • fixed a bug with querying for macros using a float

  • fixed pickling macros

  • fixed a bug with syncing pathpoint data

  • fixed a bug with PicklingMacroDatabase


Following API breaking changes were introduced:

  • added a termination detector to sync_sections

Following non-breaking changes were introduced:

  • added caching for plain metadata

  • added Sensor.write

  • failing writes will be treated the same way as failing reads - they will be logged

  • added automatic order retry

  • smarter waiting (time spent executing read/write/message orders counts into that too)

  • added a proofing against appending a pathpoint value with lower timestamp than current

  • syncing invalid data (HTTP 4xx instead of 5xx) will mark it as synchronized correctly

  • made Pathpoint.set_new_value’s usage more ubiquitous
    • since Executor will now use it to write new Pathpoint’s values

  • added an option to register a callable to be fired each time Pathpoint value changes

  • added an option to limit the frequency of Pathpoint’s reads

  • added an option to read without spawning a Thread and a Future

  • added an option to retrieve SMOK’s master certificate

  • added NullEventDatabase


  • patched raising exceptions from the API on staging environment

  • certs will be used in conjunction with HTTPS only in production

  • removed debug logging before data sync

  • no API call will be dispatched if there’s no data to sync

  • adjusted macro update interval

  • removed extra logging from smok.threads.executor


  • add support for reparse pathpoints

  • add support for getting archive data from sensors

  • fixed a bug with downloading BAOBS

  • fixed a bug with reading sensors via on_read

  • fixed a bug with reporting exceptions

  • BAOBs will be marked as downloaded after 3 attempts were made

  • fixed different exception that OperationFailedError raised during a read to be logged


  • add BAOBs

  • Sensor class is now eq-able and hashable

  • added option to disable pathpoints and predicates

  • added archiving data extra DB


  • added automatic log compression

  • superficial print() removed

  • added sensor database

  • increased the startup delay to begin communication by 5 seconds to 10 seconds
    • this delay is now programmable

  • fixed a bug with updating metadata

  • removed a debug log upon syncing pathpoints


  • fixed a bug where LogPublisherThread would throw during shutdown

  • API will return a ResponseError if something fails

  • fixed a bug where log records sent to the server were not formatted correctly

  • logging was adjusted

  • when formatting the log record fails, it’s message will be appended along with it’s args

  • fixed a critical bug with storing pathpoint values

  • fixed a bug with executor not recognizing the default execute_a_section

  • fixed a bug wherein timestamps were written 1000 times larger than necessary

  • pathpoints will be uploaded as soon as there’s new data


  • added SMOKDevice._execute_message_order

  • log publisher has now a timeout

  • clarified Pathpoint.get_archive

  • improving handling error messages from the API


  • renamed from smok-client to smok


  • fixed closing `Event`s

  • added pickling Event and Macro

  • on_read Future can now return None


  • added Pathpoint.get_archive

  • definitively removed set metadata

  • added custom SMOKDevice.execute_section


  • added PicklingMetadataDatabase

  • added SMOKDevice.sync_sections

  • added SMOKDevice.open_event and SMOKDevice.close_event

    and SMOKDevice.get_all_open_events


  • added support for plain metadata


  • added logging


  • renamed BaseEventDatabase.get_data_to_sync to



  • added an option not to start macros and archives

  • added __slots__ to BaseDatabases


  • added setting and reading linkstate and instrumentation metadata for slave devices

  • added a true macro database


  • added pluggable pathpoint value databases

  • Section is now a Future

  • bugfix: timestamp from restored data would be needlessly bumped up

  • added option to create Events