From 2e56cce946984ae1e4effcd42b475b145d264c16 Mon Sep 17 00:00:00 2001 From: davidlion Date: Wed, 6 Nov 2024 00:56:04 -0500 Subject: [PATCH] v0.0.5-beta: Initial implementation of IRv2. done: - serder working with latest ffi-core - reader+writer working with latest ffi-core - bazel build + unit tests passing - task (local) build + unit tests passing todo: - rewrite documentation - do a pass on golangci-lint config - fix c++ linting errors - update linting to taskfile - update github workflows/CI to taskfile - port task-utils.yml to yscope-dev-utils - update ffi-core msgpack api to pass linting --- .gitignore | 11 +- .gitmodules | 3 + .yamllint.yml | 53 +++ MODULE.bazel | 14 +- MODULE.bazel.lock | 50 +-- {cpp => bazel}/deps.bzl | 68 ++-- bazel/nlohmann_json.patch | 17 + cpp/.clang-tidy | 182 +++++---- cpp/BUILD.bazel | 4 +- cpp/CMakeLists.txt | 154 ++++---- cpp/src/ffi_go/api_decoration.h | 8 +- cpp/src/ffi_go/defs.h | 2 +- cpp/src/ffi_go/ir/decoder.cpp | 107 ----- cpp/src/ffi_go/ir/decoder.h | 81 ---- cpp/src/ffi_go/ir/deserializer.cpp | 407 +++++-------------- cpp/src/ffi_go/ir/deserializer.h | 111 ++---- cpp/src/ffi_go/ir/encoder.cpp | 143 ------- cpp/src/ffi_go/ir/encoder.h | 91 ----- cpp/src/ffi_go/ir/serializer.cpp | 213 ++++------ cpp/src/ffi_go/ir/serializer.h | 125 +++--- cpp/src/ffi_go/ir/types.hpp | 80 ---- cpp/src/ffi_go/search/wildcard_query.cpp | 32 -- cpp/src/ffi_go/search/wildcard_query.h | 71 ---- cpp/src/ffi_go/types.hpp | 27 -- cpp/src/lint/msgpack.hpp | 482 +++++++++++++++++++++++ ffi/ffi.go | 27 +- generate.go | 6 - go.mod | 7 +- go.sum | 12 + include/ffi_go/api_decoration.h | 8 +- include/ffi_go/defs.h | 2 +- include/ffi_go/ir/decoder.h | 81 ---- include/ffi_go/ir/deserializer.h | 111 ++---- include/ffi_go/ir/encoder.h | 91 ----- include/ffi_go/ir/serializer.h | 125 +++--- include/ffi_go/search/wildcard_query.h | 71 ---- ir/BUILD.bazel | 3 +- ir/build_amd64.go | 4 +- ir/build_arm64.go | 4 +- ir/cgo_defs.go | 17 - ir/decoder.go | 94 ----- ir/deserializer.go | 267 ++----------- ir/encoder.go | 102 ----- ir/ir.go | 10 +- ir/{reader_test.go => ir_file_test.go} | 26 +- ir/ir_test.go | 53 ++- ir/reader.go | 118 +----- ir/serder_test.go | 76 +--- ir/serializer.go | 171 ++++---- ir/writer.go | 102 ++--- ir/writeread_test.go | 20 +- lib/libclp_ffi_linux_amd64.a | Bin 632214 -> 1613986 bytes search/BUILD.bazel | 21 - search/build_amd64.go | 10 - search/build_arm64.go | 10 - search/build_external.go | 10 - search/wildcard_query.go | 88 ----- task-lint.yml | 37 ++ task-utils.yml | 186 +++++++++ taskfile.yml | 169 ++++++++ tools/yscope-dev-utils | 1 + 61 files changed, 1822 insertions(+), 2854 deletions(-) create mode 100644 .yamllint.yml rename {cpp => bazel}/deps.bzl (55%) create mode 100644 bazel/nlohmann_json.patch delete mode 100644 cpp/src/ffi_go/ir/decoder.cpp delete mode 100644 cpp/src/ffi_go/ir/decoder.h delete mode 100644 cpp/src/ffi_go/ir/encoder.cpp delete mode 100644 cpp/src/ffi_go/ir/encoder.h delete mode 100644 cpp/src/ffi_go/ir/types.hpp delete mode 100644 cpp/src/ffi_go/search/wildcard_query.cpp delete mode 100644 cpp/src/ffi_go/search/wildcard_query.h delete mode 100644 cpp/src/ffi_go/types.hpp create mode 100644 cpp/src/lint/msgpack.hpp delete mode 100644 generate.go delete mode 100644 include/ffi_go/ir/decoder.h delete mode 100644 include/ffi_go/ir/encoder.h delete mode 100644 include/ffi_go/search/wildcard_query.h delete mode 100644 ir/decoder.go delete mode 100644 ir/encoder.go rename ir/{reader_test.go => ir_file_test.go} (54%) delete mode 100644 search/BUILD.bazel delete mode 100644 search/build_amd64.go delete mode 100644 search/build_arm64.go delete mode 100644 search/build_external.go delete mode 100644 search/wildcard_query.go create mode 100644 task-lint.yml create mode 100644 task-utils.yml create mode 100644 taskfile.yml create mode 160000 tools/yscope-dev-utils diff --git a/.gitignore b/.gitignore index dd6fa26..89b99c3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,13 +1,18 @@ -# Bazel-generated files +# Bazel generated files bazel-bin bazel-ffi-go bazel-out bazel-testlogs +# Task generated files +.task/ + +# Build directory +build/ + # C++ build generated files cpp/.cache/ -cpp/build/ **/compile_commands.json # Submodules -cpp/clp +tools/yscope-dev-utils diff --git a/.gitmodules b/.gitmodules index e69de29..2d96d0d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "tools/yscope-dev-utils"] + path = tools/yscope-dev-utils + url = https://github.com/y-scope/yscope-dev-utils.git diff --git a/.yamllint.yml b/.yamllint.yml new file mode 100644 index 0000000..ed28905 --- /dev/null +++ b/.yamllint.yml @@ -0,0 +1,53 @@ +extends: "default" + +yaml-files: + - ".clang-format" + - ".clang-tidy" + - ".golangci.yml" + - ".yamllint.yml" + - "*.yaml" + - "*.yml" + +rules: + anchors: + forbid-duplicated-anchors: true + forbid-unused-anchors: true + + braces: + min-spaces-inside-empty: 0 + max-spaces-inside-empty: 0 + + brackets: + min-spaces-inside-empty: 0 + max-spaces-inside-empty: 0 + + comments: + # Disabled so that snippets can be uncommented easily + require-starting-space: false + + document-end: + present: false + + document-start: + present: false + + float-values: + require-numeral-before-decimal: true + + indentation: + spaces: 2 + + line-length: + max: 100 + allow-non-breakable-words: false + + octal-values: + forbid-implicit-octal: true + forbid-explicit-octal: false + + quoted-strings: + quote-type: "double" + + truthy: + # Disabled for keys since GitHub actions uses the truthy-looking key "on" + check-keys: false diff --git a/MODULE.bazel b/MODULE.bazel index 554f11c..26fb674 100644 --- a/MODULE.bazel +++ b/MODULE.bazel @@ -1,6 +1,6 @@ module( name = "com_github_y_scope_clp_ffi_go", - version = "0.0.5-beta", + version = "0.0.6-beta", ) bazel_dep(name = "gazelle", version = "0.37.0") @@ -15,7 +15,17 @@ go_deps.from_file(go_mod = "//:go.mod") use_repo( go_deps, "com_github_klauspost_compress", + "com_github_vmihailenco_msgpack_v5", ) -clp_ffi_go_ext_deps = use_extension("//cpp:deps.bzl", "clp_ffi_go_ext_deps") +# c++ +bazel_dep(name = "msgpack-c", version = "6.1.0") +bazel_dep(name = "nlohmann_json", version = "3.11.3.bcr.1") +single_version_override( + module_name = "nlohmann_json", + patches = ["//:bazel/nlohmann_json.patch"], +) + +clp_ffi_go_ext_deps = use_extension("//:bazel/deps.bzl", "clp_ffi_go_ext_deps") use_repo(clp_ffi_go_ext_deps, "com_github_y_scope_clp") +use_repo(clp_ffi_go_ext_deps, "clp_ext_com_github_ned14_outcome") diff --git a/MODULE.bazel.lock b/MODULE.bazel.lock index edbd719..8246997 100644 --- a/MODULE.bazel.lock +++ b/MODULE.bazel.lock @@ -30,6 +30,10 @@ "https://bcr.bazel.build/modules/gazelle/0.37.0/source.json": "b3adc10e2394e7f63ea88fb1d622d4894bfe9ec6961c493ae9a887723ab16831", "https://bcr.bazel.build/modules/googletest/1.11.0/MODULE.bazel": "3a83f095183f66345ca86aa13c58b59f9f94a2f81999c093d4eeaa2d262d12f4", "https://bcr.bazel.build/modules/googletest/1.11.0/source.json": "c73d9ef4268c91bd0c1cd88f1f9dfa08e814b1dbe89b5f594a9f08ba0244d206", + "https://bcr.bazel.build/modules/msgpack-c/6.1.0/MODULE.bazel": "2822ba864146468b3128216ad416f8b39b511395e88d896d472c9c6b30b1ceb2", + "https://bcr.bazel.build/modules/msgpack-c/6.1.0/source.json": "b412dd4c8290ea0cce122616076e62ffe1b0799cebd6422608c407608193c1c9", + "https://bcr.bazel.build/modules/nlohmann_json/3.11.3.bcr.1/MODULE.bazel": "83bbe365b1eb640ef903df2240f11e7df8f70563199bc17085816033bc36da89", + "https://bcr.bazel.build/modules/nlohmann_json/3.11.3.bcr.1/source.json": "7b0b57c1a789dd0b81b8e6f639f36f96a6f4534c2f2ed4430118af6769b00cdf", "https://bcr.bazel.build/modules/platforms/0.0.10/MODULE.bazel": "8cb8efaf200bdeb2150d93e162c40f388529a25852b332cec879373771e48ed5", "https://bcr.bazel.build/modules/platforms/0.0.10/source.json": "f22828ff4cf021a6b577f1bf6341cb9dcd7965092a439f64fc1bb3b7a5ae4bd5", "https://bcr.bazel.build/modules/platforms/0.0.4/MODULE.bazel": "9b328e31ee156f53f3c416a64f8491f7eb731742655a47c9eec4703a71644aee", @@ -53,8 +57,8 @@ "https://bcr.bazel.build/modules/rules_go/0.48.1/MODULE.bazel": "ad27296e268624d7d53043fe5ff88d5486e7a29596336f629b379b83c67e6d8b", "https://bcr.bazel.build/modules/rules_go/0.48.1/source.json": "83321289aa500090871d8f761d991f0534946414640cce5c18d2df44cff8e082", "https://bcr.bazel.build/modules/rules_java/4.0.0/MODULE.bazel": "5a78a7ae82cd1a33cef56dc578c7d2a46ed0dca12643ee45edbb8417899e6f74", - "https://bcr.bazel.build/modules/rules_java/7.6.1/MODULE.bazel": "2f14b7e8a1aa2f67ae92bc69d1ec0fa8d9f827c4e17ff5e5f02e91caa3b2d0fe", - "https://bcr.bazel.build/modules/rules_java/7.6.1/source.json": "8f3f3076554e1558e8e468b2232991c510ecbcbed9e6f8c06ac31c93bcf38362", + "https://bcr.bazel.build/modules/rules_java/7.6.5/MODULE.bazel": "481164be5e02e4cab6e77a36927683263be56b7e36fef918b458d7a8a1ebadb1", + "https://bcr.bazel.build/modules/rules_java/7.6.5/source.json": "a805b889531d1690e3c72a7a7e47a870d00323186a9904b36af83aa3d053ee8d", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/MODULE.bazel": "a56b85e418c83eb1839819f0b515c431010160383306d13ec21959ac412d2fe7", "https://bcr.bazel.build/modules/rules_jvm_external/4.4.2/source.json": "a075731e1b46bc8425098512d038d416e966ab19684a10a34f4741295642fc35", "https://bcr.bazel.build/modules/rules_license/0.0.3/MODULE.bazel": "627e9ab0247f7d1e05736b59dbb1b6871373de5ad31c3011880b4133cafd4bd0", @@ -76,43 +80,43 @@ "https://bcr.bazel.build/modules/upb/0.0.0-20220923-a547704/source.json": "f1ef7d3f9e0e26d4b23d1c39b5f5de71f584dd7d1b4ef83d9bbba6ec7a6a6459", "https://bcr.bazel.build/modules/zlib/1.2.11/MODULE.bazel": "07b389abc85fdbca459b69e2ec656ae5622873af3f845e1c9d80fe179f3effa0", "https://bcr.bazel.build/modules/zlib/1.2.12/MODULE.bazel": "3b1a8834ada2a883674be8cbd36ede1b6ec481477ada359cd2d3ddc562340b27", - "https://bcr.bazel.build/modules/zlib/1.3/MODULE.bazel": "6a9c02f19a24dcedb05572b2381446e27c272cd383aed11d41d99da9e3167a72", - "https://bcr.bazel.build/modules/zlib/1.3/source.json": "b6b43d0737af846022636e6e255fd4a96fee0d34f08f3830e6e0bac51465c37c" + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/MODULE.bazel": "af322bc08976524477c79d1e45e241b6efbeb918c497e8840b8ab116802dda79", + "https://bcr.bazel.build/modules/zlib/1.3.1.bcr.3/source.json": "2be409ac3c7601245958cd4fcdff4288be79ed23bd690b4b951f500d54ee6e7d" }, "selectedYankedVersions": {}, "moduleExtensions": { - "//cpp:deps.bzl%clp_ffi_go_ext_deps": { + "//:bazel/deps.bzl%clp_ffi_go_ext_deps": { "general": { - "bzlTransitiveDigest": "B9oCb6w6eVxTzje85vfRMCZ78QDtBXi/nyYZj34KAMM=", - "usagesDigest": "D7z6fAnG/fRPs4uUPHy4GqCSlDUekEARjYSWg2XD2fc=", + "bzlTransitiveDigest": "uhvRjHIujSi6OMTa9C72jJ+wzp/9cfca2Dj5nmaEQt4=", + "usagesDigest": "usgVVfzo8JxL9xNLEMqGtFoGQLiBNEOtAErBV3dPAKc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "clp_ext_com_github_nlohmann_json": { + "clp_ext_com_github_ned14_outcome": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "sha256": "8cbda3504fd1624fbce641d3f6b884c76e5afead1fa6d6abfcbea4b734dc634b", + "sha256": "6505320e8d0e55913a9e3c6b33d03c61967429535fbb1fb8613c21527bb15110", "urls": [ - "https://github.com/nlohmann/json/archive/fec56a1a16c6e1c1b1f4e116a20e79398282626c.zip" + "https://github.com/ned14/outcome/archive/v2.2.10.tar.gz" ], - "strip_prefix": "json-fec56a1a16c6e1c1b1f4e116a20e79398282626c", - "add_prefix": "json", - "build_file_content": "\ncc_library(\n name = \"libjson\",\n srcs = [\"json/single_include/nlohmann/json.hpp\"],\n hdrs = [\"json/single_include/nlohmann/json.hpp\"],\n includes = [\".\"],\n visibility = [\"//visibility:public\"],\n)\n" + "strip_prefix": "outcome-2.2.10", + "add_prefix": "outcome", + "build_file_content": "\ncc_library(\n name = \"outcome\",\n hdrs = [\"outcome/single-header/outcome.hpp\"],\n includes = [\".\"],\n visibility = [\"//visibility:public\"],\n)\n" } }, "com_github_y_scope_clp": { "bzlFile": "@@bazel_tools//tools/build_defs/repo:http.bzl", "ruleClassName": "http_archive", "attributes": { - "sha256": "1daaa432357ed470eb8a2b5e7c8b4064418fa0f5d89fd075c6f1b4aef1ac6319", + "sha256": "b7ab19af62fb0601d858047452e2f330489070caccd4aaf1e09709f6ca6324ab", "urls": [ - "https://github.com/y-scope/clp/archive/3c1f0ad1c44b53d6c17fd7c1d578ec61616b5661.zip" + "https://github.com/y-scope/clp/archive/e21672b906641c4724a25ea74f13857afdebe0e8.tar.gz" ], - "strip_prefix": "clp-3c1f0ad1c44b53d6c17fd7c1d578ec61616b5661", + "strip_prefix": "clp-e21672b906641c4724a25ea74f13857afdebe0e8", "add_prefix": "clp", - "build_file_content": "\ncc_library(\n name = \"libclp_ffi_core\",\n srcs = [\n \"clp/components/core/src/clp/BufferReader.cpp\",\n \"clp/components/core/src/clp/ReaderInterface.cpp\",\n \"clp/components/core/src/clp/ffi/encoding_methods.cpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/encoding_methods.cpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/decoding_methods.cpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/utils.cpp\",\n \"clp/components/core/src/clp/ir/parsing.cpp\",\n \"clp/components/core/src/clp/string_utils/string_utils.cpp\",\n ],\n hdrs = [\n \"clp/components/core/src/clp/BufferReader.hpp\",\n \"clp/components/core/src/clp/Defs.h\",\n \"clp/components/core/src/clp/ErrorCode.hpp\",\n \"clp/components/core/src/clp/ReaderInterface.hpp\",\n \"clp/components/core/src/clp/ffi/encoding_methods.hpp\",\n \"clp/components/core/src/clp/ffi/encoding_methods.inc\",\n \"clp/components/core/src/clp/ffi/ir_stream/byteswap.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/encoding_methods.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/decoding_methods.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/decoding_methods.inc\",\n \"clp/components/core/src/clp/ffi/ir_stream/protocol_constants.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/utils.hpp\",\n \"clp/components/core/src/clp/ir/parsing.inc\",\n \"clp/components/core/src/clp/ir/parsing.hpp\",\n \"clp/components/core/src/clp/ir/types.hpp\",\n \"clp/components/core/src/clp/string_utils/string_utils.hpp\",\n \"clp/components/core/src/clp/TraceableException.hpp\",\n \"clp/components/core/src/clp/time_types.hpp\",\n \"clp/components/core/src/clp/type_utils.hpp\",\n ],\n includes = [\n \"./clp/components/core/src\",\n \"./clp/components/core/src/clp\",\n ],\n copts = [\n \"-std=c++20\",\n ] + select({\n \"@platforms//os:osx\": [\n \"-mmacosx-version-min=10.15\",\n ],\n \"//conditions:default\": [],\n }),\n deps = [\n \"@clp_ext_com_github_nlohmann_json//:libjson\",\n ],\n visibility = [\"//visibility:public\"],\n)\n" + "build_file_content": "\ncc_library(\n name = \"libclp_ffi_core\",\n srcs = [\n \"clp/components/core/src/clp/BufferReader.cpp\",\n \"clp/components/core/src/clp/ffi/encoding_methods.cpp\",\n \"clp/components/core/src/clp/ffi/KeyValuePairLogEvent.cpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/decoding_methods.cpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/encoding_methods.cpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.cpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/Serializer.cpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/utils.cpp\",\n \"clp/components/core/src/clp/ffi/SchemaTree.cpp\",\n \"clp/components/core/src/clp/ir/EncodedTextAst.cpp\",\n \"clp/components/core/src/clp/ir/parsing.cpp\",\n \"clp/components/core/src/clp/ReaderInterface.cpp\",\n \"clp/components/core/src/clp/string_utils/string_utils.cpp\",\n ],\n hdrs = [\n \"clp/components/core/src/clp/BufferReader.hpp\",\n \"clp/components/core/src/clp/Defs.h\",\n \"clp/components/core/src/clp/ErrorCode.hpp\",\n \"clp/components/core/src/clp/ReaderInterface.hpp\",\n \"clp/components/core/src/clp/ffi/encoding_methods.hpp\",\n \"clp/components/core/src/clp/ffi/encoding_methods.inc\",\n \"clp/components/core/src/clp/ffi/KeyValuePairLogEvent.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/byteswap.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/Deserializer.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/encoding_methods.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/decoding_methods.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/decoding_methods.inc\",\n \"clp/components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/IrUnitHandlerInterface.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/IrUnitType.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/protocol_constants.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/Serializer.hpp\",\n \"clp/components/core/src/clp/ffi/ir_stream/utils.hpp\",\n \"clp/components/core/src/clp/ffi/SchemaTree.hpp\",\n \"clp/components/core/src/clp/ffi/Value.hpp\",\n \"clp/components/core/src/clp/ir/EncodedTextAst.hpp\",\n \"clp/components/core/src/clp/ir/parsing.inc\",\n \"clp/components/core/src/clp/ir/parsing.hpp\",\n \"clp/components/core/src/clp/ir/types.hpp\",\n \"clp/components/core/src/clp/string_utils/string_utils.hpp\",\n \"clp/components/core/src/clp/TraceableException.hpp\",\n \"clp/components/core/src/clp/time_types.hpp\",\n \"clp/components/core/src/clp/type_utils.hpp\",\n ],\n includes = [\n \"clp/components/core/src\",\n \"clp/components/core/src/clp\",\n ],\n copts = [\n \"-std=c++20\",\n ] + select({\n \"@platforms//os:osx\": [\n \"-mmacosx-version-min=10.15\",\n ],\n \"//conditions:default\": [],\n }),\n deps = [\n \"@clp_ext_com_github_ned14_outcome//:outcome\",\n \"@nlohmann_json//:singleheader-json\",\n \"@msgpack-c//:msgpack\",\n ],\n visibility = [\"//visibility:public\"],\n)\n" } } }, @@ -128,19 +132,19 @@ "@@apple_support~//crosstool:setup.bzl%apple_cc_configure_extension": { "general": { "bzlTransitiveDigest": "PjIds3feoYE8SGbbIq2SFTZy3zmxeO2tQevJZNDo7iY=", - "usagesDigest": "aLmqbvowmHkkBPve05yyDNGN7oh7QE9kBADr3QIZTZs=", + "usagesDigest": "+hz7IHWN6A1oVJJWNDB6yZRG+RYhF76wAYItpAeIUIg=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, "generatedRepoSpecs": { - "local_config_apple_cc": { + "local_config_apple_cc_toolchains": { "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf", + "ruleClassName": "_apple_cc_autoconf_toolchains", "attributes": {} }, - "local_config_apple_cc_toolchains": { + "local_config_apple_cc": { "bzlFile": "@@apple_support~//crosstool:setup.bzl", - "ruleClassName": "_apple_cc_autoconf_toolchains", + "ruleClassName": "_apple_cc_autoconf", "attributes": {} } }, @@ -156,7 +160,7 @@ "@@platforms//host:extension.bzl%host_platform": { "general": { "bzlTransitiveDigest": "xelQcPZH8+tmuOHVjL9vDxMnnQNMlwj0SlvgoqBkm4U=", - "usagesDigest": "V1R2Y2oMxKNfx2WCWpSCaUV1WefW1o8HZGm3v1vHgY4=", + "usagesDigest": "hgylFkgWSg0ulUwWZzEM1aIftlUnbmw2ynWLdEfHnZc=", "recordedFileInputs": {}, "recordedDirentsInputs": {}, "envVariables": {}, diff --git a/cpp/deps.bzl b/bazel/deps.bzl similarity index 55% rename from cpp/deps.bzl rename to bazel/deps.bzl index 5be97d8..be4c903 100644 --- a/cpp/deps.bzl +++ b/bazel/deps.bzl @@ -1,24 +1,40 @@ load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") -_build_clp_ext_com_github_nlohmann_json = """ +_build_clp_ext_com_github_ned14_outcome = """ cc_library( - name = "libjson", - srcs = ["json/single_include/nlohmann/json.hpp"], - hdrs = ["json/single_include/nlohmann/json.hpp"], + name = "outcome", + hdrs = ["outcome/single-header/outcome.hpp"], includes = ["."], visibility = ["//visibility:public"], ) """ +def clp_ext_com_github_ned14_outcome(): + ref = "2.2.10" + ref_sha256 = "6505320e8d0e55913a9e3c6b33d03c61967429535fbb1fb8613c21527bb15110" + http_archive( + name = "clp_ext_com_github_ned14_outcome", + sha256 = ref_sha256, + urls = ["https://github.com/ned14/outcome/archive/v{}.tar.gz".format(ref)], + strip_prefix = "outcome-{}".format(ref), + add_prefix = "outcome", + build_file_content = _build_clp_ext_com_github_ned14_outcome, + ) + _build_com_github_y_scope_clp = """ cc_library( name = "libclp_ffi_core", srcs = [ "clp/components/core/src/clp/BufferReader.cpp", "clp/components/core/src/clp/ffi/encoding_methods.cpp", - "clp/components/core/src/clp/ffi/ir_stream/encoding_methods.cpp", + "clp/components/core/src/clp/ffi/KeyValuePairLogEvent.cpp", "clp/components/core/src/clp/ffi/ir_stream/decoding_methods.cpp", + "clp/components/core/src/clp/ffi/ir_stream/encoding_methods.cpp", + "clp/components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.cpp", + "clp/components/core/src/clp/ffi/ir_stream/Serializer.cpp", "clp/components/core/src/clp/ffi/ir_stream/utils.cpp", + "clp/components/core/src/clp/ffi/SchemaTree.cpp", + "clp/components/core/src/clp/ir/EncodedTextAst.cpp", "clp/components/core/src/clp/ir/parsing.cpp", "clp/components/core/src/clp/ReaderInterface.cpp", "clp/components/core/src/clp/string_utils/string_utils.cpp", @@ -30,12 +46,21 @@ cc_library( "clp/components/core/src/clp/ReaderInterface.hpp", "clp/components/core/src/clp/ffi/encoding_methods.hpp", "clp/components/core/src/clp/ffi/encoding_methods.inc", + "clp/components/core/src/clp/ffi/KeyValuePairLogEvent.hpp", "clp/components/core/src/clp/ffi/ir_stream/byteswap.hpp", + "clp/components/core/src/clp/ffi/ir_stream/Deserializer.hpp", "clp/components/core/src/clp/ffi/ir_stream/encoding_methods.hpp", "clp/components/core/src/clp/ffi/ir_stream/decoding_methods.hpp", "clp/components/core/src/clp/ffi/ir_stream/decoding_methods.inc", + "clp/components/core/src/clp/ffi/ir_stream/ir_unit_deserialization_methods.hpp", + "clp/components/core/src/clp/ffi/ir_stream/IrUnitHandlerInterface.hpp", + "clp/components/core/src/clp/ffi/ir_stream/IrUnitType.hpp", "clp/components/core/src/clp/ffi/ir_stream/protocol_constants.hpp", + "clp/components/core/src/clp/ffi/ir_stream/Serializer.hpp", "clp/components/core/src/clp/ffi/ir_stream/utils.hpp", + "clp/components/core/src/clp/ffi/SchemaTree.hpp", + "clp/components/core/src/clp/ffi/Value.hpp", + "clp/components/core/src/clp/ir/EncodedTextAst.hpp", "clp/components/core/src/clp/ir/parsing.inc", "clp/components/core/src/clp/ir/parsing.hpp", "clp/components/core/src/clp/ir/types.hpp", @@ -45,8 +70,8 @@ cc_library( "clp/components/core/src/clp/type_utils.hpp", ], includes = [ - "./clp/components/core/src", - "./clp/components/core/src/clp", + "clp/components/core/src", + "clp/components/core/src/clp", ], copts = [ "-std=c++20", @@ -57,39 +82,28 @@ cc_library( "//conditions:default": [], }), deps = [ - "@clp_ext_com_github_nlohmann_json//:libjson", + "@clp_ext_com_github_ned14_outcome//:outcome", + "@nlohmann_json//:singleheader-json", + "@msgpack-c//:msgpack", ], visibility = ["//visibility:public"], ) """ -def _clp_ext_com_github_nlohmann_json(): - commit = "fec56a1a16c6e1c1b1f4e116a20e79398282626c" - commit_sha256 = "8cbda3504fd1624fbce641d3f6b884c76e5afead1fa6d6abfcbea4b734dc634b" - http_archive( - name = "clp_ext_com_github_nlohmann_json", - sha256 = commit_sha256, - urls = ["https://github.com/nlohmann/json/archive/{}.zip".format(commit)], - strip_prefix = "json-{}".format(commit), - add_prefix = "json", - build_file_content = _build_clp_ext_com_github_nlohmann_json, - ) - def com_github_y_scope_clp(): - _clp_ext_com_github_nlohmann_json() - - commit = "3c1f0ad1c44b53d6c17fd7c1d578ec61616b5661" - commit_sha256 = "1daaa432357ed470eb8a2b5e7c8b4064418fa0f5d89fd075c6f1b4aef1ac6319" + ref = "e21672b906641c4724a25ea74f13857afdebe0e8" + ref_sha256 = "b7ab19af62fb0601d858047452e2f330489070caccd4aaf1e09709f6ca6324ab" http_archive( name = "com_github_y_scope_clp", - sha256 = commit_sha256, - urls = ["https://github.com/y-scope/clp/archive/{}.zip".format(commit)], - strip_prefix = "clp-{}".format(commit), + sha256 = ref_sha256, + urls = ["https://github.com/y-scope/clp/archive/{}.tar.gz".format(ref)], + strip_prefix = "clp-{}".format(ref), add_prefix = "clp", build_file_content = _build_com_github_y_scope_clp, ) def _clp_ffi_go_ext_deps_impl(_): + clp_ext_com_github_ned14_outcome() com_github_y_scope_clp() clp_ffi_go_ext_deps = module_extension( diff --git a/bazel/nlohmann_json.patch b/bazel/nlohmann_json.patch new file mode 100644 index 0000000..9407ef0 --- /dev/null +++ b/bazel/nlohmann_json.patch @@ -0,0 +1,17 @@ +--- BUILD.bazel 2024-10-10 12:15:13.831316184 +0000 ++++ BUILD.bazel 2024-10-10 18:31:11.621106075 +0000 +@@ -48,6 +48,7 @@ + "include/nlohmann/thirdparty/hedley/hedley_undef.hpp", + ], + includes = ["include"], ++ include_prefix = "json", + visibility = ["//visibility:public"], + alwayslink = True, + ) +@@ -58,5 +59,6 @@ + "single_include/nlohmann/json.hpp", + ], + includes = ["single_include"], ++ include_prefix = "json", + visibility = ["//visibility:public"], + ) diff --git a/cpp/.clang-tidy b/cpp/.clang-tidy index 0bf5dc7..1225e5f 100644 --- a/cpp/.clang-tidy +++ b/cpp/.clang-tidy @@ -1,3 +1,12 @@ +FormatStyle: "file" +WarningsAsErrors: "*" + +# Disabled checks: +# - `bugprone-easily-swappable-parameters` because it's difficult to mitigate. +# - `readability-identifier-length` because it's case-dependent. +# - `readability-named-parameter` because we don't want to enforce that all parameters have a name. +# - `readability-simplify-boolean-expr` because changing `false == x` to `!x` violates our style +# guide. Checks: >- bugprone-*, -bugprone-easily-swappable-parameters, @@ -15,108 +24,119 @@ Checks: >- -readability-named-parameter, -readability-simplify-boolean-expr, -WarningsAsErrors: "*" -FormatStyle: "file" CheckOptions: + # These checks are intended to catch potentially bug-prone conversions from `signed char` to + # larger integer types, but are only relevant when `signed char` is used to store character data. + # If a type like `int8_t` is used to represent signed integers, these checks can be safely + # skipped. + # + # NOTE: The misspelling of "Typdef" is in clang's code. + bugprone-signed-char-misuse.CharTypdefsToIgnore: "int8_t" + cert-str34-c.CharTypdefsToIgnore: "int8_t" + + # This is necessary to allow simple classes (with all members being public) that have a + # constructor misc-non-private-member-variables-in-classes.IgnoreClassesWithAllMemberVariablesBeingPublic: true + # NOTE: In the naming rules below, a rule may imply another (e.g., `ClassCase` seems to imply + # `AbstractClassCase`), so ideally we'd only specify the parent rule if we didn't need to + # customize the child rules. However, these relationships aren't documented, so we can't rely on + # them. Instead, we explicitly specify all rules (except those that should have reasonable + # defaults, e.g., `""` for `ClassPrefix`). + + # Macro naming rules readability-identifier-naming.MacroDefinitionCase: "UPPER_CASE" - # NAMESPACES - # NamespaceCase implies: - # readability-identifier-naming.InlineNamespaceCase + # Namespace naming rules readability-identifier-naming.NamespaceCase: "lower_case" + readability-identifier-naming.InlineNamespaceCase: "lower_case" - # CLASSES - # ClassCase implies: - # AbstractClassCase - # StructCase - readability-identifier-naming.ClassCase: "CamelCase" + # Type naming rules + readability-identifier-naming.TypeAliasCase: "CamelCase" + readability-identifier-naming.TypeAliasIgnoredRegexp: "[0-9a-z_]+_t" + readability-identifier-naming.TypedefCase: "CamelCase" + readability-identifier-naming.TypedefIgnoredRegexp: "[0-9a-z_]+_t" + readability-identifier-naming.TypeTemplateParameterCase: "CamelCase" + readability-identifier-naming.TypeTemplateParameterIgnoredRegexp: "[0-9a-z_]+_t" + # Concept naming rules + readability-identifier-naming.ConceptCase: "CamelCase" + + # Union naming rules readability-identifier-naming.UnionCase: "CamelCase" - # CONSTANTS + # Enum naming rules + readability-identifier-naming.EnumCase: "CamelCase" + readability-identifier-naming.EnumConstantCase: "CamelCase" + readability-identifier-naming.ScopedEnumConstantCase: "CamelCase" + + # Class naming rules + readability-identifier-naming.AbstractClassCase: "CamelCase" + readability-identifier-naming.ClassCase: "CamelCase" + readability-identifier-naming.StructCase: "CamelCase" + + # Function naming rules + readability-identifier-naming.ClassMethodCase: "lower_case" + readability-identifier-naming.ConstexprFunctionCase: "lower_case" + readability-identifier-naming.ConstexprMethodCase: "lower_case" + readability-identifier-naming.FunctionCase: "lower_case" + readability-identifier-naming.GlobalFunctionCase: "lower_case" + readability-identifier-naming.MethodCase: "lower_case" + readability-identifier-naming.PrivateMethodCase: "lower_case" + readability-identifier-naming.ProtectedMethodCase: "lower_case" + readability-identifier-naming.PublicMethodCase: "lower_case" + readability-identifier-naming.VirtualMethodCase: "lower_case" + + # Parameter naming rules + readability-identifier-naming.ParameterCase: "lower_case" + readability-identifier-naming.ParameterPackCase: "lower_case" + readability-identifier-naming.PointerParameterCase: "lower_case" + readability-identifier-naming.TemplateParameterCase: "lower_case" + readability-identifier-naming.TemplateTemplateParameterCase: "lower_case" + readability-identifier-naming.ValueTemplateParameterCase: "lower_case" + + # Constexpr naming rules readability-identifier-naming.ConstexprVariableCase: "CamelCase" readability-identifier-naming.ConstexprVariablePrefix: "c" - # ConstantCase implies: - # ClassConstantCase - # ConstantMemberCase - # ConstantParameterCase - # ConstantPointerParameterCase - # GlobalConstantCase - # GlobalConstantPointerCase - # LocalConstantCase - # LocalConstantPointerCase - # StaticConstantCase + + # Constant naming rules + readability-identifier-naming.ClassConstantCase: "CamelCase" + readability-identifier-naming.ClassConstantPrefix: "c" readability-identifier-naming.ConstantCase: "CamelCase" - # ConstantPrefix implies: - # ClassConstantPrefix - # ConstantMemberPrefix - # ConstantParameterPrefix - # ConstantPointerParameterPrefix - # GlobalConstantPrefix - # GlobalConstantPointerPrefix - # LocalConstantPrefix - # LocalConstantPointerPrefix - # StaticConstantPrefix readability-identifier-naming.ConstantPrefix: "c" - # Below are constants which can be determined at runtime, so we use the variable naming convention + readability-identifier-naming.GlobalConstantCase: "CamelCase" + readability-identifier-naming.GlobalConstantPrefix: "c" + readability-identifier-naming.GlobalConstantPointerCase: "CamelCase" + readability-identifier-naming.GlobalConstantPointerPrefix: "c" + readability-identifier-naming.StaticConstantCase: "CamelCase" + readability-identifier-naming.StaticConstantPrefix: "c" + + # Naming rules for constants that can be determined at runtime readability-identifier-naming.ConstantMemberCase: "lower_case" - # ConstantParameterCase implies: - # ConstantPointerParameterCase + # NOTE: We set this to ensure it doesn't default to `MemberPrefix` + readability-identifier-naming.ConstantMemberPrefix: "" readability-identifier-naming.ConstantParameterCase: "lower_case" - # LocalConstantCase implies: - # LocalConstantPointerCase + readability-identifier-naming.ConstantPointerParameterCase: "lower_case" readability-identifier-naming.LocalConstantCase: "lower_case" + readability-identifier-naming.LocalConstantPointerCase: "lower_case" - # VARIABLES - # VariableCase implies: - # GlobalPointerCase - # GlobalVariableCase - # LocalPointerCase - # LocalVariableCase - # StaticVariableCase - readability-identifier-naming.VariableCase: "lower_case" - - # CLASS MEMBERS + # Class member naming rules readability-identifier-naming.ClassMemberCase: "lower_case" + # NOTE: We set this in case it doesn't default to `MemberPrefix` readability-identifier-naming.ClassMemberPrefix: "m_" - # MemberCase implies: - # PrivateMemberCase - # ProtectedMemberCase - # PublicMemberCase readability-identifier-naming.MemberCase: "lower_case" readability-identifier-naming.MemberPrefix: "m_" + readability-identifier-naming.PrivateMemberCase: "lower_case" + readability-identifier-naming.PrivateMemberPrefix: "m_" + readability-identifier-naming.ProtectedMemberCase: "lower_case" + readability-identifier-naming.ProtectedMemberPrefix: "m_" + readability-identifier-naming.PublicMemberCase: "lower_case" readability-identifier-naming.PublicMemberPrefix: "" - # PARAMETERS - # ParameterCase implies: - # PointerParameterCase - readability-identifier-naming.ParameterCase: "lower_case" - readability-identifier-naming.TemplateParameterCase: "lower_case" - - # FUNCTIONS - # FunctionCase implies: - # ClassMethodCase - # ConstexprFunctionCase - # ConstexprMethodCase - # GlobalFunctionCase - # MethodCase - # PublicMethodCase - # ProtectedMethodCase - # PrivateMethodCase - # VirtualMethodCase - readability-identifier-naming.FunctionCase: "lower_case" - - readability-identifier-naming.EnumCase: "CamelCase" - # EnumConstantCase implies: - # ScopedEnumConstantCase - readability-identifier-naming.EnumConstantCase: "CamelCase" - - # TYPE NAMES - readability-identifier-naming.TypeAliasCase: "CamelCase" - readability-identifier-naming.TypeAliasIgnoredRegexp: "[0-9a-z_]+_t" - readability-identifier-naming.TypedefCase: "CamelCase" - readability-identifier-naming.TypedefIgnoredRegexp: "[0-9a-z_]+_t" - readability-identifier-naming.TypeTemplateParameterCase: "CamelCase" - readability-identifier-naming.TypeTemplateParameterIgnoredRegexp: "[0-9a-z_]+_t" + # Variable naming rules + readability-identifier-naming.GlobalPointerCase: "lower_case" + readability-identifier-naming.GlobalVariableCase: "lower_case" + readability-identifier-naming.LocalPointerCase: "lower_case" + readability-identifier-naming.LocalVariableCase: "lower_case" + readability-identifier-naming.StaticVariableCase: "lower_case" + readability-identifier-naming.VariableCase: "lower_case" diff --git a/cpp/BUILD.bazel b/cpp/BUILD.bazel index c93ddb2..c2750ed 100644 --- a/cpp/BUILD.bazel +++ b/cpp/BUILD.bazel @@ -1,12 +1,14 @@ cc_library( name = "libclp_ffi_go", - srcs = glob(["src/ffi_go/**"]), + srcs = glob(["src/**/*"]), hdrs = glob(["src/ffi_go/**/*.h"]), includes = [ "src", ], deps = [ + "@clp_ext_com_github_ned14_outcome//:outcome", "@com_github_y_scope_clp//:libclp_ffi_core", + "@msgpack-c//:msgpack", ], copts = [ "-std=c++20", diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt index 45cae5d..3771c8c 100644 --- a/cpp/CMakeLists.txt +++ b/cpp/CMakeLists.txt @@ -1,5 +1,7 @@ -cmake_minimum_required(VERSION 3.23) -include(FetchContent) +cmake_minimum_required(VERSION 3.22.1) + +# Turn on verbose output +set(CMAKE_VERBOSE_MAKEFILE ON) project(clp_ffi LANGUAGES CXX C @@ -21,26 +23,30 @@ endif() # Build/package static by default to simplify compatibility in other systems option(BUILD_SHARED_LIBS "Build using shared libraries" OFF) -# Setup library name based on Go environment variables set by `go generate` -set(LIB_NAME "clp_ffi" CACHE STRING "Library name containing os and arch.") -if (DEFINED ENV{GOOS}) - string(APPEND LIB_NAME "_$ENV{GOOS}") +# Setup library name optionally suffixed with the OS and architecture. +set(LIB_NAME "clp_ffi" CACHE STRING "Library name optionally containing OS and architecture.") +set(OS_SUFFIX "" CACHE STRING "OS suffix to add to the library name.") +if (NOT OS_SUFFIX STREQUAL "") + string(APPEND LIB_NAME "_${OS_SUFFIX}") endif() -if (DEFINED ENV{GOARCH}) - string(APPEND LIB_NAME "_$ENV{GOARCH}") +set(ARCH_SUFFIX "" CACHE STRING "Architecture suffix to add to the library name.") +if (NOT ARCH_SUFFIX STREQUAL "") + string(APPEND LIB_NAME "_${ARCH_SUFFIX}") endif() -set(CLP_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/clp" CACHE STRING - "Directory containing CLP source, fetched from github if non existant.") -if (NOT EXISTS ${CLP_SRC_DIR}) - FetchContent_Declare( - clp-core - GIT_REPOSITORY https://github.com/y-scope/clp.git - GIT_TAG 3c1f0ad1c44b53d6c17fd7c1d578ec61616b5661 - SOURCE_DIR ${CLP_SRC_DIR} - ) - message(STATUS "Fetching CLP from github.") - FetchContent_MakeAvailable(clp-core) +# TODO: remove deps_dir/clp/json once we can build and install clp-ffi-core as a library. +set(DEPS_DIR "../build/deps" CACHE STRING "Path dependency directory.") +set(clp_SOURCE_DIR + "${DEPS_DIR}/clp-src/clp/components/core/src" + CACHE STRING + "Path to CLP core source directory.") +set(json_SOURCE_DIR "${DEPS_DIR}/json-src" CACHE STRING "Path to outcome source directory.") +set(outcome_SOURCE_DIR "${DEPS_DIR}/outcome-src" CACHE STRING "Path to outcome source directory.") +find_package(msgpack-cxx 6.1.0 REQUIRED) +if(msgpack-cxx_FOUND) + message(STATUS "Found msgpack-cxx ${msgpack-cxx_VERSION}") +else() + message(FATAL_ERROR "Could not find msgpack-cxx") endif() add_library(${LIB_NAME}) @@ -70,74 +76,90 @@ target_compile_options(${LIB_NAME} $<$>:-Wall -Wextra -Wpedantic -Werror> ) +target_include_directories(${LIB_NAME} + PRIVATE + src +) + +target_link_libraries(${LIB_NAME} + PRIVATE + msgpack-cxx +) + # Mark below headers as system headers so that the compiler (including clang-tidy) doesn't generate # warnings from them. target_include_directories(${LIB_NAME} SYSTEM PRIVATE - ${CLP_SRC_DIR}/components/core/submodules - ${CLP_SRC_DIR}/components/core/src -) + ${outcome_SOURCE_DIR} -target_include_directories(${LIB_NAME} - PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/src - ${CLP_SRC_DIR}/components/core/src - # CLP source expects string_utils to be included as a library , but we + # Since we build CLP source as part of the project we need to put its source directory on the + # include path to make their include statements work. + ${clp_SOURCE_DIR} + # CLP source code expects string_utils to be included as a library , but we # directly bundle string_utils source files so we must add it to the include path. - ${CLP_SRC_DIR}/components/core/src/clp + ${clp_SOURCE_DIR}/clp + # CLP puts its submodule dir on its include path and includes json and outcome libraries from + # their root dir. To replicate this we put the build directory on the include path and + # dependencies' root directory must be the name CLP expects/uses. + ${json_SOURCE_DIR} ) -target_sources(${LIB_NAME} PUBLIC +target_sources(${LIB_NAME} PUBLIC FILE_SET HEADERS BASE_DIRS src/ FILES src/ffi_go/api_decoration.h src/ffi_go/defs.h - src/ffi_go/ir/decoder.h src/ffi_go/ir/deserializer.h - src/ffi_go/ir/encoder.h src/ffi_go/ir/serializer.h - src/ffi_go/search/wildcard_query.h PRIVATE - ${CLP_SRC_DIR}/components/core/src/clp/BufferReader.cpp - ${CLP_SRC_DIR}/components/core/src/clp/BufferReader.hpp - ${CLP_SRC_DIR}/components/core/src/clp/Defs.h - ${CLP_SRC_DIR}/components/core/src/clp/ErrorCode.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/encoding_methods.cpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/encoding_methods.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/encoding_methods.inc - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/byteswap.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/encoding_methods.cpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/encoding_methods.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/decoding_methods.cpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/decoding_methods.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/decoding_methods.inc - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/protocol_constants.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/utils.cpp - ${CLP_SRC_DIR}/components/core/src/clp/ffi/ir_stream/utils.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ir/parsing.cpp - ${CLP_SRC_DIR}/components/core/src/clp/ir/parsing.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ir/parsing.inc - ${CLP_SRC_DIR}/components/core/src/clp/ir/types.hpp - ${CLP_SRC_DIR}/components/core/src/clp/ReaderInterface.cpp - ${CLP_SRC_DIR}/components/core/src/clp/ReaderInterface.hpp - ${CLP_SRC_DIR}/components/core/src/clp/string_utils/string_utils.cpp - ${CLP_SRC_DIR}/components/core/src/clp/string_utils/string_utils.hpp - ${CLP_SRC_DIR}/components/core/src/clp/TraceableException.hpp - ${CLP_SRC_DIR}/components/core/src/clp/time_types.hpp - ${CLP_SRC_DIR}/components/core/src/clp/type_utils.hpp - src/ffi_go/types.hpp - src/ffi_go/ir/decoder.cpp + ${clp_SOURCE_DIR}/clp/ffi/SchemaTree.cpp + ${clp_SOURCE_DIR}/clp/ir/parsing.cpp + ${clp_SOURCE_DIR}/clp/ReaderInterface.cpp + ${clp_SOURCE_DIR}/clp/BufferReader.cpp + ${clp_SOURCE_DIR}/clp/BufferReader.hpp + ${clp_SOURCE_DIR}/clp/Defs.h + ${clp_SOURCE_DIR}/clp/ErrorCode.hpp + ${clp_SOURCE_DIR}/clp/ReaderInterface.hpp + ${clp_SOURCE_DIR}/clp/ffi/encoding_methods.cpp + ${clp_SOURCE_DIR}/clp/ffi/encoding_methods.hpp + ${clp_SOURCE_DIR}/clp/ffi/encoding_methods.inc + ${clp_SOURCE_DIR}/clp/ffi/KeyValuePairLogEvent.cpp + ${clp_SOURCE_DIR}/clp/ffi/KeyValuePairLogEvent.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/byteswap.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/Deserializer.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/encoding_methods.cpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/encoding_methods.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/decoding_methods.cpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/decoding_methods.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/decoding_methods.inc + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/ir_unit_deserialization_methods.cpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/ir_unit_deserialization_methods.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/IrUnitHandlerInterface.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/IrUnitType.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/protocol_constants.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/Serializer.cpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/Serializer.hpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/utils.cpp + ${clp_SOURCE_DIR}/clp/ffi/ir_stream/utils.hpp + ${clp_SOURCE_DIR}/clp/ffi/SchemaTree.hpp + ${clp_SOURCE_DIR}/clp/ffi/Value.hpp + ${clp_SOURCE_DIR}/clp/ir/EncodedTextAst.cpp + ${clp_SOURCE_DIR}/clp/ir/EncodedTextAst.hpp + ${clp_SOURCE_DIR}/clp/ir/parsing.inc + ${clp_SOURCE_DIR}/clp/ir/parsing.hpp + ${clp_SOURCE_DIR}/clp/ir/types.hpp + ${clp_SOURCE_DIR}/clp/string_utils/string_utils.cpp + ${clp_SOURCE_DIR}/clp/string_utils/string_utils.hpp + ${clp_SOURCE_DIR}/clp/TraceableException.hpp + ${clp_SOURCE_DIR}/clp/time_types.hpp + ${clp_SOURCE_DIR}/clp/type_utils.hpp src/ffi_go/ir/deserializer.cpp - src/ffi_go/ir/encoder.cpp - src/ffi_go/ir/types.hpp src/ffi_go/ir/serializer.cpp - src/ffi_go/search/wildcard_query.cpp + src/lint/msgpack.hpp ) -include(GNUInstallDirs) install(TARGETS ${LIB_NAME} - ARCHIVE FILE_SET HEADERS ) diff --git a/cpp/src/ffi_go/api_decoration.h b/cpp/src/ffi_go/api_decoration.h index 8864bfa..8c61715 100644 --- a/cpp/src/ffi_go/api_decoration.h +++ b/cpp/src/ffi_go/api_decoration.h @@ -2,8 +2,7 @@ #define FFI_GO_API_DECORATION_H /** - * If the file is compiled with a C++ compiler, `extern "C"` must be defined to - * ensure C linkage. + * If the file is compiled with a C++ compiler, `extern "C"` must be defined to ensure C linkage. */ #ifdef __cplusplus #define CLP_FFI_GO_EXTERN_C extern "C" @@ -12,9 +11,8 @@ #endif /** - * `CLP_FFI_GO_METHOD` should be added at the beginning of a function's - * declaration/implementation to decorate any APIs that are exposed to the - * Golang layer. + * `CLP_FFI_GO_METHOD` should be added at the beginning of a function's declaration/implementation + * to decorate any APIs that are exposed to the Golang layer. */ #define CLP_FFI_GO_METHOD CLP_FFI_GO_EXTERN_C diff --git a/cpp/src/ffi_go/defs.h b/cpp/src/ffi_go/defs.h index 70ba9a5..1f092cd 100644 --- a/cpp/src/ffi_go/defs.h +++ b/cpp/src/ffi_go/defs.h @@ -26,7 +26,7 @@ typedef struct { * A span of a byte array passed down through Cgo. */ typedef struct { - void* m_data; + void const* m_data; size_t m_size; } ByteSpan; diff --git a/cpp/src/ffi_go/ir/decoder.cpp b/cpp/src/ffi_go/ir/decoder.cpp deleted file mode 100644 index 2706dde..0000000 --- a/cpp/src/ffi_go/ir/decoder.cpp +++ /dev/null @@ -1,107 +0,0 @@ -#include "decoder.h" - -#include -#include -#include - -#include -#include -#include - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" -#include "ffi_go/ir/types.hpp" - -namespace ffi_go::ir { -using clp::ffi::ir_stream::IRErrorCode; - -namespace { -/** - * Generic helper for ir_decoder_decode_*_log_message - */ -template -[[nodiscard]] auto decode_log_message( - StringView logtype, - encoded_var_view_t vars, - StringView dict_vars, - Int32tSpan dict_var_end_offsets, - void* ir_decoder, - StringView* log_msg_view -) -> int { - using encoded_var_t = std::conditional_t< - std::is_same_v, - clp::ir::eight_byte_encoded_variable_t, - clp::ir::four_byte_encoded_variable_t>; - if (nullptr == ir_decoder || nullptr == log_msg_view) { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); - } - Decoder* decoder{static_cast(ir_decoder)}; - auto& log_msg{decoder->m_log_message}; - log_msg.reserve(logtype.m_size + dict_vars.m_size); - - IRErrorCode err{IRErrorCode::IRErrorCode_Success}; - try { - log_msg = clp::ffi::decode_message( - std::string_view(logtype.m_data, logtype.m_size), - vars.m_data, - vars.m_size, - std::string_view(dict_vars.m_data, dict_vars.m_size), - dict_var_end_offsets.m_data, - dict_var_end_offsets.m_size - ); - } catch (clp::ffi::EncodingException const& e) { - err = IRErrorCode::IRErrorCode_Decode_Error; - } - - log_msg_view->m_data = log_msg.data(); - log_msg_view->m_size = log_msg.size(); - return static_cast(err); -} -} // namespace - -CLP_FFI_GO_METHOD auto ir_decoder_new() -> void* { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - return new Decoder{}; -} - -CLP_FFI_GO_METHOD auto ir_decoder_close(void* ir_decoder) -> void { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - delete static_cast(ir_decoder); -} - -CLP_FFI_GO_METHOD auto ir_decoder_decode_eight_byte_log_message( - StringView logtype, - Int64tSpan vars, - StringView dict_vars, - Int32tSpan dict_var_end_offsets, - void* ir_decoder, - StringView* log_message -) -> int { - return decode_log_message( - logtype, - vars, - dict_vars, - dict_var_end_offsets, - ir_decoder, - log_message - ); -} - -CLP_FFI_GO_METHOD auto ir_decoder_decode_four_byte_log_message( - StringView logtype, - Int32tSpan vars, - StringView dict_vars, - Int32tSpan dict_var_end_offsets, - void* ir_decoder, - StringView* log_message -) -> int { - return decode_log_message( - logtype, - vars, - dict_vars, - dict_var_end_offsets, - ir_decoder, - log_message - ); -} -} // namespace ffi_go::ir diff --git a/cpp/src/ffi_go/ir/decoder.h b/cpp/src/ffi_go/ir/decoder.h deleted file mode 100644 index 560d285..0000000 --- a/cpp/src/ffi_go/ir/decoder.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef FFI_GO_IR_DECODER_H -#define FFI_GO_IR_DECODER_H -// header must support C, making modernize checks inapplicable -// NOLINTBEGIN(modernize-use-trailing-return-type) - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" - -/** - * Create a ir::Decoder used as the underlying data storage for a Go ir.Decoder. - * @return New ir::Decoder's address - */ -CLP_FFI_GO_METHOD void* ir_decoder_new(); - -/** - * Clean up the underlying ir::Decoder of a Go ir.Decoder. - * @param[in] ir_encoder Address of a ir::Decoder created and returned by - * ir_decoder_new - */ -CLP_FFI_GO_METHOD void ir_decoder_close(void* decoder); - -/** - * Given the fields of a CLP IR encoded log message with eight byte encoding, - * decode it into the original log message. An ir::Decoder must be provided to - * use as the backing storage for the corresponding Go ir.Decoder. All pointer - * parameters must be non-null (non-nil Cgo C. pointer or unsafe.Pointer - * from Go). - * @param[in] logtype Type of the log message (the log message with variables - * extracted and replaced with placeholders) - * @param[in] vars Array of encoded variables - * @param[in] dict_vars String containing all dictionary variables concatenated - * together - * @param[in] dict_var_end_offsets Array of offsets into dict_vars marking the - * end of a dictionary variable - * @param[in] ir_decoder ir::Decoder to be used as storage for the decoded log - * message - * @param[out] log_message Decoded log message - * @return ffi::ir_stream::IRErrorCode_Decode_Error if ffi::decode_message - * throws or errors - * @return ffi::ir_stream::IRErrorCode_Success on success - */ -CLP_FFI_GO_METHOD int ir_decoder_decode_eight_byte_log_message( - StringView logtype, - Int64tSpan vars, - StringView dict_vars, - Int32tSpan dict_var_end_offsets, - void* ir_decoder, - StringView* log_message -); - -/** - * Given the fields of a CLP IR encoded log message with four byte encoding, - * decode it into the original log message. An ir::Decoder must be provided to - * use as the backing storage for the corresponding Go ir.Decoder. All pointer - * parameters must be non-null (non-nil Cgo C. pointer or unsafe.Pointer - * from Go). - * @param[in] logtype Type of the log message (the log message with variables - * extracted and replaced with placeholders) - * @param[in] vars Array of encoded variables - * @param[in] dict_vars String containing all dictionary variables concatenated - * together - * @param[in] dict_var_end_offsets Array of offsets into dict_vars marking the - * end of a dictionary variable - * @param[in] ir_decoder ir::Decoder to be used as storage for the decoded log - * message - * @param[out] log_message Decoded log message - * @return ffi::ir_stream::IRErrorCode_Decode_Error if ffi::decode_message - * throws or errors - * @return ffi::ir_stream::IRErrorCode_Success on success - */ -CLP_FFI_GO_METHOD int ir_decoder_decode_four_byte_log_message( - StringView logtype, - Int32tSpan vars, - StringView dict_vars, - Int32tSpan dict_var_end_offsets, - void* ir_decoder, - StringView* log_message -); - -// NOLINTEND(modernize-use-trailing-return-type) -#endif // FFI_GO_IR_DECODER_H diff --git a/cpp/src/ffi_go/ir/deserializer.cpp b/cpp/src/ffi_go/ir/deserializer.cpp index c25145c..7ca0d10 100644 --- a/cpp/src/ffi_go/ir/deserializer.cpp +++ b/cpp/src/ffi_go/ir/deserializer.cpp @@ -1,357 +1,158 @@ #include "deserializer.h" -#include #include #include -#include -#include -#include -#include +#include +#include +#include +#include +#include #include #include #include #include #include -#include -#include -#include +#include +#include +#include +#include #include "ffi_go/api_decoration.h" #include "ffi_go/defs.h" -#include "ffi_go/ir/types.hpp" -#include "ffi_go/search/wildcard_query.h" -#include "ffi_go/types.hpp" namespace ffi_go::ir { -using clp::BufferReader; -using clp::ffi::ir_stream::cProtocol::Eof; -using clp::ffi::ir_stream::deserialize_preamble; -using clp::ffi::ir_stream::deserialize_tag; -using clp::ffi::ir_stream::get_encoding_type; using clp::ffi::ir_stream::IRErrorCode; -using clp::ir::eight_byte_encoded_variable_t; -using clp::ir::four_byte_encoded_variable_t; +using clp::ffi::ir_stream::IrUnitType; namespace { /** - * Generic helper for ir_deserializer_deserialize_*_log_event + * Implements `clp::ffi::ir_stream::IrUnitHandlerInterface` interface */ -template -[[nodiscard]] auto deserialize_log_event( - ByteSpan ir_view, - void* ir_deserializer, - size_t* ir_pos, - LogEventView* log_event -) -> int; - -/** - * Generic helper for ir_deserializer_deserialize_*_wildcard_match - */ -template -[[nodiscard]] auto deserialize_wildcard_match( - ByteSpan ir_view, - void* ir_deserializer, - TimestampInterval time_interval, - WildcardQueryView queries, - size_t* ir_pos, - LogEventView* log_event, - size_t* matching_query -) -> int; - -template -auto deserialize_log_event( - ByteSpan ir_view, - void* ir_deserializer, - size_t* ir_pos, - LogEventView* log_event -) -> int { - if (nullptr == ir_deserializer || nullptr == ir_pos || nullptr == log_event) { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); - } - BufferReader ir_buf{static_cast(ir_view.m_data), ir_view.m_size}; - Deserializer* deserializer{static_cast(ir_deserializer)}; - - clp::ffi::ir_stream::encoded_tag_t tag{}; - if (auto const err{deserialize_tag(ir_buf, tag)}; IRErrorCode::IRErrorCode_Success != err) { - return static_cast(err); - } - if (Eof == tag) { - return static_cast(IRErrorCode::IRErrorCode_Eof); +class IrUnitHandler { +public: + [[nodiscard]] auto handle_log_event([[maybe_unused]] clp::ffi::KeyValuePairLogEvent&& log_event + ) -> IRErrorCode { + auto result{log_event.serialize_to_json()}; + if (result.has_failure()) { + /* return result.error().value(); */ + return IRErrorCode::IRErrorCode_Corrupted_IR; + } + m_msgpack_log_event = nlohmann::json::to_msgpack(result.value()); + return IRErrorCode::IRErrorCode_Success; } - IRErrorCode err{}; - epoch_time_ms_t timestamp{}; - if constexpr (std::is_same_v) { - err = clp::ffi::ir_stream::eight_byte_encoding::deserialize_log_event( - ir_buf, - tag, - deserializer->m_log_event.m_log_message, - timestamp - ); - } else if constexpr (std::is_same_v) { - epoch_time_ms_t timestamp_delta{}; - err = clp::ffi::ir_stream::four_byte_encoding::deserialize_log_event( - ir_buf, - tag, - deserializer->m_log_event.m_log_message, - timestamp_delta - ); - timestamp = deserializer->m_timestamp + timestamp_delta; - } else { - static_assert(cAlwaysFalse, "Invalid/unhandled encoding type"); + [[nodiscard]] static auto handle_utc_offset_change( + [[maybe_unused]] clp::UtcOffset utc_offset_old, + [[maybe_unused]] clp::UtcOffset utc_offset_new + ) -> IRErrorCode { + return IRErrorCode::IRErrorCode_Success; } - if (IRErrorCode::IRErrorCode_Success != err) { - return static_cast(err); - } - deserializer->m_timestamp = timestamp; - size_t pos{0}; - if (clp::ErrorCode_Success != ir_buf.try_get_pos(pos)) { - return static_cast(IRErrorCode::IRErrorCode_Decode_Error); + [[nodiscard]] static auto handle_schema_tree_node_insertion( + [[maybe_unused]] clp::ffi::SchemaTree::NodeLocator schema_tree_node_locator + ) -> IRErrorCode { + return IRErrorCode::IRErrorCode_Success; } - *ir_pos = pos; - log_event->m_log_message.m_data = deserializer->m_log_event.m_log_message.data(); - log_event->m_log_message.m_size = deserializer->m_log_event.m_log_message.size(); - log_event->m_timestamp = deserializer->m_timestamp; - return static_cast(IRErrorCode::IRErrorCode_Success); -} -template -auto deserialize_wildcard_match( - ByteSpan ir_view, - void* ir_deserializer, - TimestampInterval time_interval, - MergedWildcardQueryView merged_query, - size_t* ir_pos, - LogEventView* log_event, - size_t* matching_query -) -> int { - if (nullptr == ir_deserializer || nullptr == ir_pos || nullptr == log_event - || nullptr == matching_query) - { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); + [[nodiscard]] auto handle_end_of_stream() -> IRErrorCode { + m_is_complete = true; + return IRErrorCode::IRErrorCode_Success; } - BufferReader ir_buf{static_cast(ir_view.m_data), ir_view.m_size}; - Deserializer* deserializer{static_cast(ir_deserializer)}; - std::string_view const query_view{merged_query.m_queries.m_data, merged_query.m_queries.m_size}; - std::span const end_offsets{ - merged_query.m_end_offsets.m_data, - merged_query.m_end_offsets.m_size - }; - std::span const case_sensitivity{ - merged_query.m_case_sensitivity.m_data, - merged_query.m_case_sensitivity.m_size - }; - std::vector> queries(merged_query.m_end_offsets.m_size); - size_t pos{0}; - for (size_t i{0}; i < merged_query.m_end_offsets.m_size; i++) { - auto& [query_str_view, is_case_sensitive]{queries[i]}; - query_str_view = query_view.substr(pos, end_offsets[i]); - is_case_sensitive = case_sensitivity[i]; - pos += end_offsets[i]; - } + // Methods + [[nodiscard]] auto is_complete() const -> bool { return m_is_complete; } - std::function(ffi_go::LogMessage const&)> query_fn; - if (false == queries.empty()) { - query_fn = [&](ffi_go::LogMessage const& log_message) -> std::pair { - auto const found_query = std::find_if( - queries.cbegin(), - queries.cend(), - [&](std::pair const& query) -> bool { - return clp::string_utils::wildcard_match_unsafe( - log_message, - query.first, - query.second - ); - } - ); - return {queries.cend() != found_query, found_query - queries.cbegin()}; - }; - } else { - query_fn = [](ffi_go::LogMessage const&) -> std::pair { return {true, 0}; }; + [[nodiscard]] auto get_msgpack_log_event() const -> std::vector const& { + return m_msgpack_log_event; } - IRErrorCode err{}; - while (true) { - clp::ffi::ir_stream::encoded_tag_t tag{}; - if (err = deserialize_tag(ir_buf, tag); IRErrorCode::IRErrorCode_Success != err) { - return static_cast(err); - } - if (Eof == tag) { - return static_cast(IRErrorCode::IRErrorCode_Eof); - } - - epoch_time_ms_t timestamp{}; - if constexpr (std::is_same_v) { - err = clp::ffi::ir_stream::eight_byte_encoding::deserialize_log_event( - ir_buf, - tag, - deserializer->m_log_event.m_log_message, - timestamp - ); - } else if constexpr (std::is_same_v) { - epoch_time_ms_t timestamp_delta{}; - err = clp::ffi::ir_stream::four_byte_encoding::deserialize_log_event( - ir_buf, - tag, - deserializer->m_log_event.m_log_message, - timestamp_delta - ); - timestamp = deserializer->m_timestamp + timestamp_delta; - } else { - static_assert(cAlwaysFalse, "Invalid/unhandled encoding type"); - } - if (IRErrorCode::IRErrorCode_Success != err) { - return static_cast(err); - } - deserializer->m_timestamp = timestamp; - - if (time_interval.m_upper <= deserializer->m_timestamp) { - // TODO this is an extremely fragile hack until the CLP ffi ir - // code is refactored and IRErrorCode includes things beyond - // decoding. - return static_cast(IRErrorCode::IRErrorCode_Incomplete_IR + 1); - } - if (time_interval.m_lower > deserializer->m_timestamp) { - continue; - } - auto const [has_matching_query, matching_query_idx]{ - query_fn(deserializer->m_log_event.m_log_message) - }; - if (false == has_matching_query) { - continue; - } - size_t curr_ir_pos{0}; - if (clp::ErrorCode_Success != ir_buf.try_get_pos(curr_ir_pos)) { - return static_cast(IRErrorCode::IRErrorCode_Decode_Error); - } - *ir_pos = curr_ir_pos; - log_event->m_log_message.m_data = deserializer->m_log_event.m_log_message.data(); - log_event->m_log_message.m_size = deserializer->m_log_event.m_log_message.size(); - log_event->m_timestamp = deserializer->m_timestamp; - *matching_query = matching_query_idx; - return static_cast(IRErrorCode::IRErrorCode_Success); - } -} +private: + std::vector m_msgpack_log_event; + bool m_is_complete{false}; +}; } // namespace CLP_FFI_GO_METHOD auto ir_deserializer_close(void* ir_deserializer) -> void { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - delete static_cast(ir_deserializer); + std::unique_ptr>( + static_cast*>(ir_deserializer) + ); } -CLP_FFI_GO_METHOD auto ir_deserializer_new_deserializer_with_preamble( - ByteSpan ir_view, - size_t* ir_pos, - int8_t* ir_encoding, - int8_t* metadata_type, - size_t* metadata_pos, - uint16_t* metadata_size, - void** ir_deserializer_ptr, - void** timestamp_ptr -) -> int { - if (nullptr == ir_pos || nullptr == ir_encoding || nullptr == metadata_type - || nullptr == metadata_pos || nullptr == metadata_size || nullptr == ir_deserializer_ptr - || nullptr == timestamp_ptr) - { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); - } - BufferReader ir_buf{static_cast(ir_view.m_data), ir_view.m_size}; - - bool four_byte_encoding{}; - if (IRErrorCode const err{get_encoding_type(ir_buf, four_byte_encoding)}; - IRErrorCode::IRErrorCode_Success != err) - { - return static_cast(err); +CLP_FFI_GO_METHOD auto +ir_deserializer_create(ByteSpan ir_view, size_t* ir_pos, void** ir_deserializer_ptr) -> int { + if (nullptr == ir_pos || nullptr == ir_deserializer_ptr) { + return static_cast(std::errc::protocol_error); } - *ir_encoding = four_byte_encoding ? 1 : 0; - if (IRErrorCode const err{ - deserialize_preamble(ir_buf, *metadata_type, *metadata_pos, *metadata_size) - }; - IRErrorCode::IRErrorCode_Success != err) - { - return static_cast(err); + clp::BufferReader ir_buf{static_cast(ir_view.m_data), ir_view.m_size}; + auto deserializer_result{ + clp::ffi::ir_stream::Deserializer::create(ir_buf, IrUnitHandler{}) + }; + if (deserializer_result.has_failure()) { + return deserializer_result.error().value(); } size_t pos{0}; if (clp::ErrorCode_Success != ir_buf.try_get_pos(pos)) { - return static_cast(IRErrorCode::IRErrorCode_Decode_Error); + return static_cast(std::errc::protocol_error); } *ir_pos = pos; - auto* deserializer{new Deserializer()}; - *ir_deserializer_ptr = deserializer; - *timestamp_ptr = &deserializer->m_timestamp; - return static_cast(IRErrorCode::IRErrorCode_Success); -} - -CLP_FFI_GO_METHOD auto ir_deserializer_deserialize_eight_byte_log_event( - ByteSpan ir_view, - void* ir_deserializer, - size_t* ir_pos, - LogEventView* log_event -) -> int { - return deserialize_log_event( - ir_view, - ir_deserializer, - ir_pos, - log_event - ); -} - -CLP_FFI_GO_METHOD auto ir_deserializer_deserialize_four_byte_log_event( - ByteSpan ir_view, - void* ir_deserializer, - size_t* ir_pos, - LogEventView* log_event -) -> int { - return deserialize_log_event( - ir_view, - ir_deserializer, - ir_pos, - log_event + auto d = std::make_unique>( + std::move(deserializer_result.value()) ); + *ir_deserializer_ptr = d.release(); + return 0; } -CLP_FFI_GO_METHOD auto ir_deserializer_deserialize_eight_byte_wildcard_match( +CLP_FFI_GO_METHOD auto ir_deserializer_deserialize_log_event( ByteSpan ir_view, void* ir_deserializer, - TimestampInterval time_interval, - MergedWildcardQueryView merged_query, size_t* ir_pos, - LogEventView* log_event, - size_t* matching_query + ByteSpan* msgpack_log_event_view ) -> int { - return deserialize_wildcard_match( - ir_view, - ir_deserializer, - time_interval, - merged_query, - ir_pos, - log_event, - matching_query - ); -} + if (nullptr == ir_deserializer || nullptr == ir_pos || nullptr == msgpack_log_event_view) { + return static_cast(std::errc::protocol_error); + } + clp::BufferReader ir_reader{static_cast(ir_view.m_data), ir_view.m_size}; + auto* deserializer{ + static_cast*>(ir_deserializer) + }; -CLP_FFI_GO_METHOD auto ir_deserializer_deserialize_four_byte_wildcard_match( - ByteSpan ir_view, - void* ir_deserializer, - TimestampInterval time_interval, - MergedWildcardQueryView merged_query, - size_t* ir_pos, - LogEventView* log_event, - size_t* matching_query -) -> int { - return deserialize_wildcard_match( - ir_view, - ir_deserializer, - time_interval, - merged_query, - ir_pos, - log_event, - matching_query - ); + while (true) { + auto result{deserializer->deserialize_next_ir_unit(ir_reader)}; + if (result.has_failure()) { + if (result.error() == std::errc::result_out_of_range) { + return IRErrorCode::IRErrorCode_Incomplete_IR; + } + /* return result.error().value(); */ + return IRErrorCode::IRErrorCode_Corrupted_IR; + } + // Update the buffer position for Go on each successful IR unit + size_t pos{0}; + if (clp::ErrorCode_Success != ir_reader.try_get_pos(pos)) { + return static_cast(IRErrorCode::IRErrorCode_Decode_Error); + } + *ir_pos = pos; + switch (result.value()) { + case IrUnitType::LogEvent: { + auto const& msgpack_buf{deserializer->get_ir_unit_handler().get_msgpack_log_event() + }; + msgpack_log_event_view->m_data = msgpack_buf.data(); + msgpack_log_event_view->m_size = msgpack_buf.size(); + return IRErrorCode::IRErrorCode_Success; + } + case IrUnitType::EndOfStream: { + return static_cast(IRErrorCode::IRErrorCode_Eof); + } + case IrUnitType::SchemaTreeNodeInsertion: + case IrUnitType::UtcOffsetChange: { + continue; + } + default: + /* return std::errc::protocol_not_supported; */ + return IRErrorCode::IRErrorCode_Corrupted_IR; + } + } } } // namespace ffi_go::ir diff --git a/cpp/src/ffi_go/ir/deserializer.h b/cpp/src/ffi_go/ir/deserializer.h index a728962..361b031 100644 --- a/cpp/src/ffi_go/ir/deserializer.h +++ b/cpp/src/ffi_go/ir/deserializer.h @@ -9,13 +9,21 @@ #include "ffi_go/api_decoration.h" #include "ffi_go/defs.h" -#include "ffi_go/search/wildcard_query.h" /** - * Clean up the underlying ir::Deserializer of a Go ir.Deserializer. - * @param[in] ir_deserializer The address of a ir::Deserializer created and - * returned by ir_deserializer_new_deserializer_with_preamble + * Clean up the underlying `ffi_go::ir::Serializer` of a Go `ir.Serializer`. + * @param[in] ir_deserializer The address of a `ffi_go::ir::Serializer` created and returned by + * `ir_deserializer_eight_byte_create */ +/* CLP_FFI_GO_METHOD void ir_deserializer_eight_byte_close(void* ir_deserializer); */ + +/** + * Clean up the underlying `ffi_go::ir::Serializer` of a Go `ir.Serializer`. + * @param[in] ir_deserializer The address of a `ffi_go::ir::Serializer` created and returned by + * `ir_deserializer_eight_byte_create + */ +/* CLP_FFI_GO_METHOD void ir_deserializer_four_byte_close(void* ir_deserializer); */ + CLP_FFI_GO_METHOD void ir_deserializer_close(void* ir_deserializer); /** @@ -37,15 +45,10 @@ CLP_FFI_GO_METHOD void ir_deserializer_close(void* ir_deserializer); * @return ffi::ir_stream::IRErrorCode forwarded from either * ffi::ir_stream::get_encoding_type or ffi::ir_stream::decode_preamble */ -CLP_FFI_GO_METHOD int ir_deserializer_new_deserializer_with_preamble( +CLP_FFI_GO_METHOD int ir_deserializer_create( ByteSpan ir_view, size_t* ir_pos, - int8_t* ir_encoding, - int8_t* metadata_type, - size_t* metadata_pos, - uint16_t* metadata_size, - void** ir_deserializer_ptr, - void** timestamp_ptr + void** ir_deserializer_ptr ); /** @@ -61,12 +64,12 @@ CLP_FFI_GO_METHOD int ir_deserializer_new_deserializer_with_preamble( * @return ffi::ir_stream::IRErrorCode forwarded from * ffi::ir_stream::eight_byte_encoding::decode_next_message */ -CLP_FFI_GO_METHOD int ir_deserializer_deserialize_eight_byte_log_event( - ByteSpan ir_view, - void* ir_deserializer, - size_t* ir_pos, - LogEventView* log_event -); +/* CLP_FFI_GO_METHOD int ir_deserializer_deserialize_eight_byte_log_event( */ +/* ByteSpan ir_view, */ +/* void* ir_deserializer, */ +/* size_t* ir_pos, */ +/* LogEventView* log_event */ +/* ); */ /** * Given a CLP IR buffer with four byte encoding, deserialize the next log @@ -81,76 +84,18 @@ CLP_FFI_GO_METHOD int ir_deserializer_deserialize_eight_byte_log_event( * @return ffi::ir_stream::IRErrorCode forwarded from * ffi::ir_stream::four_byte_encoding::decode_next_message */ -CLP_FFI_GO_METHOD int ir_deserializer_deserialize_four_byte_log_event( - ByteSpan ir_view, - void* ir_deserializer, - size_t* ir_pos, - LogEventView* log_event -); - -/** - * Given a CLP IR buffer with eight byte encoding, deserialize the next log - * event until finding an event that is both within the time interval and - * matches any query. If queries is empty, the first log event within the time - * interval is treated as a match. Returns the components of the found log event - * and the buffer position it ends at. All pointer parameters must be non-null - * (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] ir_view Byte buffer/slice containing CLP IR - * @param[in] ir_deserializer ir::Deserializer to be used as storage for a found - * log event - * @param[in] time_interval Timestamp interval: [lower, upper) - * @param[in] merged_query A concatenation of all queries to filter for; if - * empty any log event as a match - * @param[out] ir_pos Position in ir_view read to - * @param[out] log_event Log event stored in ir_deserializer - * @param[out] matching_query Index into queries of the first matching query or - * 0 if queries is empty - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::four_byte_encoding::decode_next_message - * @return ffi::ir_stream::IRErrorCode_Unsupported_Version + 1 if no query is - * found before time_interval.m_upper (TODO this should be replaced/fix in - * clp core) - */ -CLP_FFI_GO_METHOD int ir_deserializer_deserialize_eight_byte_wildcard_match( - ByteSpan ir_view, - void* ir_deserializer, - TimestampInterval time_interval, - MergedWildcardQueryView merged_query, - size_t* ir_pos, - LogEventView* log_event, - size_t* matching_query -); +/* CLP_FFI_GO_METHOD int ir_deserializer_deserialize_four_byte_log_event( */ +/* ByteSpan ir_view, */ +/* void* ir_deserializer, */ +/* size_t* ir_pos, */ +/* LogEventView* log_event */ +/* ); */ -/** - * Given a CLP IR buffer with four byte encoding, deserialize the next log event - * until finding an event that is both within the time interval and matches any - * query. If queries is empty, the first log event within the time interval is - * treated as a match. Returns the components of the found log event and the - * buffer position it ends at. All pointer parameters must be non-null (non-nil - * Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] ir_view Byte buffer/slice containing CLP IR - * @param[in] ir_deserializer ir::Deserializer to be used as storage for a found - * log event - * @param[in] time_interval Timestamp interval: [lower, upper) - * @param[in] merged_query A concatenation of all queries to filter for; if - * empty any log event as a match - * @param[out] ir_pos Position in ir_view read to - * @param[out] log_event Log event stored in ir_deserializer - * @param[out] matching_query Index into queries of the matching query - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::four_byte_encoding::decode_next_message - * @return ffi::ir_stream::IRErrorCode_Unsupported_Version + 1 if no query is - * found before time_interval.m_upper (TODO this should be replaced/fix in - * clp core) - */ -CLP_FFI_GO_METHOD int ir_deserializer_deserialize_four_byte_wildcard_match( +CLP_FFI_GO_METHOD int ir_deserializer_deserialize_log_event( ByteSpan ir_view, void* ir_deserializer, - TimestampInterval time_interval, - MergedWildcardQueryView merged_query, size_t* ir_pos, - LogEventView* log_event, - size_t* matching_query + ByteSpan* msgpack_log_event_view ); // NOLINTEND(modernize-use-trailing-return-type) diff --git a/cpp/src/ffi_go/ir/encoder.cpp b/cpp/src/ffi_go/ir/encoder.cpp deleted file mode 100644 index 534e60c..0000000 --- a/cpp/src/ffi_go/ir/encoder.cpp +++ /dev/null @@ -1,143 +0,0 @@ -#include "encoder.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" -#include "ffi_go/ir/types.hpp" - -namespace ffi_go::ir { -using clp::ffi::ir_stream::IRErrorCode; -using clp::ir::eight_byte_encoded_variable_t; -using clp::ir::four_byte_encoded_variable_t; - -namespace { -/** - * Generic helper for ir_encoder_encode_*_log_message - */ -template -auto encode_log_message( - StringView log_message, - void* ir_encoder, - StringView* logtype, - encoded_var_view_t* vars, - StringView* dict_vars, - Int32tSpan* dict_var_end_offsets -) -> int { - using encoded_var_t = std::conditional_t< - std::is_same_v, - eight_byte_encoded_variable_t, - four_byte_encoded_variable_t>; - if (nullptr == ir_encoder || nullptr == logtype || nullptr == vars || nullptr == dict_vars - || nullptr == dict_var_end_offsets) - { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); - } - Encoder* encoder{static_cast*>(ir_encoder)}; - auto& ir_log_msg{encoder->m_log_message}; - ir_log_msg.reserve(log_message.m_size); - - std::string_view const log_msg_view{log_message.m_data, log_message.m_size}; - std::vector dict_var_offsets; - if (false - == clp::ffi::encode_message( - log_msg_view, - ir_log_msg.m_logtype, - ir_log_msg.m_vars, - dict_var_offsets - )) - { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); - } - - // dict_var_offsets contains begin_pos followed by end_pos of each - // dictionary variable in the message - int32_t prev_end_off{0}; - for (size_t i = 0; i < dict_var_offsets.size(); i += 2) { - int32_t const begin_pos{dict_var_offsets[i]}; - int32_t const end_pos{dict_var_offsets[i + 1]}; - ir_log_msg.m_dict_vars.insert( - ir_log_msg.m_dict_vars.cbegin() + prev_end_off, - log_msg_view.cbegin() + begin_pos, - log_msg_view.cbegin() + end_pos - ); - prev_end_off = prev_end_off + (end_pos - begin_pos); - ir_log_msg.m_dict_var_end_offsets.push_back(prev_end_off); - } - - logtype->m_data = ir_log_msg.m_logtype.data(); - logtype->m_size = ir_log_msg.m_logtype.size(); - vars->m_data = ir_log_msg.m_vars.data(); - vars->m_size = ir_log_msg.m_vars.size(); - dict_vars->m_data = ir_log_msg.m_dict_vars.data(); - dict_vars->m_size = ir_log_msg.m_dict_vars.size(); - dict_var_end_offsets->m_data = ir_log_msg.m_dict_var_end_offsets.data(); - dict_var_end_offsets->m_size = ir_log_msg.m_dict_var_end_offsets.size(); - return static_cast(IRErrorCode::IRErrorCode_Success); -} -} // namespace - -CLP_FFI_GO_METHOD auto ir_encoder_eight_byte_new() -> void* { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - return new Encoder{}; -} - -CLP_FFI_GO_METHOD auto ir_encoder_four_byte_new() -> void* { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - return new Encoder{}; -} - -CLP_FFI_GO_METHOD auto ir_encoder_eight_byte_close(void* ir_encoder) -> void { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - delete static_cast*>(ir_encoder); -} - -CLP_FFI_GO_METHOD auto ir_encoder_four_byte_close(void* ir_encoder) -> void { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - delete static_cast*>(ir_encoder); -} - -CLP_FFI_GO_METHOD auto ir_encoder_encode_eight_byte_log_message( - StringView log_message, - void* ir_encoder, - StringView* logtype, - Int64tSpan* vars_ptr, - StringView* dict_vars, - Int32tSpan* dict_var_end_offsets -) -> int { - return encode_log_message( - log_message, - ir_encoder, - logtype, - vars_ptr, - dict_vars, - dict_var_end_offsets - ); -} - -CLP_FFI_GO_METHOD auto ir_encoder_encode_four_byte_log_message( - StringView log_message, - void* ir_encoder, - StringView* logtype, - Int32tSpan* vars, - StringView* dict_vars, - Int32tSpan* dict_var_end_offsets -) -> int { - return encode_log_message( - log_message, - ir_encoder, - logtype, - vars, - dict_vars, - dict_var_end_offsets - ); -} -} // namespace ffi_go::ir diff --git a/cpp/src/ffi_go/ir/encoder.h b/cpp/src/ffi_go/ir/encoder.h deleted file mode 100644 index 174f8b8..0000000 --- a/cpp/src/ffi_go/ir/encoder.h +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef FFI_GO_IR_ENCODER_H -#define FFI_GO_IR_ENCODER_H -// header must support C, making modernize checks inapplicable -// NOLINTBEGIN(modernize-use-trailing-return-type) - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" - -/** - * Create a ir::Encoder used as the underlying data storage for a Go ir.Encoder. - * @return New ir::Encoder's address - */ -CLP_FFI_GO_METHOD void* ir_encoder_eight_byte_new(); - -/** - * @copydoc ir_encoder_eight_byte_new() - */ -CLP_FFI_GO_METHOD void* ir_encoder_four_byte_new(); - -/** - * Clean up the underlying ir::Encoder of a Go ir.Encoder. - * @param[in] ir_encoder Address of a ir::Encoder created and returned by - * ir_encoder_eight_byte_new - */ -CLP_FFI_GO_METHOD void ir_encoder_eight_byte_close(void* ir_encoder); - -/** - * Clean up the underlying ir::Encoder of a Go ir.Encoder. - * @param[in] ir_encoder Address of a ir::Encoder created and returned by - * ir_encoder_four_byte_new - */ -CLP_FFI_GO_METHOD void ir_encoder_four_byte_close(void* ir_encoder); - -/** - * Given a log message, encode it into a CLP IR object with eight byte encoding. - * An ir::Encoder must be provided to use as the backing storage for the - * corresponding Go ir.Encoder. All pointer parameters must be non-null (non-nil - * Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] log_message Log message to encode - * @param[in] ir_encoder ir::Encoder to be used as storage for the encoded log - * message - * @param[out] logtype Type of the log message (the log message with variables - * extracted and replaced with placeholders) - * @param[out] vars Array of encoded variables - * @param[out] dict_vars String containing all dictionary variables concatenated - * together - * @param[out] dict_var_end_offsets Array of offsets into dict_vars marking the - * end of a dictionary variable - * @return ffi::ir_stream::IRErrorCode_Corrupted_IR if ffi::encode_message - * returns false - * @return ffi::ir_stream::IRErrorCode_Success on success - */ -CLP_FFI_GO_METHOD int ir_encoder_encode_eight_byte_log_message( - StringView log_message, - void* ir_encoder, - StringView* logtype, - Int64tSpan* vars, - StringView* dict_vars, - Int32tSpan* dict_var_end_offsets -); - -/** - * Given a log message, encode it into a CLP IR object with four byte encoding. - * An ir::Encoder must be provided to use as the backing storage for the - * corresponding Go ir.Encoder. All pointer parameters must be non-null (non-nil - * Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] log_message Log message to encode - * @param[in] ir_encoder ir::Encoder to be used as storage for the encoded log - * message - * @param[out] logtype Type of the log message (the log message with variables - * extracted and replaced with placeholders) - * @param[out] vars Array of encoded variables - * @param[out] dict_vars String containing all dictionary variables concatenated - * together - * @param[out] dict_var_end_offsets Array of offsets into dict_vars marking the - * end of a dictionary variable - * @return ffi::ir_stream::IRErrorCode_Corrupted_IR if ffi::encode_message - * returns false - * @return ffi::ir_stream::IRErrorCode_Success on success - */ -CLP_FFI_GO_METHOD int ir_encoder_encode_four_byte_log_message( - StringView log_message, - void* ir_encoder, - StringView* logtype, - Int32tSpan* vars, - StringView* dict_vars, - Int32tSpan* dict_var_end_offsets -); - -// NOLINTEND(modernize-use-trailing-return-type) -#endif // FFI_GO_IR_ENCODER_H diff --git a/cpp/src/ffi_go/ir/serializer.cpp b/cpp/src/ffi_go/ir/serializer.cpp index 93f5829..fda51b3 100644 --- a/cpp/src/ffi_go/ir/serializer.cpp +++ b/cpp/src/ffi_go/ir/serializer.cpp @@ -1,199 +1,126 @@ #include "serializer.h" -#include -#include +#include +#include +#include +#include -#include -#include +#include #include #include "ffi_go/api_decoration.h" #include "ffi_go/defs.h" -#include "ffi_go/ir/types.hpp" namespace ffi_go::ir { -using clp::ffi::ir_stream::IRErrorCode; using clp::ir::eight_byte_encoded_variable_t; using clp::ir::four_byte_encoded_variable_t; namespace { +/** + * Generic helper for ir_serializer_*_close functions. + */ +template +auto serializer_close(void* ir_serializer) -> void; + /** * Generic helper for ir_serializer_new_*_serializer_with_preamble functions. */ template -[[nodiscard]] auto new_serializer_with_preamble( - StringView ts_pattern, - StringView ts_pattern_syntax, - StringView time_zone_id, - [[maybe_unused]] epoch_time_ms_t reference_ts, - void** ir_serializer_ptr, - ByteSpan* ir_view -) -> int; +[[nodiscard]] auto serializer_create(void*& ir_serializer_ptr, ByteSpan* ir_view) -> int; /** * Generic helper for ir_serializer_serialize_*_log_event functions. */ template -[[nodiscard]] auto serialize_log_event( - StringView log_message, - epoch_time_ms_t timestamp_or_delta, - void* ir_serializer, - ByteSpan* ir_view -) -> int; +[[nodiscard]] auto +serialize_log_event(void* ir_serializer, ByteSpan msgpack_bytes, ByteSpan* ir_view) -> int; template -auto new_serializer_with_preamble( - StringView ts_pattern, - StringView ts_pattern_syntax, - StringView time_zone_id, - [[maybe_unused]] epoch_time_ms_t reference_ts, - void** ir_serializer_ptr, - ByteSpan* ir_view -) -> int { - if (nullptr == ir_serializer_ptr || nullptr == ir_view) { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); - } - Serializer* serializer{new Serializer{}}; - if (nullptr == serializer) { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); - } - *ir_serializer_ptr = serializer; - - bool success{false}; - if constexpr (std::is_same_v) { - success = clp::ffi::ir_stream::eight_byte_encoding::serialize_preamble( - std::string_view{ts_pattern.m_data, ts_pattern.m_size}, - std::string_view{ts_pattern_syntax.m_data, ts_pattern_syntax.m_size}, - std::string_view{time_zone_id.m_data, time_zone_id.m_size}, - serializer->m_ir_buf - ); - } else if constexpr (std::is_same_v) { - success = clp::ffi::ir_stream::four_byte_encoding::serialize_preamble( - std::string_view{ts_pattern.m_data, ts_pattern.m_size}, - std::string_view{ts_pattern_syntax.m_data, ts_pattern_syntax.m_size}, - std::string_view{time_zone_id.m_data, time_zone_id.m_size}, - reference_ts, - serializer->m_ir_buf - ); - } else { - static_assert(cAlwaysFalse, "Invalid/unhandled encoding type"); +auto serializer_close(void* ir_serializer) -> void { + std::unique_ptr>( + static_cast*>(ir_serializer) + ); +} + +template +auto serializer_create(void*& ir_serializer_ptr, ByteSpan* ir_view) -> int { + if (nullptr != ir_serializer_ptr || nullptr == ir_view) { + return static_cast(std::errc::protocol_error); } - if (false == success) { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); + auto result{clp::ffi::ir_stream::Serializer::create()}; + if (result.has_failure()) { + return result.error().value(); } - - ir_view->m_data = serializer->m_ir_buf.data(); - ir_view->m_size = serializer->m_ir_buf.size(); - return static_cast(IRErrorCode::IRErrorCode_Success); + auto ir_buf_view{result.value().get_ir_buf_view()}; + ir_view->m_data = ir_buf_view.data(); + ir_view->m_size = ir_buf_view.size(); + auto s = std::make_unique>( + std::move(result.value()) + ); + ir_serializer_ptr = s.release(); + return 0; } template -auto serialize_log_event( - StringView log_message, - epoch_time_ms_t timestamp_or_delta, - void* ir_serializer, - ByteSpan* ir_view -) -> int { +auto serialize_log_event(void* ir_serializer, ByteSpan msgpack_bytes, ByteSpan* ir_view) -> int { if (nullptr == ir_serializer || nullptr == ir_view) { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); + return static_cast(std::errc::protocol_error); } - Serializer* serializer{static_cast(ir_serializer)}; - serializer->m_ir_buf.clear(); - serializer->reserve(log_message.m_size); - - bool success{false}; - if constexpr (std::is_same_v) { - success = clp::ffi::ir_stream::eight_byte_encoding::serialize_log_event( - timestamp_or_delta, - std::string_view{log_message.m_data, log_message.m_size}, - serializer->m_logtype, - serializer->m_ir_buf - ); - } else if constexpr (std::is_same_v) { - success = clp::ffi::ir_stream::four_byte_encoding::serialize_log_event( - timestamp_or_delta, - std::string_view{log_message.m_data, log_message.m_size}, - serializer->m_logtype, - serializer->m_ir_buf - ); - } else { - static_assert(cAlwaysFalse, "Invalid/unhandled encoding type"); - } - if (false == success) { - return static_cast(IRErrorCode::IRErrorCode_Corrupted_IR); + auto* serializer{static_cast*>(ir_serializer + )}; + serializer->clear_ir_buf(); + + auto const mp_handle{ + msgpack::unpack(static_cast(msgpack_bytes.m_data), msgpack_bytes.m_size) + }; + // TODO: ideally change ffi-core API to not require using the union. + // NOLINTNEXTLINE(cppcoreguidelines-pro-type-union-access) + if (false == serializer->serialize_msgpack_map(mp_handle.get().via.map)) { + return static_cast(std::errc::protocol_error); } - ir_view->m_data = serializer->m_ir_buf.data(); - ir_view->m_size = serializer->m_ir_buf.size(); - return static_cast(IRErrorCode::IRErrorCode_Success); + auto ir_buf_view{serializer->get_ir_buf_view()}; + ir_view->m_data = ir_buf_view.data(); + ir_view->m_size = ir_buf_view.size(); + return 0; } } // namespace -CLP_FFI_GO_METHOD auto ir_serializer_close(void* ir_serializer) -> void { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - delete static_cast(ir_serializer); +CLP_FFI_GO_METHOD auto ir_serializer_eight_byte_close(void* ir_serializer) -> void { + serializer_close(ir_serializer); } -CLP_FFI_GO_METHOD auto ir_serializer_new_eight_byte_serializer_with_preamble( - StringView ts_pattern, - StringView ts_pattern_syntax, - StringView time_zone_id, - void** ir_serializer_ptr, - ByteSpan* ir_view -) -> int { - return new_serializer_with_preamble( - ts_pattern, - ts_pattern_syntax, - time_zone_id, - 0, - ir_serializer_ptr, - ir_view - ); +CLP_FFI_GO_METHOD auto ir_serializer_four_byte_close(void* ir_serializer) -> void { + serializer_close(ir_serializer); } -CLP_FFI_GO_METHOD auto ir_serializer_new_four_byte_serializer_with_preamble( - StringView ts_pattern, - StringView ts_pattern_syntax, - StringView time_zone_id, - epoch_time_ms_t reference_ts, - void** ir_serializer_ptr, - ByteSpan* ir_view -) -> int { - return new_serializer_with_preamble( - ts_pattern, - ts_pattern_syntax, - time_zone_id, - reference_ts, - ir_serializer_ptr, - ir_view - ); +CLP_FFI_GO_METHOD auto +ir_serializer_eight_byte_create(void** ir_serializer_ptr, ByteSpan* ir_view) -> int { + return serializer_create(*ir_serializer_ptr, ir_view); +} + +CLP_FFI_GO_METHOD auto +ir_serializer_four_byte_create(void** ir_serializer_ptr, ByteSpan* ir_view) -> int { + return serializer_create(*ir_serializer_ptr, ir_view); } -CLP_FFI_GO_METHOD auto ir_serializer_serialize_eight_byte_log_event( - StringView log_message, - epoch_time_ms_t timestamp, +CLP_FFI_GO_METHOD auto ir_serializer_eight_byte_serialize_log_event( void* ir_serializer, + ByteSpan msgpack_bytes, ByteSpan* ir_view ) -> int { return serialize_log_event( - log_message, - timestamp, ir_serializer, + msgpack_bytes, ir_view ); } -CLP_FFI_GO_METHOD auto ir_serializer_serialize_four_byte_log_event( - StringView log_message, - epoch_time_ms_t timestamp_delta, +CLP_FFI_GO_METHOD auto ir_serializer_four_byte_serialize_log_event( void* ir_serializer, + ByteSpan msgpack_bytes, ByteSpan* ir_view ) -> int { - return serialize_log_event( - log_message, - timestamp_delta, - ir_serializer, - ir_view - ); + return serialize_log_event(ir_serializer, msgpack_bytes, ir_view); } } // namespace ffi_go::ir diff --git a/cpp/src/ffi_go/ir/serializer.h b/cpp/src/ffi_go/ir/serializer.h index 377df1a..aa87a72 100644 --- a/cpp/src/ffi_go/ir/serializer.h +++ b/cpp/src/ffi_go/ir/serializer.h @@ -7,97 +7,74 @@ #include "ffi_go/defs.h" /** - * Clean up the underlying ir::Serializer of a Go ir.Serializer. - * @param[in] ir_serializer Address of a ir::Serializer created and returned by - * ir_serializer_serialize_*_preamble + * Clean up the underlying `clp::ffi::ir_stream::Serializer` of a Go `ir.Serializer`. + * @param[in] ir_serializer Address of a `clp::ffi::ir_stream::Serializer` created and returned by + * `ir_serializer_eight_byte_create` */ -CLP_FFI_GO_METHOD void ir_serializer_close(void* ir_serializer); +CLP_FFI_GO_METHOD void ir_serializer_eight_byte_close(void* ir_serializer); /** - * Given the fields of a CLP IR preamble, serialize them into an IR byte stream - * with eight byte encoding. An ir::Serializer will be allocated to use as the - * backing storage for a Go ir.Serializer (i.e. subsequent calls to - * ir_serializer_serialize_*_log_event). All pointer parameters must be non-null - * (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] ts_pattern Format string for the timestamp to be used when - * deserializing the IR - * @param[in] ts_pattern_syntax Type of the format string for understanding how - * to parse it - * @param[in] time_zone_id TZID timezone of the timestamps in the IR - * @param[out] ir_serializer_ptr Address of a new ir::Serializer - * @param[out] ir_view View of a IR buffer containing the serialized preamble - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::eight_byte_encoding::encode_preamble + * Clean up the underlying `clp::ffi::ir_stream::Serializer` of a Go `ir.Serializer`. + * @param[in] ir_serializer Address of a `clp::ffi::ir_stream::Serializer` created and returned by + * `ir_serializer_four_byte_create` */ -CLP_FFI_GO_METHOD int ir_serializer_new_eight_byte_serializer_with_preamble( - StringView ts_pattern, - StringView ts_pattern_syntax, - StringView time_zone_id, - void** ir_serializer_ptr, - ByteSpan* ir_view -); +CLP_FFI_GO_METHOD void ir_serializer_four_byte_close(void* ir_serializer); /** - * Given the fields of a CLP IR preamble, serialize them into an IR byte stream - * with four byte encoding. An ir::Serializer will be allocated to use as the - * backing storage for a Go ir.Serializer (i.e. subsequent calls to - * ir_serializer_serialize_*_log_event). All pointer parameters must be non-null - * (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] ts_pattern Format string for the timestamp to be used when - * deserializing the IR - * @param[in] ts_pattern_syntax Type of the format string for understanding how - * to parse it - * @param[in] time_zone_id TZID timezone of the timestamps in the IR - * @param[out] ir_serializer_ptr Address of a new ir::Serializer - * @param[out] ir_view View of a IR buffer containing the serialized preamble - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::four_byte_encoding::encode_preamble + * Create an eight byte `clp::ffi::ir_stream::Serializer` to use as the backing storage for a Go + * `ir.Serializer`. The serializer contains a preamble and is required for all subsequent calls to + * `ir_serializer_serialize_eight_byte_*`. + * @param[out] ir_serializer_ptr Address of a new `clp::ffi::ir_stream::Serializer` to store in Go. + * @param[out] ir_view View of a IR buffer containing the serialized preamble. + * @return 0 on success. + * @return `std::errc::protocol_error` value on null arguments. + * @return Forward's `clp::ffi::ir_stream::Serializer::create` return values. */ -CLP_FFI_GO_METHOD int ir_serializer_new_four_byte_serializer_with_preamble( - StringView ts_pattern, - StringView ts_pattern_syntax, - StringView time_zone_id, - epoch_time_ms_t reference_ts, - void** ir_serializer_ptr, - ByteSpan* ir_view -); +CLP_FFI_GO_METHOD int ir_serializer_eight_byte_create(void** ir_serializer_ptr, ByteSpan* ir_view); + +/** + * Create an four byte `clp::ffi::ir_stream::Serializer` to use as the backing storage for a Go + * `ir.Serializer`. The serializer contains a preamble and is required for all subsequent calls to + * `ir_serializer_serialize_four_byte_*`. + * @param[out] ir_serializer_ptr Address of a new `clp::ffi::ir_stream::Serializer` to store in Go. + * @param[out] ir_view View of a IR buffer containing the serialized preamble. + * @return 0 on success. + * @return `std::errc::protocol_error` value on null arguments. + * @return Forward's `clp::ffi::ir_stream::Serializer::create` return values. + */ +CLP_FFI_GO_METHOD int ir_serializer_four_byte_create(void** ir_serializer_ptr, ByteSpan* ir_view); /** - * Given the fields of a log event, serialize them into an IR byte stream with - * eight byte encoding. An ir::Serializer must be provided to use as the backing - * storage for the corresponding Go ir.Serializer. All pointer parameters must - * be non-null (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] log_message Log message of the log event to serialize - * @param[in] timestamp Timestamp of the log event to serialize - * @param[in] ir_serializer ir::Serializer object to be used as storage - * @param[out] ir_view View of a IR buffer containing the serialized log event - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::eight_byte_encoding::encode_message + * Given a log event encoded as a msgpack map, serialize it into an IR byte stream with eight byte + * encoding. A `clp::ffi::ir_stream::Serializer` must be provided to use as the backing storage for + * the corresponding Go `ir.Serializer`. + * @param[in] ir_serializer_ptr `clp::ffi::ir_stream::Serializer` object to be used. + * @param[in] msgpack_bytes log event encoded as a msgpack map. + * @param[out] ir_view View of a IR buffer containing the serialized log event. + * @return 0 on success. + * @return `std::errc::protocol_error` value on null arguments. + * @return Forward's `clp::ffi::ir_stream::Serializer::serialize_msgpack_map` return values. */ -CLP_FFI_GO_METHOD int ir_serializer_serialize_eight_byte_log_event( - StringView log_message, - epoch_time_ms_t timestamp, +CLP_FFI_GO_METHOD int ir_serializer_eight_byte_serialize_log_event( void* ir_serializer, + ByteSpan msgpack_bytes, ByteSpan* ir_view ); /** - * Given the fields of a log event, serialize them into an IR byte stream with - * four byte encoding. An ir::Serializer must be provided to use as the backing - * storage for the corresponding Go ir.Serializer. All pointer parameters must - * be non-null (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] log_message Log message to serialize - * @param[in] timestamp_delta Timestamp delta to the previous log event in the - * IR stream - * @param[in] ir_serializer ir::Serializer object to be used as storage - * @param[out] ir_view View of a IR buffer containing the serialized log event - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::four_byte_encoding::encode_message + * Given a log event encoded as a msgpack map, serialize it into an IR byte stream with four byte + * encoding. A `clp::ffi::ir_stream::Serializer` must be provided to use as the backing storage for + * the corresponding Go `ir.Serializer`. + * @param[in] ir_serializer_ptr `clp::ffi::ir_stream::Serializer` object to be used. + * @param[in] msgpack_bytes log event encoded as a msgpack map. + * @param[out] ir_view View of a IR buffer containing the serialized log event. + * @return 0 on success. + * @return `std::errc::protocol_error` value on null arguments. + * @return Forward's `clp::ffi::ir_stream::Serializer::serialize_msgpack_map` return values. */ -CLP_FFI_GO_METHOD int ir_serializer_serialize_four_byte_log_event( - StringView log_message, - epoch_time_ms_t timestamp_delta, +CLP_FFI_GO_METHOD int ir_serializer_four_byte_serialize_log_event( void* ir_serializer, + ByteSpan msgpack_bytes, ByteSpan* ir_view ); diff --git a/cpp/src/ffi_go/ir/types.hpp b/cpp/src/ffi_go/ir/types.hpp deleted file mode 100644 index 5f82c47..0000000 --- a/cpp/src/ffi_go/ir/types.hpp +++ /dev/null @@ -1,80 +0,0 @@ -#ifndef FFI_GO_IR_LOG_TYPES_HPP -#define FFI_GO_IR_LOG_TYPES_HPP - -#include -#include -#include -#include - -#include - -#include "ffi_go/types.hpp" - -namespace ffi_go::ir { - -template -[[maybe_unused]] constexpr bool cAlwaysFalse{false}; - -template -struct LogMessage { - auto reserve(size_t cap) -> void { m_logtype.reserve(cap); } - - std::string m_logtype; - std::vector m_vars; - std::vector m_dict_vars; - std::vector m_dict_var_end_offsets; -}; - -/** - * The backing storage for a Go ir.Decoder. - * Mutating a field will invalidate the corresponding View (slice) stored in the - * ir.Decoder (without any warning or way to guard in Go). - */ -struct Decoder { - ffi_go::LogMessage m_log_message; -}; - -/** - * The backing storage for a Go ir.Encoder. - * Mutating a field will invalidate the corresponding View (slice) stored in the - * ir.Encoder (without any warning or way to guard in Go). - */ -template -struct Encoder { - LogMessage m_log_message; -}; - -/** - * The backing storage for a Go ir.Deserializer. - * Mutating a field will invalidate the corresponding View (slice) stored in the - * ir.Deserializer (without any warning or way to guard in Go). - */ -struct Deserializer { - ffi_go::LogEventStorage m_log_event; - clp::ir::epoch_time_ms_t m_timestamp{}; -}; - -/** - * The backing storage for a Go ir.Serializer. - * Mutating a field will invalidate the corresponding View (slice) stored in the - * ir.Serializer (without any warning or way to guard in Go). - */ -struct Serializer { - /** - * Reserve capacity for the logtype and ir buffer. - * We reserve 1.5x the size of the log message type as a heuristic for the - * full IR buffer size. The log message type of a log event is not - * guaranteed to be less than or equal to the size of the actual log - * message, but in general this is true. - */ - auto reserve(size_t cap) -> void { - m_logtype.reserve(cap); - m_ir_buf.reserve(cap + cap / 2); - } - - std::string m_logtype; - std::vector m_ir_buf; -}; -} // namespace ffi_go::ir - -#endif // FFI_GO_IR_LOG_TYPES_HPP diff --git a/cpp/src/ffi_go/search/wildcard_query.cpp b/cpp/src/ffi_go/search/wildcard_query.cpp deleted file mode 100644 index 80c8281..0000000 --- a/cpp/src/ffi_go/search/wildcard_query.cpp +++ /dev/null @@ -1,32 +0,0 @@ -#include "wildcard_query.h" - -#include -#include - -#include - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" - -namespace ffi_go::search { -CLP_FFI_GO_METHOD auto wildcard_query_new(StringView query, void** ptr) -> StringView { - auto* clean{new std::string{clp::string_utils::clean_up_wildcard_search_string( - std::string_view{query.m_data, query.m_size} - )}}; - *ptr = clean; - return {clean->data(), clean->size()}; -} - -CLP_FFI_GO_METHOD auto wildcard_query_delete(void* str) -> void { - // NOLINTNEXTLINE(cppcoreguidelines-owning-memory) - delete static_cast(str); -} - -CLP_FFI_GO_METHOD auto wildcard_query_match(StringView target, WildcardQueryView query) -> int { - return static_cast(clp::string_utils::wildcard_match_unsafe( - {target.m_data, target.m_size}, - {query.m_query.m_data, query.m_query.m_size}, - query.m_case_sensitive - )); -} -} // namespace ffi_go::search diff --git a/cpp/src/ffi_go/search/wildcard_query.h b/cpp/src/ffi_go/search/wildcard_query.h deleted file mode 100644 index 62dbb23..0000000 --- a/cpp/src/ffi_go/search/wildcard_query.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef FFI_GO_IR_WILDCARD_QUERY_H -#define FFI_GO_IR_WILDCARD_QUERY_H -// header must support C, making modernize checks inapplicable -// NOLINTBEGIN(modernize-use-trailing-return-type) -// NOLINTBEGIN(modernize-use-using) - -#ifndef __cplusplus - #include -#endif - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" - -/** - * A timestamp interval of [m_lower, m_upper). - */ -typedef struct { - epoch_time_ms_t m_lower; - epoch_time_ms_t m_upper; -} TimestampInterval; - -/** - * A view of a wildcard query passed down from Go. The query string is assumed - * to have been cleaned using the CLP function `clean_up_wildcard_search_string` - * on construction. m_case_sensitive is 1 for a case sensitive query (0 for case - * insensitive). - */ -typedef struct { - StringView m_query; - bool m_case_sensitive; -} WildcardQueryView; - -/** - * A view of a Go search.MergedWildcardQuery passed down through Cgo. The - * string is a concatenation of all wildcard queries, while m_end_offsets stores - * the size of each query. - */ -typedef struct { - StringView m_queries; - SizetSpan m_end_offsets; - BoolSpan m_case_sensitivity; -} MergedWildcardQueryView; - -/** - * Given a query string, allocate and return a clean string that is safe for - * matching. See `clean_up_wildcard_search_string` in CLP for more details. - * @param[in] query Query string to clean - * @param[in] ptr Address of a new std::string - * @return New string holding cleaned query - */ -CLP_FFI_GO_METHOD StringView wildcard_query_new(StringView query, void** ptr); - -/** - * Delete a std::string holding a wildcard query. - * @param[in] str Address of a std::string created and returned by - * clean_wildcard_query - */ -CLP_FFI_GO_METHOD void wildcard_query_delete(void* str); - -/** - * Given a target string perform CLP wildcard matching using query. See - * `wildcard_match_unsafe` in CLP src/string_utils.hpp. - * @param[in] target String to perform matching on - * @param[in] query Query to use for matching - * @return 1 if query matches target, 0 otherwise - */ -CLP_FFI_GO_METHOD int wildcard_query_match(StringView target, WildcardQueryView query); - -// NOLINTEND(modernize-use-using) -// NOLINTEND(modernize-use-trailing-return-type) -#endif // FFI_GO_IR_WILDCARD_QUERY_H diff --git a/cpp/src/ffi_go/types.hpp b/cpp/src/ffi_go/types.hpp deleted file mode 100644 index 0175249..0000000 --- a/cpp/src/ffi_go/types.hpp +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef FFI_GO_LOG_TYPES_HPP -#define FFI_GO_LOG_TYPES_HPP - -#include -#include - -namespace ffi_go { -/** - * The backing storage for a Go ffi.LogMessageView. - * Mutating it will invalidate the corresponding View (slice) stored in the - * ffi.LogMessageView (without any warning or way to guard in Go). - */ -using LogMessage = std::string; - -/** - * The backing storage for a Go ffi.LogEventView. - * Mutating a field will invalidate the corresponding View (slice) stored in the - * ffi.LogEventView (without any warning or way to guard in Go). - */ -struct LogEventStorage { - auto reserve(size_t cap) -> void { m_log_message.reserve(cap); } - - LogMessage m_log_message; -}; -} // namespace ffi_go - -#endif // FFI_GO_LOG_TYPES_HPP diff --git a/cpp/src/lint/msgpack.hpp b/cpp/src/lint/msgpack.hpp new file mode 100644 index 0000000..657184d --- /dev/null +++ b/cpp/src/lint/msgpack.hpp @@ -0,0 +1,482 @@ +#ifndef FFI_GO_MSGPACK_H +#define FFI_GO_MSGPACK_H + +// The list of includes was generated by building with the '-H' compiler flag to print out all +// headers used. The compiler output was filtered for msgpack headers and fed through awk to remove +// duplicates while keeping the order of appearance. +// 1. Add `-H` in cpp/CMakeLists.txt +// 2. `task build-cpp 2>&1 | tee compiler.log` +// 3. Run to parse the compiler output and create the list of headers: +// ``` +// printf "#include <%s>\n" +// $(rg --replace '$1' ".*/build/deps/msgpack-install/include/(.*\.hpp)$" compiler.log +// | awk '!a[$0]++') +// ``` + +// IWYU pragma: begin_exports +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +// IWYU pragma: end_exports + +#endif // FFI_GO_MSGPACK_H diff --git a/ffi/ffi.go b/ffi/ffi.go index 7d19294..42aece4 100644 --- a/ffi/ffi.go +++ b/ffi/ffi.go @@ -2,31 +2,6 @@ // libraries, without CLP encoding or serialization. package ffi -// Mirrors cpp type epoch_time_ms_t -type EpochTimeMs int64 - -// A ffi.LogMessage represents the text (message) component of a log event. -// A LogMessageView is a LogMessage that is backed by C++ allocated memory -// rather than the Go heap. A LogMessageView, x, is valid when returned and will -// remain valid until a new LogMessageView is returned by the same object (e.g. -// an ir.Deserializer) that returns x. -type ( - LogMessageView = string - LogMessage = string -) - // LogEvent provides programmatic access to the various components of a log // event. -type LogEvent struct { - LogMessage - Timestamp EpochTimeMs -} - -// LogEventView memory is allocated and owned by the C++ object (e.g., reader, -// deserializer) that returns it. Reusing a LogEventView after the same object -// has issued a new view leads to undefined behavior, as different objects -// manage their own memory independently. -type LogEventView struct { - LogMessageView - Timestamp EpochTimeMs -} +type LogEvent = map[string]interface{} diff --git a/generate.go b/generate.go deleted file mode 100644 index 744421d..0000000 --- a/generate.go +++ /dev/null @@ -1,6 +0,0 @@ -//go:generate cmake -E env GOOS=${GOOS} GOARCH=${GOARCH} cmake -S cpp -B cpp/build -//go:generate cmake --build cpp/build -j -//go:generate cmake --install cpp/build --prefix . - -//nolint:stylecheck -package clp_ffi_go diff --git a/go.mod b/go.mod index b36779d..e431d1f 100644 --- a/go.mod +++ b/go.mod @@ -2,4 +2,9 @@ module github.com/y-scope/clp-ffi-go go 1.22.3 -require github.com/klauspost/compress v1.16.5 +require ( + github.com/klauspost/compress v1.16.5 + github.com/vmihailenco/msgpack/v5 v5.4.1 +) + +require github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect diff --git a/go.sum b/go.sum index 1a08641..5616a05 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,14 @@ +github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0= +github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/vmihailenco/msgpack/v5 v5.4.1 h1:cQriyiUvjTwOHg8QZaPihLWeRAAVoCpE00IUPn0Bjt8= +github.com/vmihailenco/msgpack/v5 v5.4.1/go.mod h1:GaZTsDaehaPpQVyxrf5mtQlH+pc21PIudVV/E3rRQok= +github.com/vmihailenco/tagparser/v2 v2.0.0 h1:y09buUbR+b5aycVFQs/g70pqKVZNBmxwAhO7/IwNM9g= +github.com/vmihailenco/tagparser/v2 v2.0.0/go.mod h1:Wri+At7QHww0WTrCBeu4J6bNtoV6mEfg5OIWRZA9qds= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/include/ffi_go/api_decoration.h b/include/ffi_go/api_decoration.h index 8864bfa..8c61715 100644 --- a/include/ffi_go/api_decoration.h +++ b/include/ffi_go/api_decoration.h @@ -2,8 +2,7 @@ #define FFI_GO_API_DECORATION_H /** - * If the file is compiled with a C++ compiler, `extern "C"` must be defined to - * ensure C linkage. + * If the file is compiled with a C++ compiler, `extern "C"` must be defined to ensure C linkage. */ #ifdef __cplusplus #define CLP_FFI_GO_EXTERN_C extern "C" @@ -12,9 +11,8 @@ #endif /** - * `CLP_FFI_GO_METHOD` should be added at the beginning of a function's - * declaration/implementation to decorate any APIs that are exposed to the - * Golang layer. + * `CLP_FFI_GO_METHOD` should be added at the beginning of a function's declaration/implementation + * to decorate any APIs that are exposed to the Golang layer. */ #define CLP_FFI_GO_METHOD CLP_FFI_GO_EXTERN_C diff --git a/include/ffi_go/defs.h b/include/ffi_go/defs.h index 70ba9a5..1f092cd 100644 --- a/include/ffi_go/defs.h +++ b/include/ffi_go/defs.h @@ -26,7 +26,7 @@ typedef struct { * A span of a byte array passed down through Cgo. */ typedef struct { - void* m_data; + void const* m_data; size_t m_size; } ByteSpan; diff --git a/include/ffi_go/ir/decoder.h b/include/ffi_go/ir/decoder.h deleted file mode 100644 index 560d285..0000000 --- a/include/ffi_go/ir/decoder.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef FFI_GO_IR_DECODER_H -#define FFI_GO_IR_DECODER_H -// header must support C, making modernize checks inapplicable -// NOLINTBEGIN(modernize-use-trailing-return-type) - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" - -/** - * Create a ir::Decoder used as the underlying data storage for a Go ir.Decoder. - * @return New ir::Decoder's address - */ -CLP_FFI_GO_METHOD void* ir_decoder_new(); - -/** - * Clean up the underlying ir::Decoder of a Go ir.Decoder. - * @param[in] ir_encoder Address of a ir::Decoder created and returned by - * ir_decoder_new - */ -CLP_FFI_GO_METHOD void ir_decoder_close(void* decoder); - -/** - * Given the fields of a CLP IR encoded log message with eight byte encoding, - * decode it into the original log message. An ir::Decoder must be provided to - * use as the backing storage for the corresponding Go ir.Decoder. All pointer - * parameters must be non-null (non-nil Cgo C. pointer or unsafe.Pointer - * from Go). - * @param[in] logtype Type of the log message (the log message with variables - * extracted and replaced with placeholders) - * @param[in] vars Array of encoded variables - * @param[in] dict_vars String containing all dictionary variables concatenated - * together - * @param[in] dict_var_end_offsets Array of offsets into dict_vars marking the - * end of a dictionary variable - * @param[in] ir_decoder ir::Decoder to be used as storage for the decoded log - * message - * @param[out] log_message Decoded log message - * @return ffi::ir_stream::IRErrorCode_Decode_Error if ffi::decode_message - * throws or errors - * @return ffi::ir_stream::IRErrorCode_Success on success - */ -CLP_FFI_GO_METHOD int ir_decoder_decode_eight_byte_log_message( - StringView logtype, - Int64tSpan vars, - StringView dict_vars, - Int32tSpan dict_var_end_offsets, - void* ir_decoder, - StringView* log_message -); - -/** - * Given the fields of a CLP IR encoded log message with four byte encoding, - * decode it into the original log message. An ir::Decoder must be provided to - * use as the backing storage for the corresponding Go ir.Decoder. All pointer - * parameters must be non-null (non-nil Cgo C. pointer or unsafe.Pointer - * from Go). - * @param[in] logtype Type of the log message (the log message with variables - * extracted and replaced with placeholders) - * @param[in] vars Array of encoded variables - * @param[in] dict_vars String containing all dictionary variables concatenated - * together - * @param[in] dict_var_end_offsets Array of offsets into dict_vars marking the - * end of a dictionary variable - * @param[in] ir_decoder ir::Decoder to be used as storage for the decoded log - * message - * @param[out] log_message Decoded log message - * @return ffi::ir_stream::IRErrorCode_Decode_Error if ffi::decode_message - * throws or errors - * @return ffi::ir_stream::IRErrorCode_Success on success - */ -CLP_FFI_GO_METHOD int ir_decoder_decode_four_byte_log_message( - StringView logtype, - Int32tSpan vars, - StringView dict_vars, - Int32tSpan dict_var_end_offsets, - void* ir_decoder, - StringView* log_message -); - -// NOLINTEND(modernize-use-trailing-return-type) -#endif // FFI_GO_IR_DECODER_H diff --git a/include/ffi_go/ir/deserializer.h b/include/ffi_go/ir/deserializer.h index a728962..361b031 100644 --- a/include/ffi_go/ir/deserializer.h +++ b/include/ffi_go/ir/deserializer.h @@ -9,13 +9,21 @@ #include "ffi_go/api_decoration.h" #include "ffi_go/defs.h" -#include "ffi_go/search/wildcard_query.h" /** - * Clean up the underlying ir::Deserializer of a Go ir.Deserializer. - * @param[in] ir_deserializer The address of a ir::Deserializer created and - * returned by ir_deserializer_new_deserializer_with_preamble + * Clean up the underlying `ffi_go::ir::Serializer` of a Go `ir.Serializer`. + * @param[in] ir_deserializer The address of a `ffi_go::ir::Serializer` created and returned by + * `ir_deserializer_eight_byte_create */ +/* CLP_FFI_GO_METHOD void ir_deserializer_eight_byte_close(void* ir_deserializer); */ + +/** + * Clean up the underlying `ffi_go::ir::Serializer` of a Go `ir.Serializer`. + * @param[in] ir_deserializer The address of a `ffi_go::ir::Serializer` created and returned by + * `ir_deserializer_eight_byte_create + */ +/* CLP_FFI_GO_METHOD void ir_deserializer_four_byte_close(void* ir_deserializer); */ + CLP_FFI_GO_METHOD void ir_deserializer_close(void* ir_deserializer); /** @@ -37,15 +45,10 @@ CLP_FFI_GO_METHOD void ir_deserializer_close(void* ir_deserializer); * @return ffi::ir_stream::IRErrorCode forwarded from either * ffi::ir_stream::get_encoding_type or ffi::ir_stream::decode_preamble */ -CLP_FFI_GO_METHOD int ir_deserializer_new_deserializer_with_preamble( +CLP_FFI_GO_METHOD int ir_deserializer_create( ByteSpan ir_view, size_t* ir_pos, - int8_t* ir_encoding, - int8_t* metadata_type, - size_t* metadata_pos, - uint16_t* metadata_size, - void** ir_deserializer_ptr, - void** timestamp_ptr + void** ir_deserializer_ptr ); /** @@ -61,12 +64,12 @@ CLP_FFI_GO_METHOD int ir_deserializer_new_deserializer_with_preamble( * @return ffi::ir_stream::IRErrorCode forwarded from * ffi::ir_stream::eight_byte_encoding::decode_next_message */ -CLP_FFI_GO_METHOD int ir_deserializer_deserialize_eight_byte_log_event( - ByteSpan ir_view, - void* ir_deserializer, - size_t* ir_pos, - LogEventView* log_event -); +/* CLP_FFI_GO_METHOD int ir_deserializer_deserialize_eight_byte_log_event( */ +/* ByteSpan ir_view, */ +/* void* ir_deserializer, */ +/* size_t* ir_pos, */ +/* LogEventView* log_event */ +/* ); */ /** * Given a CLP IR buffer with four byte encoding, deserialize the next log @@ -81,76 +84,18 @@ CLP_FFI_GO_METHOD int ir_deserializer_deserialize_eight_byte_log_event( * @return ffi::ir_stream::IRErrorCode forwarded from * ffi::ir_stream::four_byte_encoding::decode_next_message */ -CLP_FFI_GO_METHOD int ir_deserializer_deserialize_four_byte_log_event( - ByteSpan ir_view, - void* ir_deserializer, - size_t* ir_pos, - LogEventView* log_event -); - -/** - * Given a CLP IR buffer with eight byte encoding, deserialize the next log - * event until finding an event that is both within the time interval and - * matches any query. If queries is empty, the first log event within the time - * interval is treated as a match. Returns the components of the found log event - * and the buffer position it ends at. All pointer parameters must be non-null - * (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] ir_view Byte buffer/slice containing CLP IR - * @param[in] ir_deserializer ir::Deserializer to be used as storage for a found - * log event - * @param[in] time_interval Timestamp interval: [lower, upper) - * @param[in] merged_query A concatenation of all queries to filter for; if - * empty any log event as a match - * @param[out] ir_pos Position in ir_view read to - * @param[out] log_event Log event stored in ir_deserializer - * @param[out] matching_query Index into queries of the first matching query or - * 0 if queries is empty - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::four_byte_encoding::decode_next_message - * @return ffi::ir_stream::IRErrorCode_Unsupported_Version + 1 if no query is - * found before time_interval.m_upper (TODO this should be replaced/fix in - * clp core) - */ -CLP_FFI_GO_METHOD int ir_deserializer_deserialize_eight_byte_wildcard_match( - ByteSpan ir_view, - void* ir_deserializer, - TimestampInterval time_interval, - MergedWildcardQueryView merged_query, - size_t* ir_pos, - LogEventView* log_event, - size_t* matching_query -); +/* CLP_FFI_GO_METHOD int ir_deserializer_deserialize_four_byte_log_event( */ +/* ByteSpan ir_view, */ +/* void* ir_deserializer, */ +/* size_t* ir_pos, */ +/* LogEventView* log_event */ +/* ); */ -/** - * Given a CLP IR buffer with four byte encoding, deserialize the next log event - * until finding an event that is both within the time interval and matches any - * query. If queries is empty, the first log event within the time interval is - * treated as a match. Returns the components of the found log event and the - * buffer position it ends at. All pointer parameters must be non-null (non-nil - * Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] ir_view Byte buffer/slice containing CLP IR - * @param[in] ir_deserializer ir::Deserializer to be used as storage for a found - * log event - * @param[in] time_interval Timestamp interval: [lower, upper) - * @param[in] merged_query A concatenation of all queries to filter for; if - * empty any log event as a match - * @param[out] ir_pos Position in ir_view read to - * @param[out] log_event Log event stored in ir_deserializer - * @param[out] matching_query Index into queries of the matching query - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::four_byte_encoding::decode_next_message - * @return ffi::ir_stream::IRErrorCode_Unsupported_Version + 1 if no query is - * found before time_interval.m_upper (TODO this should be replaced/fix in - * clp core) - */ -CLP_FFI_GO_METHOD int ir_deserializer_deserialize_four_byte_wildcard_match( +CLP_FFI_GO_METHOD int ir_deserializer_deserialize_log_event( ByteSpan ir_view, void* ir_deserializer, - TimestampInterval time_interval, - MergedWildcardQueryView merged_query, size_t* ir_pos, - LogEventView* log_event, - size_t* matching_query + ByteSpan* msgpack_log_event_view ); // NOLINTEND(modernize-use-trailing-return-type) diff --git a/include/ffi_go/ir/encoder.h b/include/ffi_go/ir/encoder.h deleted file mode 100644 index 174f8b8..0000000 --- a/include/ffi_go/ir/encoder.h +++ /dev/null @@ -1,91 +0,0 @@ -#ifndef FFI_GO_IR_ENCODER_H -#define FFI_GO_IR_ENCODER_H -// header must support C, making modernize checks inapplicable -// NOLINTBEGIN(modernize-use-trailing-return-type) - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" - -/** - * Create a ir::Encoder used as the underlying data storage for a Go ir.Encoder. - * @return New ir::Encoder's address - */ -CLP_FFI_GO_METHOD void* ir_encoder_eight_byte_new(); - -/** - * @copydoc ir_encoder_eight_byte_new() - */ -CLP_FFI_GO_METHOD void* ir_encoder_four_byte_new(); - -/** - * Clean up the underlying ir::Encoder of a Go ir.Encoder. - * @param[in] ir_encoder Address of a ir::Encoder created and returned by - * ir_encoder_eight_byte_new - */ -CLP_FFI_GO_METHOD void ir_encoder_eight_byte_close(void* ir_encoder); - -/** - * Clean up the underlying ir::Encoder of a Go ir.Encoder. - * @param[in] ir_encoder Address of a ir::Encoder created and returned by - * ir_encoder_four_byte_new - */ -CLP_FFI_GO_METHOD void ir_encoder_four_byte_close(void* ir_encoder); - -/** - * Given a log message, encode it into a CLP IR object with eight byte encoding. - * An ir::Encoder must be provided to use as the backing storage for the - * corresponding Go ir.Encoder. All pointer parameters must be non-null (non-nil - * Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] log_message Log message to encode - * @param[in] ir_encoder ir::Encoder to be used as storage for the encoded log - * message - * @param[out] logtype Type of the log message (the log message with variables - * extracted and replaced with placeholders) - * @param[out] vars Array of encoded variables - * @param[out] dict_vars String containing all dictionary variables concatenated - * together - * @param[out] dict_var_end_offsets Array of offsets into dict_vars marking the - * end of a dictionary variable - * @return ffi::ir_stream::IRErrorCode_Corrupted_IR if ffi::encode_message - * returns false - * @return ffi::ir_stream::IRErrorCode_Success on success - */ -CLP_FFI_GO_METHOD int ir_encoder_encode_eight_byte_log_message( - StringView log_message, - void* ir_encoder, - StringView* logtype, - Int64tSpan* vars, - StringView* dict_vars, - Int32tSpan* dict_var_end_offsets -); - -/** - * Given a log message, encode it into a CLP IR object with four byte encoding. - * An ir::Encoder must be provided to use as the backing storage for the - * corresponding Go ir.Encoder. All pointer parameters must be non-null (non-nil - * Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] log_message Log message to encode - * @param[in] ir_encoder ir::Encoder to be used as storage for the encoded log - * message - * @param[out] logtype Type of the log message (the log message with variables - * extracted and replaced with placeholders) - * @param[out] vars Array of encoded variables - * @param[out] dict_vars String containing all dictionary variables concatenated - * together - * @param[out] dict_var_end_offsets Array of offsets into dict_vars marking the - * end of a dictionary variable - * @return ffi::ir_stream::IRErrorCode_Corrupted_IR if ffi::encode_message - * returns false - * @return ffi::ir_stream::IRErrorCode_Success on success - */ -CLP_FFI_GO_METHOD int ir_encoder_encode_four_byte_log_message( - StringView log_message, - void* ir_encoder, - StringView* logtype, - Int32tSpan* vars, - StringView* dict_vars, - Int32tSpan* dict_var_end_offsets -); - -// NOLINTEND(modernize-use-trailing-return-type) -#endif // FFI_GO_IR_ENCODER_H diff --git a/include/ffi_go/ir/serializer.h b/include/ffi_go/ir/serializer.h index 377df1a..aa87a72 100644 --- a/include/ffi_go/ir/serializer.h +++ b/include/ffi_go/ir/serializer.h @@ -7,97 +7,74 @@ #include "ffi_go/defs.h" /** - * Clean up the underlying ir::Serializer of a Go ir.Serializer. - * @param[in] ir_serializer Address of a ir::Serializer created and returned by - * ir_serializer_serialize_*_preamble + * Clean up the underlying `clp::ffi::ir_stream::Serializer` of a Go `ir.Serializer`. + * @param[in] ir_serializer Address of a `clp::ffi::ir_stream::Serializer` created and returned by + * `ir_serializer_eight_byte_create` */ -CLP_FFI_GO_METHOD void ir_serializer_close(void* ir_serializer); +CLP_FFI_GO_METHOD void ir_serializer_eight_byte_close(void* ir_serializer); /** - * Given the fields of a CLP IR preamble, serialize them into an IR byte stream - * with eight byte encoding. An ir::Serializer will be allocated to use as the - * backing storage for a Go ir.Serializer (i.e. subsequent calls to - * ir_serializer_serialize_*_log_event). All pointer parameters must be non-null - * (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] ts_pattern Format string for the timestamp to be used when - * deserializing the IR - * @param[in] ts_pattern_syntax Type of the format string for understanding how - * to parse it - * @param[in] time_zone_id TZID timezone of the timestamps in the IR - * @param[out] ir_serializer_ptr Address of a new ir::Serializer - * @param[out] ir_view View of a IR buffer containing the serialized preamble - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::eight_byte_encoding::encode_preamble + * Clean up the underlying `clp::ffi::ir_stream::Serializer` of a Go `ir.Serializer`. + * @param[in] ir_serializer Address of a `clp::ffi::ir_stream::Serializer` created and returned by + * `ir_serializer_four_byte_create` */ -CLP_FFI_GO_METHOD int ir_serializer_new_eight_byte_serializer_with_preamble( - StringView ts_pattern, - StringView ts_pattern_syntax, - StringView time_zone_id, - void** ir_serializer_ptr, - ByteSpan* ir_view -); +CLP_FFI_GO_METHOD void ir_serializer_four_byte_close(void* ir_serializer); /** - * Given the fields of a CLP IR preamble, serialize them into an IR byte stream - * with four byte encoding. An ir::Serializer will be allocated to use as the - * backing storage for a Go ir.Serializer (i.e. subsequent calls to - * ir_serializer_serialize_*_log_event). All pointer parameters must be non-null - * (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] ts_pattern Format string for the timestamp to be used when - * deserializing the IR - * @param[in] ts_pattern_syntax Type of the format string for understanding how - * to parse it - * @param[in] time_zone_id TZID timezone of the timestamps in the IR - * @param[out] ir_serializer_ptr Address of a new ir::Serializer - * @param[out] ir_view View of a IR buffer containing the serialized preamble - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::four_byte_encoding::encode_preamble + * Create an eight byte `clp::ffi::ir_stream::Serializer` to use as the backing storage for a Go + * `ir.Serializer`. The serializer contains a preamble and is required for all subsequent calls to + * `ir_serializer_serialize_eight_byte_*`. + * @param[out] ir_serializer_ptr Address of a new `clp::ffi::ir_stream::Serializer` to store in Go. + * @param[out] ir_view View of a IR buffer containing the serialized preamble. + * @return 0 on success. + * @return `std::errc::protocol_error` value on null arguments. + * @return Forward's `clp::ffi::ir_stream::Serializer::create` return values. */ -CLP_FFI_GO_METHOD int ir_serializer_new_four_byte_serializer_with_preamble( - StringView ts_pattern, - StringView ts_pattern_syntax, - StringView time_zone_id, - epoch_time_ms_t reference_ts, - void** ir_serializer_ptr, - ByteSpan* ir_view -); +CLP_FFI_GO_METHOD int ir_serializer_eight_byte_create(void** ir_serializer_ptr, ByteSpan* ir_view); + +/** + * Create an four byte `clp::ffi::ir_stream::Serializer` to use as the backing storage for a Go + * `ir.Serializer`. The serializer contains a preamble and is required for all subsequent calls to + * `ir_serializer_serialize_four_byte_*`. + * @param[out] ir_serializer_ptr Address of a new `clp::ffi::ir_stream::Serializer` to store in Go. + * @param[out] ir_view View of a IR buffer containing the serialized preamble. + * @return 0 on success. + * @return `std::errc::protocol_error` value on null arguments. + * @return Forward's `clp::ffi::ir_stream::Serializer::create` return values. + */ +CLP_FFI_GO_METHOD int ir_serializer_four_byte_create(void** ir_serializer_ptr, ByteSpan* ir_view); /** - * Given the fields of a log event, serialize them into an IR byte stream with - * eight byte encoding. An ir::Serializer must be provided to use as the backing - * storage for the corresponding Go ir.Serializer. All pointer parameters must - * be non-null (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] log_message Log message of the log event to serialize - * @param[in] timestamp Timestamp of the log event to serialize - * @param[in] ir_serializer ir::Serializer object to be used as storage - * @param[out] ir_view View of a IR buffer containing the serialized log event - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::eight_byte_encoding::encode_message + * Given a log event encoded as a msgpack map, serialize it into an IR byte stream with eight byte + * encoding. A `clp::ffi::ir_stream::Serializer` must be provided to use as the backing storage for + * the corresponding Go `ir.Serializer`. + * @param[in] ir_serializer_ptr `clp::ffi::ir_stream::Serializer` object to be used. + * @param[in] msgpack_bytes log event encoded as a msgpack map. + * @param[out] ir_view View of a IR buffer containing the serialized log event. + * @return 0 on success. + * @return `std::errc::protocol_error` value on null arguments. + * @return Forward's `clp::ffi::ir_stream::Serializer::serialize_msgpack_map` return values. */ -CLP_FFI_GO_METHOD int ir_serializer_serialize_eight_byte_log_event( - StringView log_message, - epoch_time_ms_t timestamp, +CLP_FFI_GO_METHOD int ir_serializer_eight_byte_serialize_log_event( void* ir_serializer, + ByteSpan msgpack_bytes, ByteSpan* ir_view ); /** - * Given the fields of a log event, serialize them into an IR byte stream with - * four byte encoding. An ir::Serializer must be provided to use as the backing - * storage for the corresponding Go ir.Serializer. All pointer parameters must - * be non-null (non-nil Cgo C. pointer or unsafe.Pointer from Go). - * @param[in] log_message Log message to serialize - * @param[in] timestamp_delta Timestamp delta to the previous log event in the - * IR stream - * @param[in] ir_serializer ir::Serializer object to be used as storage - * @param[out] ir_view View of a IR buffer containing the serialized log event - * @return ffi::ir_stream::IRErrorCode forwarded from - * ffi::ir_stream::four_byte_encoding::encode_message + * Given a log event encoded as a msgpack map, serialize it into an IR byte stream with four byte + * encoding. A `clp::ffi::ir_stream::Serializer` must be provided to use as the backing storage for + * the corresponding Go `ir.Serializer`. + * @param[in] ir_serializer_ptr `clp::ffi::ir_stream::Serializer` object to be used. + * @param[in] msgpack_bytes log event encoded as a msgpack map. + * @param[out] ir_view View of a IR buffer containing the serialized log event. + * @return 0 on success. + * @return `std::errc::protocol_error` value on null arguments. + * @return Forward's `clp::ffi::ir_stream::Serializer::serialize_msgpack_map` return values. */ -CLP_FFI_GO_METHOD int ir_serializer_serialize_four_byte_log_event( - StringView log_message, - epoch_time_ms_t timestamp_delta, +CLP_FFI_GO_METHOD int ir_serializer_four_byte_serialize_log_event( void* ir_serializer, + ByteSpan msgpack_bytes, ByteSpan* ir_view ); diff --git a/include/ffi_go/search/wildcard_query.h b/include/ffi_go/search/wildcard_query.h deleted file mode 100644 index 62dbb23..0000000 --- a/include/ffi_go/search/wildcard_query.h +++ /dev/null @@ -1,71 +0,0 @@ -#ifndef FFI_GO_IR_WILDCARD_QUERY_H -#define FFI_GO_IR_WILDCARD_QUERY_H -// header must support C, making modernize checks inapplicable -// NOLINTBEGIN(modernize-use-trailing-return-type) -// NOLINTBEGIN(modernize-use-using) - -#ifndef __cplusplus - #include -#endif - -#include "ffi_go/api_decoration.h" -#include "ffi_go/defs.h" - -/** - * A timestamp interval of [m_lower, m_upper). - */ -typedef struct { - epoch_time_ms_t m_lower; - epoch_time_ms_t m_upper; -} TimestampInterval; - -/** - * A view of a wildcard query passed down from Go. The query string is assumed - * to have been cleaned using the CLP function `clean_up_wildcard_search_string` - * on construction. m_case_sensitive is 1 for a case sensitive query (0 for case - * insensitive). - */ -typedef struct { - StringView m_query; - bool m_case_sensitive; -} WildcardQueryView; - -/** - * A view of a Go search.MergedWildcardQuery passed down through Cgo. The - * string is a concatenation of all wildcard queries, while m_end_offsets stores - * the size of each query. - */ -typedef struct { - StringView m_queries; - SizetSpan m_end_offsets; - BoolSpan m_case_sensitivity; -} MergedWildcardQueryView; - -/** - * Given a query string, allocate and return a clean string that is safe for - * matching. See `clean_up_wildcard_search_string` in CLP for more details. - * @param[in] query Query string to clean - * @param[in] ptr Address of a new std::string - * @return New string holding cleaned query - */ -CLP_FFI_GO_METHOD StringView wildcard_query_new(StringView query, void** ptr); - -/** - * Delete a std::string holding a wildcard query. - * @param[in] str Address of a std::string created and returned by - * clean_wildcard_query - */ -CLP_FFI_GO_METHOD void wildcard_query_delete(void* str); - -/** - * Given a target string perform CLP wildcard matching using query. See - * `wildcard_match_unsafe` in CLP src/string_utils.hpp. - * @param[in] target String to perform matching on - * @param[in] query Query to use for matching - * @return 1 if query matches target, 0 otherwise - */ -CLP_FFI_GO_METHOD int wildcard_query_match(StringView target, WildcardQueryView query); - -// NOLINTEND(modernize-use-using) -// NOLINTEND(modernize-use-trailing-return-type) -#endif // FFI_GO_IR_WILDCARD_QUERY_H diff --git a/ir/BUILD.bazel b/ir/BUILD.bazel index 23a05ac..cac57ce 100644 --- a/ir/BUILD.bazel +++ b/ir/BUILD.bazel @@ -11,7 +11,8 @@ go_library( visibility = ["//visibility:public"], deps = [ "//ffi", - "//search", + "@com_github_klauspost_compress//zstd", + "@com_github_vmihailenco_msgpack_v5//:msgpack", ], ) diff --git a/ir/build_amd64.go b/ir/build_amd64.go index 269cf2d..685f3a0 100644 --- a/ir/build_amd64.go +++ b/ir/build_amd64.go @@ -4,7 +4,7 @@ package ir /* #cgo CPPFLAGS: -I${SRCDIR}/../include/ -#cgo linux LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_linux_amd64.a -lstdc++ -#cgo darwin LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_darwin_amd64.a -lstdc++ +#cgo linux LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_linux_amd64.a -lstdc++ -lm +#cgo darwin LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_darwin_amd64.a -lstdc++ -lm */ import "C" diff --git a/ir/build_arm64.go b/ir/build_arm64.go index da2a837..6dc4154 100644 --- a/ir/build_arm64.go +++ b/ir/build_arm64.go @@ -4,7 +4,7 @@ package ir /* #cgo CPPFLAGS: -I${SRCDIR}/../include/ -#cgo linux LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_linux_arm64.a -lstdc++ -#cgo darwin LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_darwin_arm64.a -lstdc++ +#cgo linux LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_linux_arm64.a -lstdc++ -lm +#cgo darwin LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_darwin_arm64.a -lstdc++ -lm */ import "C" diff --git a/ir/cgo_defs.go b/ir/cgo_defs.go index 8ed33fc..1153462 100644 --- a/ir/cgo_defs.go +++ b/ir/cgo_defs.go @@ -2,14 +2,11 @@ package ir /* #include -#include */ import "C" import ( "unsafe" - - "github.com/y-scope/clp-ffi-go/search" ) // The follow functions are helpers to cleanup Cgo related code. The underlying @@ -47,20 +44,6 @@ func newCStringView(s string) C.StringView { } } -func newMergedWildcardQueryView(mergedQuery search.MergedWildcardQuery) C.MergedWildcardQueryView { - return C.MergedWildcardQueryView{ - newCStringView(mergedQuery.Queries()), - C.SizetSpan{ - (*C.size_t)(unsafe.Pointer(unsafe.SliceData(mergedQuery.EndOffsets()))), - C.size_t(len(mergedQuery.EndOffsets())), - }, - C.BoolSpan{ - (*C.bool)(unsafe.Pointer(unsafe.SliceData(mergedQuery.CaseSensitivity()))), - C.size_t(len(mergedQuery.CaseSensitivity())), - }, - } -} - func newLogMessageView[Tgo EightByteEncoding | FourByteEncoding, Tc C.Int64tSpan | C.Int32tSpan]( logtype C.StringView, vars Tc, diff --git a/ir/decoder.go b/ir/decoder.go deleted file mode 100644 index 1ff6bd6..0000000 --- a/ir/decoder.go +++ /dev/null @@ -1,94 +0,0 @@ -package ir - -/* -#include -*/ -import "C" - -import ( - "unsafe" - - "github.com/y-scope/clp-ffi-go/ffi" -) - -// A Decoder takes objects encoded in CLP IR as input and returns them in their -// natural state prior to encoding. Close must be called to free the underlying -// memory and failure to do so will result in a memory leak. -type Decoder[T EightByteEncoding | FourByteEncoding] interface { - DecodeLogMessage(irMessage LogMessage[T]) (*ffi.LogMessageView, error) - Close() error -} - -// Return a new Decoder for IR using [EightByteEncoding]. -func EightByteDecoder() (Decoder[EightByteEncoding], error) { - return &eightByteDecoder{commonDecoder{C.ir_decoder_new()}}, nil -} - -// Return a new Decoder for IR using [FourByteEncoding]. -func FourByteDecoder() (Decoder[FourByteEncoding], error) { - return &fourByteDecoder{commonDecoder{C.ir_decoder_new()}}, nil -} - -type commonDecoder struct { - cptr unsafe.Pointer -} - -// Close will delete the underlying C++ allocated memory used by the -// deserializer. Failure to call Close will result in a memory leak. -func (decoder *commonDecoder) Close() error { - if nil != decoder.cptr { - C.ir_decoder_close(decoder.cptr) - decoder.cptr = nil - } - return nil -} - -type eightByteDecoder struct { - commonDecoder -} - -// Decode an IR encoded log message, returning a view of the original -// (non-encoded) log message. -func (decoder *eightByteDecoder) DecodeLogMessage( - irMessage LogMessage[EightByteEncoding], -) (*ffi.LogMessageView, error) { - var msg C.StringView - err := IrError(C.ir_decoder_decode_eight_byte_log_message( - newCStringView(irMessage.Logtype), - newCInt64tSpan(irMessage.Vars), - newCStringView(irMessage.DictVars), - newCInt32tSpan(irMessage.DictVarEndOffsets), - decoder.cptr, - &msg, - )) - if Success != err { - return nil, DecodeError - } - view := unsafe.String((*byte)(unsafe.Pointer(msg.m_data)), msg.m_size) - return &view, nil -} - -type fourByteDecoder struct { - commonDecoder -} - -// Decode an IR encoded log message, returning a view of the original -// (non-encoded) log message. -func (decoder *fourByteDecoder) DecodeLogMessage( - irMessage LogMessage[FourByteEncoding], -) (*ffi.LogMessageView, error) { - var msg C.StringView - err := IrError(C.ir_decoder_decode_four_byte_log_message( - newCStringView(irMessage.Logtype), - newCInt32tSpan(irMessage.Vars), - newCStringView(irMessage.DictVars), - newCInt32tSpan(irMessage.DictVarEndOffsets), - decoder.cptr, - &msg, - )) - if Success != err { - return nil, DecodeError - } - view := unsafe.String((*byte)(unsafe.Pointer(msg.m_data)), msg.m_size) - return &view, nil -} diff --git a/ir/deserializer.go b/ir/deserializer.go index 1b8eee7..ed5a89b 100644 --- a/ir/deserializer.go +++ b/ir/deserializer.go @@ -3,24 +3,17 @@ package ir /* #include #include -#include */ import "C" import ( - "encoding/json" - "strconv" + "fmt" + "syscall" "unsafe" - "github.com/y-scope/clp-ffi-go/ffi" - "github.com/y-scope/clp-ffi-go/search" -) + "github.com/vmihailenco/msgpack/v5" -const ( - metadataReferenceTimestampKey = "REFERENCE_TIMESTAMP" - metadataTimestampPatternKey = "TIMESTAMP_PATTERN" - metadataTimestampPatternSyntaxKey = "TIMESTAMP_PATTERN_SYNTAX" - metadataTzIdKey = "TZ_ID" + "github.com/y-scope/clp-ffi-go/ffi" ) // A Deserializer exports functions to deserialize log events from a CLP IR byte @@ -31,15 +24,8 @@ const ( // is reused for each view, so to persist the contents the memory must be copied // into another object. Close must be called to free the underlying memory and // failure to do so will result in a memory leak. -type Deserializer interface { - DeserializeLogEvent(irBuf []byte) (*ffi.LogEventView, int, error) - DeserializeWildcardMatchWithTimeInterval( - irBuf []byte, - mergedQuery search.MergedWildcardQuery, - timeInterval search.TimestampInterval, - ) (*ffi.LogEventView, int, int, error) - TimestampInfo() TimestampInfo - Close() error +type Deserializer struct { + cptr unsafe.Pointer } // DeserializePreamble attempts to read an IR stream preamble from irBuf, @@ -51,7 +37,7 @@ type Deserializer interface { // - 0 position // - [IrError] error: CLP failed to successfully deserialize // - [encoding/json] error: unmarshalling the metadata failed -func DeserializePreamble(irBuf []byte) (Deserializer, int, error) { +func DeserializePreamble(irBuf []byte) (*Deserializer, int, error) { if 0 >= len(irBuf) { return nil, 0, IncompleteIr } @@ -60,78 +46,22 @@ func DeserializePreamble(irBuf []byte) (Deserializer, int, error) { // after updating the clp version. var pos C.size_t - var irEncoding C.int8_t - var metadataType C.int8_t - var metadataPos C.size_t - var metadataSize C.uint16_t var deserializerCptr unsafe.Pointer - var timestampCptr unsafe.Pointer - if err := IrError(C.ir_deserializer_new_deserializer_with_preamble( + if err := syscall.Errno(C.ir_deserializer_create( newCByteSpan(irBuf), &pos, - &irEncoding, - &metadataType, - &metadataPos, - &metadataSize, &deserializerCptr, - ×tampCptr, - )); Success != err { + )); FfiSuccess != err { + fmt.Printf("%v\n", err) return nil, int(pos), err } - if metadataType != 1 { - return nil, 0, UnsupportedVersion - } - - var metadata map[string]interface{} - if err := json.Unmarshal( - irBuf[metadataPos:metadataPos+C.size_t(metadataSize)], - &metadata, - ); nil != err { - return nil, 0, err - } - - var tsInfo TimestampInfo - if tsPat, ok := metadata[metadataTimestampPatternKey].(string); ok { - tsInfo.Pattern = tsPat - } - if tsSyn, ok := metadata[metadataTimestampPatternSyntaxKey].(string); ok { - tsInfo.PatternSyntax = tsSyn - } - if tzid, ok := metadata[metadataTzIdKey].(string); ok { - tsInfo.TimeZoneId = tzid - } - - var deserializer Deserializer - if irEncoding == 1 { - var refTs ffi.EpochTimeMs = 0 - if tsStr, ok := metadata[metadataReferenceTimestampKey].(string); ok { - if tsInt, err := strconv.ParseInt(tsStr, 10, 64); nil == err { - refTs = ffi.EpochTimeMs(tsInt) - *(*ffi.EpochTimeMs)(timestampCptr) = refTs - } - } - deserializer = &fourByteDeserializer{commonDeserializer{tsInfo, deserializerCptr}, refTs} - } else { - deserializer = &eightByteDeserializer{commonDeserializer{tsInfo, deserializerCptr}} - } - - return deserializer, int(pos), nil -} - -// commonDeserializer contains fields common to all types of CLP IR encoding. -// TimestampInfo stores information common to all timestamps found in the IR. -// cptr holds a reference to the underlying C++ objected used as backing storage -// for the Views returned by the deserializer. Close must be called to free this -// underlying memory and failure to do so will result in a memory leak. -type commonDeserializer struct { - tsInfo TimestampInfo - cptr unsafe.Pointer + return &Deserializer{deserializerCptr}, int(pos), nil } // Close will delete the underlying C++ allocated memory used by the // deserializer. Failure to call Close will result in a memory leak. -func (deserializer *commonDeserializer) Close() error { +func (deserializer *Deserializer) Close() error { if nil != deserializer.cptr { C.ir_deserializer_close(deserializer.cptr) deserializer.cptr = nil @@ -139,55 +69,6 @@ func (deserializer *commonDeserializer) Close() error { return nil } -// Returns the TimestampInfo used by the Deserializer. -func (deserializer commonDeserializer) TimestampInfo() TimestampInfo { - return deserializer.tsInfo -} - -type eightByteDeserializer struct { - commonDeserializer -} - -// DeserializeLogEvent attempts to read the next log event from the IR stream in -// irBuf, returning the deserialized [ffi.LogEventView], the position read to in -// irBuf (the end of the log event in irBuf), and an error. On error returns: -// - nil *ffi.LogEventView -// - 0 position -// - [IrError] error: CLP failed to successfully deserialize -// - [EndOfIr] error: CLP found the IR stream EOF tag -func (deserializer *eightByteDeserializer) DeserializeLogEvent( - irBuf []byte, -) (*ffi.LogEventView, int, error) { - return deserializeLogEvent(deserializer, irBuf) -} - -// DeserializeWildcardMatchWithTimeInterval attempts to read the next log event -// from the IR stream in irBuf that matches mergedQuery within timeInterval. It -// returns the deserialized [ffi.LogEventView], the position read to in irBuf -// (the end of the log event in irBuf), the index of the matched query in -// mergedQuery, and an error. On error returns: -// - nil *ffi.LogEventView -// - 0 position -// - -1 index -// - [IrError] error: CLP failed to successfully deserialize -// - [EndOfIr] error: CLP found the IR stream EOF tag -func (deserializer *eightByteDeserializer) DeserializeWildcardMatchWithTimeInterval( - irBuf []byte, - mergedQuery search.MergedWildcardQuery, - timeInterval search.TimestampInterval, -) (*ffi.LogEventView, int, int, error) { - return deserializeWildcardMatch(deserializer, irBuf, mergedQuery, timeInterval) -} - -// fourByteDeserializer contains both a common CLP IR deserializer and stores -// the previously seen log event's timestamp. The previous timestamp is -// necessary to calculate the current timestamp as four byte encoding only -// encodes the timestamp delta between the current log event and the previous. -type fourByteDeserializer struct { - commonDeserializer - prevTimestamp ffi.EpochTimeMs -} - // DeserializeLogEvent attempts to read the next log event from the IR stream in // irBuf, returning the deserialized [ffi.LogEventView], the position read to in // irBuf (the end of the log event in irBuf), and an error. On error returns: @@ -195,120 +76,40 @@ type fourByteDeserializer struct { // - 0 position // - [IrError] error: CLP failed to successfully deserialize // - [EndOfIr] error: CLP found the IR stream EOF tag -func (deserializer *fourByteDeserializer) DeserializeLogEvent( +func (deserializer *Deserializer) DeserializeLogEvent( irBuf []byte, -) (*ffi.LogEventView, int, error) { +) (ffi.LogEvent, int, error) { return deserializeLogEvent(deserializer, irBuf) } -// DeserializeWildcardMatchWithTimeInterval attempts to read the next log event -// from the IR stream in irBuf that matches mergedQuery within timeInterval. It -// returns the deserialized [ffi.LogEventView], the position read to in irBuf -// (the end of the log event in irBuf), the index of the matched query in -// mergedQuery, and an error. On error returns: -// - nil *ffi.LogEventView -// - 0 position -// - -1 index -// - [IrError] error: CLP failed to successfully deserialize -// - [EndOfIr] error: CLP found the IR stream EOF tag -func (deserializer *fourByteDeserializer) DeserializeWildcardMatchWithTimeInterval( - irBuf []byte, - mergedQuery search.MergedWildcardQuery, - timeInterval search.TimestampInterval, -) (*ffi.LogEventView, int, int, error) { - return deserializeWildcardMatch(deserializer, irBuf, mergedQuery, timeInterval) -} - func deserializeLogEvent( - deserializer Deserializer, + deserializer *Deserializer, irBuf []byte, -) (*ffi.LogEventView, int, error) { +) (ffi.LogEvent, int, error) { if 0 >= len(irBuf) { return nil, 0, IncompleteIr } - var pos C.size_t - var event C.LogEventView - var err error - switch irs := deserializer.(type) { - case *eightByteDeserializer: - err = IrError(C.ir_deserializer_deserialize_eight_byte_log_event( - newCByteSpan(irBuf), - irs.cptr, - &pos, - &event, - )) - case *fourByteDeserializer: - err = IrError(C.ir_deserializer_deserialize_four_byte_log_event( - newCByteSpan(irBuf), - irs.cptr, - &pos, - &event, - )) - } + var pos C.size_t = 0 + var msgpackLogEvent C.ByteSpan + var err error = IrError(C.ir_deserializer_deserialize_log_event( + newCByteSpan(irBuf), + deserializer.cptr, + &pos, + &msgpackLogEvent, + )) if Success != err { - return nil, 0, err - } - - return &ffi.LogEventView{ - LogMessageView: unsafe.String( - (*byte)((unsafe.Pointer)(event.m_log_message.m_data)), - event.m_log_message.m_size, - ), - Timestamp: ffi.EpochTimeMs(event.m_timestamp), - }, - int(pos), - nil -} - -func deserializeWildcardMatch( - deserializer Deserializer, - irBuf []byte, - mergedQuery search.MergedWildcardQuery, - time search.TimestampInterval, -) (*ffi.LogEventView, int, int, error) { - if 0 >= len(irBuf) { - return nil, 0, -1, IncompleteIr + fmt.Println(err) + return nil, int(pos), err } - var pos C.size_t - var event C.LogEventView - var match C.size_t - var err error - switch irs := deserializer.(type) { - case *eightByteDeserializer: - err = IrError(C.ir_deserializer_deserialize_eight_byte_wildcard_match( - newCByteSpan(irBuf), - irs.cptr, - C.TimestampInterval{C.int64_t(time.Lower), C.int64_t(time.Upper)}, - newMergedWildcardQueryView(mergedQuery), - &pos, - &event, - &match, - )) - case *fourByteDeserializer: - err = IrError(C.ir_deserializer_deserialize_four_byte_wildcard_match( - newCByteSpan(irBuf), - irs.cptr, - C.TimestampInterval{C.int64_t(time.Lower), C.int64_t(time.Upper)}, - newMergedWildcardQueryView(mergedQuery), - &pos, - &event, - &match, - )) - } - if Success != err { - return nil, 0, -1, err + var event ffi.LogEvent + err = msgpack.Unmarshal( + []byte(unsafe.Slice((*byte)(msgpackLogEvent.m_data), msgpackLogEvent.m_size)), + &event, + ) + if nil != err { + return nil, int(pos), err } - - return &ffi.LogEventView{ - LogMessageView: unsafe.String( - (*byte)((unsafe.Pointer)(event.m_log_message.m_data)), - event.m_log_message.m_size, - ), - Timestamp: ffi.EpochTimeMs(event.m_timestamp), - }, - int(pos), - int(match), - nil + return event, int(pos), nil } diff --git a/ir/encoder.go b/ir/encoder.go deleted file mode 100644 index 7e41f24..0000000 --- a/ir/encoder.go +++ /dev/null @@ -1,102 +0,0 @@ -package ir - -/* -#include -*/ -import "C" - -import ( - "unsafe" - - "github.com/y-scope/clp-ffi-go/ffi" -) - -// An Encoder takes logging objects (commonly used/created by logging libraries) -// and encodes them as CLP IR. Close must be called to free the underlying -// memory and failure to do so will result in a memory leak. -type Encoder[T EightByteEncoding | FourByteEncoding] interface { - EncodeLogMessage(logMessage ffi.LogMessage) (*LogMessageView[T], error) - Close() error -} - -// Return a new Encoder that produces IR using [EightByteEncoding]. -func EightByteEncoder() (Encoder[EightByteEncoding], error) { - return &eightByteEncoder{C.ir_encoder_eight_byte_new()}, nil -} - -// Return a new Encoder that produces IR using [FourByteEncoding]. -func FourByteEncoder() (Encoder[FourByteEncoding], error) { - return &fourByteEncoder{C.ir_encoder_four_byte_new()}, nil -} - -type eightByteEncoder struct { - cptr unsafe.Pointer -} - -// Close will delete the underlying C++ allocated memory used by the -// deserializer. Failure to call Close will result in a memory leak. -func (encoder *eightByteEncoder) Close() error { - if nil != encoder.cptr { - C.ir_encoder_eight_byte_close(encoder.cptr) - encoder.cptr = nil - } - return nil -} - -// Encode a log message into CLP IR, returning a view of the encoded message. -func (encoder *eightByteEncoder) EncodeLogMessage( - logMessage ffi.LogMessage, -) (*LogMessageView[EightByteEncoding], error) { - var logtype C.StringView - var vars C.Int64tSpan - var dictVars C.StringView - var dictVarEndOffsets C.Int32tSpan - err := IrError(C.ir_encoder_encode_eight_byte_log_message( - newCStringView(logMessage), - encoder.cptr, - &logtype, - &vars, - &dictVars, - &dictVarEndOffsets, - )) - if Success != err { - return nil, EncodeError - } - return newLogMessageView[EightByteEncoding](logtype, vars, dictVars, dictVarEndOffsets), nil -} - -type fourByteEncoder struct { - cptr unsafe.Pointer -} - -// Close will delete the underlying C++ allocated memory used by the -// deserializer. Failure to call Close will result in a memory leak. -func (encoder *fourByteEncoder) Close() error { - if nil != encoder.cptr { - C.ir_encoder_four_byte_close(encoder.cptr) - encoder.cptr = nil - } - return nil -} - -// Encode a log message into CLP IR, returning a view of the encoded message. -func (encoder *fourByteEncoder) EncodeLogMessage( - logMessage ffi.LogMessage, -) (*LogMessageView[FourByteEncoding], error) { - var logtype C.StringView - var vars C.Int32tSpan - var dictVars C.StringView - var dictVarEndOffsets C.Int32tSpan - err := IrError(C.ir_encoder_encode_four_byte_log_message( - newCStringView(logMessage), - encoder.cptr, - &logtype, - &vars, - &dictVars, - &dictVarEndOffsets, - )) - if Success != err { - return nil, EncodeError - } - return newLogMessageView[FourByteEncoding](logtype, vars, dictVars, dictVarEndOffsets), nil -} diff --git a/ir/ir.go b/ir/ir.go index edd31dd..b55aec8 100644 --- a/ir/ir.go +++ b/ir/ir.go @@ -21,14 +21,6 @@ type ( FourByteEncoding = int32 ) -// TimestampInfo contains general information applying to all timestamps in -// contiguous IR. This information comes from the metadata in the IR preamble. -type TimestampInfo struct { - Pattern string - PatternSyntax string - TimeZoneId string -} - // ir.BufView represents a slice of CLP IR, utilizing memory allocated by C++ // instead of the Go heap. A BufView, denoted as x, is valid upon being returned // and maintains its validity until the same object (e.g., an [ir.Serializer]) @@ -51,3 +43,5 @@ type LogMessage[T EightByteEncoding | FourByteEncoding] struct { type LogMessageView[T EightByteEncoding | FourByteEncoding] struct { LogMessage[T] } + +const FfiSuccess = 0 diff --git a/ir/reader_test.go b/ir/ir_file_test.go similarity index 54% rename from ir/reader_test.go rename to ir/ir_file_test.go index 94f6ee7..f1e78ce 100644 --- a/ir/reader_test.go +++ b/ir/ir_file_test.go @@ -1,18 +1,16 @@ package ir import ( - "math" "os" + "strings" "testing" - "time" "github.com/klauspost/compress/zstd" "github.com/y-scope/clp-ffi-go/ffi" - "github.com/y-scope/clp-ffi-go/search" ) -func TestIrReader(t *testing.T) { +func TestIrReaderOnFile(t *testing.T) { var fpath string = os.Getenv("go_test_ir") if fpath == "" { t.Skip("Set an input ir stream using the env variable: go_test_ir") @@ -33,24 +31,16 @@ func TestIrReader(t *testing.T) { } defer irr.Close() - interval := search.TimestampInterval{Lower: 0, Upper: math.MaxInt64} - queries := []search.WildcardQuery{ - search.NewWildcardQuery("*ERROR*", true), - search.NewWildcardQuery("*WARN*", true), - } for { - var log *ffi.LogEventView - // log, err = irr.Read() - // log, err = irr.ReadToContains("ERROR") - // var _ search.WildcardQuery - log, _, err = irr.ReadToWildcardMatchWithTimeInterval( - queries, - interval, - ) + var event ffi.LogEvent + // event, err = irr.Read() + event, err = irr.ReadToFunc(func(event ffi.LogEvent) bool { + return strings.Contains(event["message"].(string), "ERROR") + }) if nil != err { break } - t.Logf("msg: %v | %v", time.UnixMilli(int64(log.Timestamp)), log.LogMessageView) + t.Logf("msg: %v", event["message"]) } if EndOfIr != err { t.Fatalf("Reader.Read failed: %v", err) diff --git a/ir/ir_test.go b/ir/ir_test.go index 948f534..29ddd79 100644 --- a/ir/ir_test.go +++ b/ir/ir_test.go @@ -14,12 +14,6 @@ import ( "github.com/y-scope/clp-ffi-go/ffi" ) -const ( - defaultTimestampPattern string = "yyyy-MM-dd HH:mm:ss,SSS" - defaultTimestampPatternSyntax string = "java::SimpleDateFormat" - defaultTimeZoneId string = "America/Toronto" -) - type testArg int const ( @@ -43,13 +37,13 @@ type testArgs struct { filePath string } -type preambleFields struct { - TimestampInfo - prevTimestamp ffi.EpochTimeMs +var testKeys = []string{ + "LogMessage", + "Timestamp", } func TestLogMessagesCombo(t *testing.T) { - messages := []ffi.LogMessage{ + messages := []string{ "static text dict=var notint123 -1.234 4321.", "static123 text321 dict=var0123 321.1234 -3210.", } @@ -57,7 +51,7 @@ func TestLogMessagesCombo(t *testing.T) { } func TestLogMessagesDict(t *testing.T) { - messages := []ffi.LogMessage{ + messages := []string{ "textint1234 textequal=variable", fmt.Sprintf("test=bigint %v", math.MaxInt32+1), } @@ -65,7 +59,7 @@ func TestLogMessagesDict(t *testing.T) { } func TestLogMessagesFloat(t *testing.T) { - messages := []ffi.LogMessage{ + messages := []string{ "float 1.0 1.2 1.23 1.234", "-float -1.0 -1.2 -1.23 -1.234", } @@ -73,7 +67,7 @@ func TestLogMessagesFloat(t *testing.T) { } func TestLogMessagesInt(t *testing.T) { - messages := []ffi.LogMessage{ + messages := []string{ "int 1 12 123 1234", "-int -1 -12 -123 -1234", } @@ -81,7 +75,7 @@ func TestLogMessagesInt(t *testing.T) { } func TestLogMessagesStatic(t *testing.T) { - messages := []ffi.LogMessage{ + messages := []string{ "static text log zero.", "static text log one.", } @@ -90,7 +84,7 @@ func TestLogMessagesStatic(t *testing.T) { func TestLogMessagesLongLogs(t *testing.T) { const eightMB int = 8 * 1024 * 1024 - messages := []ffi.LogMessage{ + messages := []string{ strings.Repeat("x", eightMB), strings.Repeat("x", eightMB-1), } @@ -102,7 +96,7 @@ func assertEndOfIr( reader io.Reader, irReader *Reader, ) { - _, err := irReader.Read() + _, err := irReader.ReadLogEvent() if EndOfIr != err { t.Fatalf("assertEndOfIr failed got: %v", err) } @@ -112,19 +106,24 @@ func assertIrLogEvent( t *testing.T, reader io.Reader, irReader *Reader, - event ffi.LogEvent, + refEvent ffi.LogEvent, ) { - log, err := irReader.Read() + event, err := irReader.ReadLogEvent() if nil != err { - t.Fatalf("Reader.Read failed: %v", err) - } - if event.Timestamp != log.Timestamp { - t.Fatalf("Reader.Read wrong timestamp: '%v' != '%v'", log.Timestamp, event.Timestamp) - } - if event.LogMessage != log.LogMessageView { - t.Fatalf("Reader.Read wrong message: '%v' != '%v'", log.LogMessageView, event.LogMessage) + t.Fatalf("Reader.ReadLogEvent failed: %v", err) + } + for _, key := range testKeys { + if refEvent[key] != event[key] { + t.Fatalf("Reader.ReadLogEvent wrong %v, wanted: '%v' (%T) got: '%v' (%T)", + key, + refEvent[key], + refEvent[key], + event[key], + event[key], + ) + } } - t.Logf("'%v' : '%.128v'\n", log.Timestamp, log.LogMessageView) + t.Logf("'%v'\n", event) } func generateTestArgs(t *testing.T, prefix string) []testArgs { @@ -144,7 +143,7 @@ func generateTestArgs(t *testing.T, prefix string) []testArgs { return tests } -func testLogMessages(t *testing.T, messages []ffi.LogMessage) { +func testLogMessages(t *testing.T, messages []string) { for _, args := range generateTestArgs(t, t.Name()+"-SerDer") { args := args // capture range variable for func literal t.Run( diff --git a/ir/reader.go b/ir/reader.go index 16921b3..1a3f877 100644 --- a/ir/reader.go +++ b/ir/reader.go @@ -2,11 +2,8 @@ package ir import ( "io" - "math" - "strings" "github.com/y-scope/clp-ffi-go/ffi" - "github.com/y-scope/clp-ffi-go/search" ) // Reader abstracts maintenance of a buffer containing a [Deserializer]. It @@ -17,13 +14,18 @@ import ( // log event in the IR). Close must be called to free the underlying memory and // failure to do so will result in a memory leak. type Reader struct { - Deserializer + *Deserializer ioReader io.Reader buf []byte start int end int } +// Returns [NewReaderSize] with a default buffer size of 1MB. +func NewReader(r io.Reader) (*Reader, error) { + return NewReaderSize(r, 1024*1024) +} + // NewReaderSize creates a new [Reader] and uses [DeserializePreamble] to read a // CLP IR preamble from the [io.Reader], r. size denotes the initial size to use // for the Reader's buffer that the io.Reader is read into. This buffer will @@ -52,11 +54,6 @@ func NewReaderSize(r io.Reader, size int) (*Reader, error) { return irr, nil } -// Returns [NewReaderSize] with a default buffer size of 1MB. -func NewReader(r io.Reader) (*Reader, error) { - return NewReaderSize(r, 1024*1024) -} - // Close will delete the underlying C++ allocated memory used by the // deserializer. Failure to call Close will result in a memory leak. func (reader *Reader) Close() error { @@ -65,14 +62,15 @@ func (reader *Reader) Close() error { // Read uses [Deserializer].DeserializeLogEvent to read from the CLP IR byte stream. The // underlying buffer will grow if it is too small to contain the next log event. On error returns: -// - nil [*ffi.LogEventView] +// - nil [ffi.LogEvent] // - error propagated from [Deserializer].DeserializeLogEvent or [io.Reader.Read] -func (reader *Reader) Read() (*ffi.LogEventView, error) { - var event *ffi.LogEventView +func (reader *Reader) ReadLogEvent() (ffi.LogEvent, error) { + var event ffi.LogEvent var pos int var err error for { event, pos, err = reader.DeserializeLogEvent(reader.buf[reader.start:reader.end]) + reader.start += pos if IncompleteIr != err { break } @@ -83,66 +81,16 @@ func (reader *Reader) Read() (*ffi.LogEventView, error) { if nil != err { return nil, err } - reader.start += pos return event, nil } -// ReadToWildcardMatch wraps ReadToWildcardMatchWithTimeInterval, attempting to -// read the next log event that matches any query in queries, within the entire -// IR. It forwards the result of ReadToWildcardMatchWithTimeInterval. -func (reader *Reader) ReadToWildcardMatch( - queries []search.WildcardQuery, -) (*ffi.LogEventView, int, error) { - return reader.ReadToWildcardMatchWithTimeInterval( - queries, - search.TimestampInterval{Lower: 0, Upper: math.MaxInt64}, - ) -} - -// ReadToWildcardMatchWithTimeInterval attempts to read the next log event that -// matches any query in queries, within timeInterval. It returns the -// deserialized [ffi.LogEventView], the index of the matched query in queries, -// and an error. On error returns: -// - nil *ffi.LogEventView -// - -1 index -// - [IrError] error: CLP failed to successfully deserialize -// - [EndOfIr] error: CLP found the IR stream EOF tag -func (reader *Reader) ReadToWildcardMatchWithTimeInterval( - queries []search.WildcardQuery, - timeInterval search.TimestampInterval, -) (*ffi.LogEventView, int, error) { - var event *ffi.LogEventView - var pos int - var matchingQuery int - var err error - mergedQuery := search.MergeWildcardQueries(queries) - for { - event, pos, matchingQuery, err = reader.DeserializeWildcardMatchWithTimeInterval( - reader.buf[reader.start:reader.end], - mergedQuery, - timeInterval, - ) - if IncompleteIr != err { - break - } - if _, err = reader.fillBuf(); nil != err { - break - } - } - if nil != err { - return nil, -1, err - } - reader.start += pos - return event, matchingQuery, nil -} - -// Read the CLP IR byte stream until f returns true for a [ffi.LogEventView]. +// Read the CLP IR byte stream until f returns true for a [ffi.LogEvent]. // The successful LogEvent is returned. Errors are propagated from [Reader.Read]. func (reader *Reader) ReadToFunc( - f func(*ffi.LogEventView) bool, -) (*ffi.LogEventView, error) { + f func(ffi.LogEvent) bool, +) (ffi.LogEvent, error) { for { - event, err := reader.Read() + event, err := reader.ReadLogEvent() if nil != err { return event, err } @@ -152,44 +100,6 @@ func (reader *Reader) ReadToFunc( } } -// Read the CLP IR stream until a [ffi.LogEventView] is greater than or equal to -// the given timestamp. Errors are propagated from [Reader.ReadToFunc]. -func (reader *Reader) ReadToEpochTime( - time ffi.EpochTimeMs, -) (*ffi.LogEventView, error) { - return reader.ReadToFunc(func(event *ffi.LogEventView) bool { return event.Timestamp >= time }) -} - -// Read the CLP IR stream until [strings/Contains] returns true for a -// [ffi.LogEventView] and the given sub string. Errors are propagated from -// [Reader.ReadToFunc]. -func (reader *Reader) ReadToContains(substr string) (*ffi.LogEventView, error) { - fn := func(event *ffi.LogEventView) bool { - return strings.Contains(event.LogMessageView, substr) - } - return reader.ReadToFunc(fn) -} - -// Read the CLP IR stream until [strings/HasPrefix] returns true for a -// [ffi.LogEventView] and the given prefix. Errors are propagated from -// [Reader.ReadToFunc]. -func (reader *Reader) ReadToPrefix(prefix string) (*ffi.LogEventView, error) { - fn := func(event *ffi.LogEventView) bool { - return strings.HasPrefix(event.LogMessageView, prefix) - } - return reader.ReadToFunc(fn) -} - -// Read the CLP IR stream until [strings/HasSuffix] returns true for a -// [ffi.LogEventView] and the given suffix. Errors are propagated from -// [Reader.ReadToFunc]. -func (reader *Reader) ReadToSuffix(suffix string) (*ffi.LogEventView, error) { - fn := func(event *ffi.LogEventView) bool { - return strings.HasSuffix(event.LogMessageView, suffix) - } - return reader.ReadToFunc(fn) -} - // fillBuf shifts the remaining valid IR in [Reader.buf] to the front and then // calls [io.Reader.Read] to fill the remainder with more IR. Before reading into // the buffer, it is doubled if more than half of it is unconsumed IR. diff --git a/ir/serder_test.go b/ir/serder_test.go index facd335..b9dcda1 100644 --- a/ir/serder_test.go +++ b/ir/serder_test.go @@ -9,45 +9,36 @@ import ( ) func TestPreamble(t *testing.T) { - preamble := preambleFields{ - TimestampInfo{defaultTimestampPattern, defaultTimestampPatternSyntax, defaultTimeZoneId}, - ffi.EpochTimeMs(time.Now().UnixMilli()), - } for _, args := range generateTestArgs(t, t.Name()) { args := args // capture range variable for func literal - t.Run(args.name, func(t *testing.T) { t.Parallel(); testPreamble(t, args, preamble) }) + t.Run(args.name, func(t *testing.T) { t.Parallel(); testPreamble(t, args) }) } } -func testPreamble(t *testing.T, args testArgs, preamble preambleFields) { +func testPreamble(t *testing.T, args testArgs) { writer := openIoWriter(t, args) - irSerializer := serializeIrPreamble(t, args, preamble, writer) + irSerializer := serializeIrPreamble(t, args, writer) writer.Close() irSerializer.Close() reader := openIoReader(t, args) - assertIrPreamble(t, args, reader, preamble) + assertIrPreamble(t, args, reader) } func testSerDerLogMessages( t *testing.T, args testArgs, - logMessages []ffi.LogMessage, + logMessages []string, ) { ioWriter := openIoWriter(t, args) - - preamble := preambleFields{ - TimestampInfo{defaultTimestampPattern, defaultTimestampPatternSyntax, defaultTimeZoneId}, - ffi.EpochTimeMs(time.Now().UnixMilli()), - } - irSerializer := serializeIrPreamble(t, args, preamble, ioWriter) + irSerializer := serializeIrPreamble(t, args, ioWriter) var events []ffi.LogEvent for _, msg := range logMessages { event := ffi.LogEvent{ - LogMessage: msg, - Timestamp: ffi.EpochTimeMs(time.Now().UnixMilli()), + "LogMessage": msg, + "Timestamp": uint64(time.Now().UnixMilli()), } irView, err := irSerializer.SerializeLogEvent(event) if nil != err { @@ -68,7 +59,7 @@ func testSerDerLogMessages( ioReader := openIoReader(t, args) defer ioReader.Close() - irReader := assertIrPreamble(t, args, ioReader, preamble) + irReader := assertIrPreamble(t, args, ioReader) defer irReader.Close() for _, event := range events { @@ -80,7 +71,6 @@ func testSerDerLogMessages( func serializeIrPreamble( t *testing.T, args testArgs, - preamble preambleFields, writer io.Writer, ) Serializer { var err error @@ -88,18 +78,9 @@ func serializeIrPreamble( var preambleIr BufView switch args.encoding { case eightByteEncoding: - serializer, preambleIr, err = EightByteSerializer( - preamble.Pattern, - preamble.PatternSyntax, - preamble.TimeZoneId, - ) + serializer, preambleIr, err = EightByteSerializer() case fourByteEncoding: - serializer, preambleIr, err = FourByteSerializer( - preamble.Pattern, - preamble.PatternSyntax, - preamble.TimeZoneId, - preamble.prevTimestamp, - ) + serializer, preambleIr, err = FourByteSerializer() default: t.Fatalf("unsupported encoding: %v", args.encoding) } @@ -120,45 +101,10 @@ func assertIrPreamble( t *testing.T, args testArgs, reader io.Reader, - preamble preambleFields, ) *Reader { irreader, err := NewReaderSize(reader, 4096) if nil != err { t.Fatalf("NewReader failed: %v", err) } - if irreader.TimestampInfo().Pattern != preamble.Pattern { - t.Fatalf( - "NewReader wrong pattern: '%v' != '%v'", - irreader.TimestampInfo().Pattern, - preamble.Pattern, - ) - } - if irreader.TimestampInfo().PatternSyntax != preamble.PatternSyntax { - t.Fatalf( - "NewReader wrong pattern syntax: '%v' != '%v'", - irreader.TimestampInfo().PatternSyntax, - preamble.PatternSyntax, - ) - } - if irreader.TimestampInfo().TimeZoneId != preamble.TimeZoneId { - t.Fatalf( - "NewReader wrong time zone id: '%v' != '%v'", - irreader.TimestampInfo().TimeZoneId, - preamble.TimeZoneId, - ) - } - if fourByteEncoding == args.encoding { - deserializer, ok := irreader.Deserializer.(*fourByteDeserializer) - if false == ok { - t.Fatalf("casting Deserializer to *fourByteDeserializer failed for fourByteEncoding.") - } - if deserializer.prevTimestamp != preamble.prevTimestamp { - t.Fatalf( - "NewReader wrong reference timestamp: '%v' != '%v'", - deserializer.prevTimestamp, - preamble.prevTimestamp, - ) - } - } return irreader } diff --git a/ir/serializer.go b/ir/serializer.go index e45a2c9..6846dcb 100644 --- a/ir/serializer.go +++ b/ir/serializer.go @@ -7,46 +7,37 @@ package ir import "C" import ( + "syscall" "unsafe" + "github.com/vmihailenco/msgpack/v5" + "github.com/y-scope/clp-ffi-go/ffi" ) -// A Serializer exports functions to serialize log events into a CLP IR byte -// stream. Serialization functions only return views (slices) of IR bytes, -// leaving their use to the user. Each Serializer owns its own unique underlying -// memory for the views it produces/returns. This memory is reused for each -// view, so to persist the contents the memory must be copied into another -// object. Close must be called to free the underlying memory and failure to do -// so will result in a memory leak. +// Exports functions to serialize log events into a CLP IR byte stream. +// Serialization functions only return views (slices) of IR bytes, leaving their use to the user. +// Each Serializer is backed by a C++ object that owns the memory for the views it produces/returns. +// This memory is reused for each view, so to persist the contents the memory must be copied into +// another object. Close must be called to free the underlying memory and failure to do so will +// result in a memory leak. type Serializer interface { - SerializeLogEvent(event ffi.LogEvent) (BufView, error) - TimestampInfo() TimestampInfo + SerializeLogEvent(logEvent ffi.LogEvent) (BufView, error) + SerializeMsgPackBytes(msgPackBytes []byte) (BufView, error) Close() error } -// EightByteSerializer creates and returns a new Serializer that writes eight -// byte encoded CLP IR and serializes a IR preamble into a BufView using it. On -// error returns: -// - nil Serializer -// - nil BufView -// - [IrError] error: CLP failed to successfully serialize -func EightByteSerializer( - tsPattern string, - tsPatternSyntax string, - timeZoneId string, -) (Serializer, BufView, error) { +// Creates and returns a new `Serializer` capable of writing eight byte encoded CLP IR along with an +// IR preamble. +// @return a new Serializer, BufView containing a preamble, nil +// @return Forward's `ir_serializer_eight_byte_create` return values as [syscall.Errno]. +func EightByteSerializer() (Serializer, BufView, error) { var irView C.ByteSpan - irs := eightByteSerializer{ - commonSerializer{TimestampInfo{tsPattern, tsPatternSyntax, timeZoneId}, nil}, - } - if err := IrError(C.ir_serializer_new_eight_byte_serializer_with_preamble( - newCStringView(tsPattern), - newCStringView(tsPatternSyntax), - newCStringView(timeZoneId), + irs := eightByteSerializer{commonSerializer{nil}} + if err := syscall.Errno(C.ir_serializer_eight_byte_create( &irs.cptr, &irView, - )); Success != err { + )); FfiSuccess != err { return nil, nil, err } return &irs, unsafe.Slice((*byte)(irView.m_data), irView.m_size), nil @@ -58,76 +49,77 @@ func EightByteSerializer( // - nil Serializer // - nil BufView // - [IrError] error: CLP failed to successfully serialize -func FourByteSerializer( - tsPattern string, - tsPatternSyntax string, - timeZoneId string, - referenceTs ffi.EpochTimeMs, -) (Serializer, BufView, error) { +func FourByteSerializer() (Serializer, BufView, error) { var irView C.ByteSpan - irs := fourByteSerializer{ - commonSerializer{TimestampInfo{tsPattern, tsPatternSyntax, timeZoneId}, nil}, - referenceTs, - } - if err := IrError(C.ir_serializer_new_four_byte_serializer_with_preamble( - newCStringView(tsPattern), - newCStringView(tsPatternSyntax), - newCStringView(timeZoneId), - C.int64_t(referenceTs), + irs := fourByteSerializer{commonSerializer{nil}} + if err := syscall.Errno(C.ir_serializer_four_byte_create( &irs.cptr, &irView, - )); Success != err { + )); FfiSuccess != err { return nil, nil, err } return &irs, unsafe.Slice((*byte)(irView.m_data), irView.m_size), nil } -// commonSerializer contains fields common to all types of CLP IR encoding. -// TimestampInfo stores information common to all timestamps found in the IR. +// commonSerializer contains fields common to all types of CLP IR serializers. // cptr holds a reference to the underlying C++ objected used as backing storage // for the Views returned by the serializer. Close must be called to free this // underlying memory and failure to do so will result in a memory leak. type commonSerializer struct { - tsInfo TimestampInfo - cptr unsafe.Pointer + cptr unsafe.Pointer +} + +// Create a distinct type so we know the type of the underlying serializer, but allows the use of +// the same methods. +type eightByteSerializer struct { + commonSerializer } // Closes the serializer by releasing the underlying C++ allocated memory. // Failure to call Close will result in a memory leak. -func (serializer *commonSerializer) Close() error { +func (serializer *eightByteSerializer) Close() error { if nil != serializer.cptr { - C.ir_serializer_close(serializer.cptr) + C.ir_serializer_eight_byte_close(serializer.cptr) serializer.cptr = nil } return nil } -// Returns the TimestampInfo of the Serializer. -func (serializer commonSerializer) TimestampInfo() TimestampInfo { - return serializer.tsInfo -} - -type eightByteSerializer struct { - commonSerializer +// SerializeLogEvent attempts to serialize the log event, into an eight byte encoded CLP IR byte +// stream. +// On error returns: +// - a nil BufView +// - [IrError] based on the failure of the Cgo call +func (serializer *eightByteSerializer) SerializeLogEvent( + logEvent ffi.LogEvent, +) (BufView, error) { + return serializeLogEvent(serializer, logEvent) } -// SerializeLogEvent attempts to serialize the log event, event, into an eight +// SerializeMsgPackBytes attempts to serialize the log event, event, into a eight // byte encoded CLP IR byte stream. On error returns: -// - a nil BufView +// - nil BufView // - [IrError] based on the failure of the Cgo call -func (serializer *eightByteSerializer) SerializeLogEvent( - event ffi.LogEvent, +func (serializer *eightByteSerializer) SerializeMsgPackBytes( + msgPackBytes []byte, ) (BufView, error) { - return serializeLogEvent(serializer, event) + return serializeMsgPackBytes(serializer, msgPackBytes) } -// fourByteSerializer contains both a common CLP IR serializer and stores the -// previously seen log event's timestamp. The previous timestamp is necessary to -// calculate the current timestamp as four byte encoding only encodes the -// timestamp delta between the current log event and the previous. +// Create a distinct type so we know the type of the underlying serializer, but allows the use of +// the same methods. type fourByteSerializer struct { commonSerializer - prevTimestamp ffi.EpochTimeMs +} + +// Closes the serializer by releasing the underlying C++ allocated memory. +// Failure to call Close will result in a memory leak. +func (serializer *fourByteSerializer) Close() error { + if nil != serializer.cptr { + C.ir_serializer_four_byte_close(serializer.cptr) + serializer.cptr = nil + } + return nil } // SerializeLogEvent attempts to serialize the log event, event, into a four @@ -135,37 +127,54 @@ type fourByteSerializer struct { // - nil BufView // - [IrError] based on the failure of the Cgo call func (serializer *fourByteSerializer) SerializeLogEvent( - event ffi.LogEvent, + logEvent ffi.LogEvent, ) (BufView, error) { - return serializeLogEvent(serializer, event) + return serializeLogEvent(serializer, logEvent) +} + +// SerializeMsgPackBytes attempts to serialize the log event, event, into a four +// byte encoded CLP IR byte stream. On error returns: +// - nil BufView +// - [IrError] based on the failure of the Cgo call +func (serializer *fourByteSerializer) SerializeMsgPackBytes( + msgPackBytes []byte, +) (BufView, error) { + return serializeMsgPackBytes(serializer, msgPackBytes) } func serializeLogEvent( serializer Serializer, - event ffi.LogEvent, + logEvent ffi.LogEvent, +) (BufView, error) { + msgPackBytes, err := msgpack.Marshal(&logEvent) + if err != nil { + return nil, err + } + return serializeMsgPackBytes(serializer, msgPackBytes) +} + +func serializeMsgPackBytes( + serializer Serializer, + msgPackBytes []byte, ) (BufView, error) { var irView C.ByteSpan - var err error + var err syscall.Errno + switch irs := serializer.(type) { case *eightByteSerializer: - err = IrError(C.ir_serializer_serialize_eight_byte_log_event( - newCStringView(event.LogMessage), - C.int64_t(event.Timestamp), + err = syscall.Errno(C.ir_serializer_eight_byte_serialize_log_event( irs.cptr, + newCByteSpan(msgPackBytes), &irView, )) case *fourByteSerializer: - err = IrError(C.ir_serializer_serialize_four_byte_log_event( - newCStringView(event.LogMessage), - C.int64_t(event.Timestamp-irs.prevTimestamp), + err = syscall.Errno(C.ir_serializer_four_byte_serialize_log_event( irs.cptr, + newCByteSpan(msgPackBytes), &irView, )) - if Success == err { - irs.prevTimestamp = event.Timestamp - } } - if Success != err { + if FfiSuccess != err { return nil, err } return unsafe.Slice((*byte)(irView.m_data), irView.m_size), nil diff --git a/ir/writer.go b/ir/writer.go index 697fb29..30f399d 100644 --- a/ir/writer.go +++ b/ir/writer.go @@ -1,10 +1,8 @@ package ir import ( - "bytes" "fmt" "io" - "time" "github.com/y-scope/clp-ffi-go/ffi" ) @@ -14,60 +12,42 @@ import ( // the arguments used. Close must be called to free the underlying memory and // failure to do so will result in a memory leak. To write a complete IR stream // Close must be called before the final WriteTo call. +// buffer in ioWriter if necessary type Writer struct { Serializer - buf bytes.Buffer -} - -// Returns [NewWriterSize] with a FourByteEncoding Serializer using the local -// time zone, and a buffer size of 1MB. -func NewWriter() (*Writer, error) { - return NewWriterSize[FourByteEncoding](1024*1024, time.Local.String()) + ioWriter io.Writer } // NewWriterSize creates a new [Writer] with a [Serializer] based on T, and // writes a CLP IR preamble. The preamble is stored inside the Writer's internal // buffer to be written out later. The size parameter denotes the initial buffer -// size to use and timeZoneId denotes the time zone of the source producing the -// log events, so that local times (any time that is not a unix timestamp) are -// handled correctly. +// size to use. // - success: valid [*Writer], nil // - error: nil [*Writer], invalid type error or an error propagated from // [FourByteSerializer], [EightByteSerializer], or [bytes.Buffer.Write] -func NewWriterSize[T EightByteEncoding | FourByteEncoding]( - size int, - timeZoneId string, +func NewWriter[T EightByteEncoding | FourByteEncoding]( + ioWriter io.Writer, ) (*Writer, error) { var irw Writer - irw.buf.Grow(size) - var irView BufView var err error var t T switch any(t).(type) { case EightByteEncoding: - irw.Serializer, irView, err = EightByteSerializer( - "", - "", - timeZoneId, - ) + irw.Serializer, irView, err = EightByteSerializer() case FourByteEncoding: - irw.Serializer, irView, err = FourByteSerializer( - "", - "", - timeZoneId, - ffi.EpochTimeMs(time.Now().UnixMilli()), - ) + irw.Serializer, irView, err = FourByteSerializer() default: err = fmt.Errorf("invalid type: %T", t) } if nil != err { return nil, err } - _, err = irw.buf.Write(irView) + _, err = ioWriter.Write(irView) if nil != err { return nil, err } + irw.ioWriter = ioWriter return &irw, nil } @@ -75,41 +55,20 @@ func NewWriterSize[T EightByteEncoding | FourByteEncoding]( // underlying C++ allocated memory used by the serializer. Failure to call Close // will result in a memory leak. func (writer *Writer) Close() error { - writer.buf.WriteByte(0x0) + _, err := writer.ioWriter.Write([]byte{0x0}) + if nil != err { + return err + } return writer.Serializer.Close() } -// CloseTo is a combination of [Close] and [WriteTo]. It will completely close -// the Writer (and underlying serializer) and write the data out to the -// io.Writer. -// Returns: -// - success: number of bytes written, nil -// - error: number of bytes written, error propagated from [WriteTo] -func (writer *Writer) CloseTo(w io.Writer) (int64, error) { - writer.Close() - return writer.WriteTo(w) -} - -// Bytes returns a slice of the Writer's internal buffer. The slice is valid for -// use only until the next buffer modification (that is, only until the next -// call to Write, WriteTo, or Reset). -func (writer *Writer) Bytes() []byte { - return writer.buf.Bytes() -} - -// Reset resets the buffer to be empty, but it retains the underlying storage -// for use by future writes. -func (writer *Writer) Reset() { - writer.buf.Reset() -} - // Write uses [SerializeLogEvent] to serialize the provided log event to CLP IR // and then stores it in the internal buffer. Returns: // - success: number of bytes written, nil // - error: number of bytes written (can be 0), error propagated from // [SerializeLogEvent] or [bytes.Buffer.Write] -func (writer *Writer) Write(event ffi.LogEvent) (int, error) { - irView, err := writer.SerializeLogEvent(event) +func (writer *Writer) WriteLogEvent(logEvent ffi.LogEvent) (int, error) { + irView, err := writer.SerializeLogEvent(logEvent) if nil != err { return 0, err } @@ -118,24 +77,31 @@ func (writer *Writer) Write(event ffi.LogEvent) (int, error) { // Write can fail in the future, we should either: // 1. fix the issue and retry the write // 2. store irView and provide a retry API (allowing the user to fix the issue and retry) - n, err := writer.buf.Write(irView) + n, err := writer.ioWriter.Write(irView) if nil != err { return n, err } return n, nil } -// WriteTo writes data to w until the buffer is drained or an error occurs. If -// no error occurs the buffer is reset. On an error the user is expected to use -// [writer.Bytes] and [writer.Reset] to manually handle the buffer's contents before -// continuing. Returns: +// Write uses [SerializeLogEvent] to serialize the provided log event to CLP IR +// and then stores it in the internal buffer. Returns: // - success: number of bytes written, nil -// - error: number of bytes written, error propagated from -// [bytes.Buffer.WriteTo] -func (writer *Writer) WriteTo(w io.Writer) (int64, error) { - n, err := writer.buf.WriteTo(w) - if nil == err { - writer.buf.Reset() +// - error: number of bytes written (can be 0), error propagated from +// [SerializeLogEvent] or [bytes.Buffer.Write] +func (writer *Writer) WriteMsgPackBytes(msgPackBytes []byte) (int, error) { + irView, err := writer.SerializeMsgPackBytes(msgPackBytes) + if nil != err { + return 0, err } - return n, err + // bytes.Buffer.Write will always return nil for err (https://pkg.go.dev/bytes#Buffer.Write) + // However, err is still propagated to correctly alert the user in case this ever changes. If + // Write can fail in the future, we should either: + // 1. fix the issue and retry the write + // 2. store irView and provide a retry API (allowing the user to fix the issue and retry) + n, err := writer.ioWriter.Write(irView) + if nil != err { + return n, err + } + return n, nil } diff --git a/ir/writeread_test.go b/ir/writeread_test.go index d529898..ac5ab90 100644 --- a/ir/writeread_test.go +++ b/ir/writeread_test.go @@ -11,7 +11,7 @@ import ( func testWriteReadLogMessages( t *testing.T, args testArgs, - messages []ffi.LogMessage, + messages []string, ) { ioWriter := openIoWriter(t, args) irWriter := openIrWriter(t, args, ioWriter) @@ -19,18 +19,18 @@ func testWriteReadLogMessages( var events []ffi.LogEvent for _, msg := range messages { event := ffi.LogEvent{ - LogMessage: msg, - Timestamp: ffi.EpochTimeMs(time.Now().UnixMilli()), + "LogMessage": msg, + "Timestamp": uint64(time.Now().UnixMilli()), } - _, err := irWriter.Write(event) + _, err := irWriter.WriteLogEvent(event) if nil != err { - t.Fatalf("ir.Writer.Write failed: %v", err) + t.Fatalf("ir.Writer.WriteLogEvent failed: %v", err) } events = append(events, event) } - _, err := irWriter.CloseTo(ioWriter) + err := irWriter.Close() if nil != err { - t.Fatalf("ir.Writer.CloseTo failed: %v", err) + t.Fatalf("ir.Writer.Close failed: %v", err) } ioWriter.Close() @@ -57,14 +57,14 @@ func openIrWriter( var err error switch args.encoding { case eightByteEncoding: - irWriter, err = NewWriterSize[EightByteEncoding](1024*1024, defaultTimeZoneId) + irWriter, err = NewWriter[EightByteEncoding](writer) case fourByteEncoding: - irWriter, err = NewWriterSize[FourByteEncoding](1024*1024, defaultTimeZoneId) + irWriter, err = NewWriter[FourByteEncoding](writer) default: t.Fatalf("unsupported encoding: %v", args.encoding) } if nil != err { - t.Fatalf("NewWriterSize failed: %v", err) + t.Fatalf("NewWriter failed: %v", err) } return irWriter } diff --git a/lib/libclp_ffi_linux_amd64.a b/lib/libclp_ffi_linux_amd64.a index a398ba8c5ca602eb77c63b29601627aaa83819eb..037ed617493cfce8663bcbc912789ba16c1cd46f 100644 GIT binary patch literal 1613986 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 dppj+dq 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 IVTx`&fI>pz+}mkYlSfy@1Bmui$Q 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 literal 632214 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

M42j;Zld9Ks1L# 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 j-TGqg^{d-t{Mk17JdEvyFS!q5U?&@r7OcK5@h+ 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 z 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 >))&giezB+UAo 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 IS@Pxo2mPnrs{jB1 diff --git a/search/BUILD.bazel b/search/BUILD.bazel deleted file mode 100644 index a117b2d..0000000 --- a/search/BUILD.bazel +++ /dev/null @@ -1,21 +0,0 @@ -load("@io_bazel_rules_go//go:def.bzl", "go_library") - -go_library( - name = "search", - srcs = glob(["*.go"], exclude=["build_*.go", "*_test.go"]), - cgo = True, - cdeps = [ - "//cpp:libclp_ffi_go", - ], - importpath = "github.com/y-scope/clp-ffi-go/search", - visibility = ["//visibility:public"], - deps = [ - "//ffi", - ], -) - -alias( - name = "go_default_library", - actual = ":search", - visibility = ["//visibility:public"], -) diff --git a/search/build_amd64.go b/search/build_amd64.go deleted file mode 100644 index 2c6891a..0000000 --- a/search/build_amd64.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !external && amd64 - -package search - -/* -#cgo CPPFLAGS: -I${SRCDIR}/../include/ -#cgo linux LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_linux_amd64.a -lstdc++ -#cgo darwin LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_darwin_amd64.a -lstdc++ -*/ -import "C" diff --git a/search/build_arm64.go b/search/build_arm64.go deleted file mode 100644 index 9c7993a..0000000 --- a/search/build_arm64.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build !external && arm64 - -package search - -/* -#cgo CPPFLAGS: -I${SRCDIR}/../include/ -#cgo linux LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_linux_arm64.a -lstdc++ -#cgo darwin LDFLAGS: ${SRCDIR}/../lib/libclp_ffi_darwin_arm64.a -lstdc++ -*/ -import "C" diff --git a/search/build_external.go b/search/build_external.go deleted file mode 100644 index ee54523..0000000 --- a/search/build_external.go +++ /dev/null @@ -1,10 +0,0 @@ -//go:build external - -// When using `external` build manually set linkage with `CGO_LDFLAGS`. -package search - -/* -#cgo CPPFLAGS: -I${SRCDIR}/../include/ -#cgo external LDFLAGS: -*/ -import "C" diff --git a/search/wildcard_query.go b/search/wildcard_query.go deleted file mode 100644 index ec34944..0000000 --- a/search/wildcard_query.go +++ /dev/null @@ -1,88 +0,0 @@ -package search - -/* -#include -#include -*/ -import "C" - -import ( - "strings" - "unsafe" - - "github.com/y-scope/clp-ffi-go/ffi" -) - -// A CLP wildcard query containing a query string and a bool for whether the -// query is case sensitive or not. The fields must be accessed through getters -// to ensure that the query string remains clean/safe after creation by -// NewWildcardQuery. -// Two wildcards are currently supported: '*' to match 0 or more characters, and -// '?' to match any single character. Each can be escaped using a preceding '\'. -// Other characters which are escaped are treated as normal characters. -type WildcardQuery struct { - query string - caseSensitive bool -} - -// Create a new WildcardQuery that is cleaned to contain a safe wildcard query -// string. A wildcard query string must follow 2 rules: -// 1. The wildcard string should not contain consecutive '*'. -// 2. The wildcard string should not contain an escape character without a -// character following it. -// -// NewWildcardQuery will sanitize the provided query and store the safe version. -func NewWildcardQuery(query string, caseSensitive bool) WildcardQuery { - var cptr unsafe.Pointer - cleanQuery := C.wildcard_query_new( - C.StringView{ - (*C.char)(unsafe.Pointer(unsafe.StringData(query))), - C.size_t(len(query)), - }, - &cptr, - ) - defer C.wildcard_query_delete(cptr) - return WildcardQuery{ - strings.Clone(unsafe.String( - (*byte)((unsafe.Pointer)(cleanQuery.m_data)), - cleanQuery.m_size, - )), - caseSensitive, - } -} - -func (wcq WildcardQuery) Query() string { return wcq.query } -func (wcq WildcardQuery) CaseSensitive() bool { return wcq.caseSensitive } - -// A MergedWildcardQuery represents the union of multiple wildcard queries -// (multiple WildcardQuery instances each with their own query string and case -// sensitivity). -type MergedWildcardQuery struct { - queries string - endOffsets []int - caseSensitivity []bool -} - -func (mwcq MergedWildcardQuery) Queries() string { return mwcq.queries } -func (mwcq MergedWildcardQuery) EndOffsets() []int { return mwcq.endOffsets } -func (mwcq MergedWildcardQuery) CaseSensitivity() []bool { return mwcq.caseSensitivity } - -// Merge multiple WildcardQuery objects together by concatenating their query -// strings, storing their end/length offsets, and recording their case -// sensitivity. -func MergeWildcardQueries(queries []WildcardQuery) MergedWildcardQuery { - var sb strings.Builder - offsets := make([]int, len(queries)) - caseSensitivity := make([]bool, len(queries)) - for i, q := range queries { - offsets[i], _ = sb.WriteString(q.query) // err always nil - caseSensitivity[i] = queries[i].caseSensitive - } - return MergedWildcardQuery{sb.String(), offsets, caseSensitivity} -} - -// A timestamp interval of [m_lower, m_upper). -type TimestampInterval struct { - Lower ffi.EpochTimeMs - Upper ffi.EpochTimeMs -} diff --git a/task-lint.yml b/task-lint.yml new file mode 100644 index 0000000..42560cc --- /dev/null +++ b/task-lint.yml @@ -0,0 +1,37 @@ +version: "3" + +vars: + G_LINT_VENV_DIR: "{{.G_BUILD_DIR}}/lint-venv" + +tasks: + lint: + deps: + - "lint-cpp" + - "lint-go" + - "lint-yml" + + lint-cpp: + deps: ["lint-venv-cpp"] + # cmds: + # - clang-tidy + + lint-go: + # deps: ["venv"] + cmds: + # curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | + # sh -s -- -b $(go env GOPATH)/bin v1.59.0 + - |- + golangci-lint run + + lint-yml: + # deps: ["venv"] + cmds: + - |- + # . "{{.G_LINT_VENV_DIR}}/bin/activate" + yamllint --strict \ + .github \ + .golangci.yml \ + .yamllint.yml \ + cpp/.clang-format \ + cpp/.clang-tidy \ + taskfile.yml diff --git a/task-utils.yml b/task-utils.yml new file mode 100644 index 0000000..ed4f7d9 --- /dev/null +++ b/task-utils.yml @@ -0,0 +1,186 @@ +version: "3" + +tasks: + cmake-build: + label: "cmake-build: {{.SOURCE_DIR}} {{.BUILD_DIR}}" + internal: true + vars: + CHECKSUM_FILE: '{{default (printf "%s.md5" .BUILD_DIR) .CHECKSUM_FILE}}' + CMAKE_ARGS: "{{default nil .CMAKE_ARGS}}" + requires: + vars: ["BUILD_DIR", "SOURCE_DIR"] + sources: + - "{{.SOURCE_DIR}}/**/*" + - exclude: "{{.SOURCE_DIR}}/.cache/**/*" + - exclude: "{{.SOURCE_DIR}}/compile_commands.json" + generates: ["{{.CHECKSUM_FILE}}"] + deps: + - task: "validate-checksum" + vars: + CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" + DATA_PATHS: ["{{.BUILD_DIR}}"] + EXCLUDE_PATHS: ["install_manifest.txt"] + cmds: + - >- + cmake + -S "{{.SOURCE_DIR}}" + -B "{{.BUILD_DIR}}" + {{.CMAKE_ARGS}} + - >- + cmake + --build "{{.BUILD_DIR}}" + --parallel + # This command must be last + - task: "compute-checksum" + vars: + DATA_PATHS: ["{{.BUILD_DIR}}"] + OUTPUT_FILE: "{{.CHECKSUM_FILE}}" + EXCLUDE_PATHS: ["install_manifest.txt"] + + cmake-install: + label: "cmake-install: {{.BUILD_DIR}} {{.INSTALL_PREFIX}}" + internal: true + vars: + CHECKSUM_FILE: '{{default (printf "%s.md5" .INSTALL_PREFIX) .CHECKSUM_FILE}}' + _INSTALL_PREFIX_ARRAY: ["{{.INSTALL_PREFIX}}"] + DATA_PATHS: + ref: "default ._INSTALL_PREFIX_ARRAY .DATA_PATHS" + requires: + vars: ["BUILD_DIR", "INSTALL_PREFIX"] + sources: + - "{{.BUILD_DIR}}/**/*" + - exclude: "{{.BUILD_DIR}}/install_manifest.txt" + generates: ["{{.CHECKSUM_FILE}}"] + deps: + - task: "validate-checksum" + vars: + CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" + DATA_PATHS: + ref: ".DATA_PATHS" + cmds: + - >- + cmake + --install "{{.BUILD_DIR}}" + --prefix "{{.INSTALL_PREFIX}}" + # This command must be last + - task: "compute-checksum" + vars: + DATA_PATHS: + ref: ".DATA_PATHS" + OUTPUT_FILE: "{{.CHECKSUM_FILE}}" + + curl: + label: "curl: {{.OUTPUT_FILE}}" + internal: true + vars: + OUTPUT_FILE: "{{default (base .URL) .OUTPUT_FILE}}" + requires: + vars: ["URL", "URL_SHA256"] + generates: + - "{{.OUTPUT_FILE}}" + status: + - >- + diff + <(echo "{{.URL_SHA256}}") + <(openssl dgst -sha256 "{{.OUTPUT_FILE}}" + | awk '{print $2}') + cmds: + - |- + mkdir -p "{{dir .OUTPUT_FILE}}" + curl -L "{{.URL}}" -o "{{.OUTPUT_FILE}}" + + # @param {string} OUTPUT_DIR + # @param {string} URL + # @param {string} URL_SHA256 + fetch-src: + label: "fetch-src: {{.OUTPUT_DIR}}" + internal: true + vars: + CHECKSUM_FILE: '{{default (printf "%s.md5" .OUTPUT_DIR) .CHECKSUM_FILE}}' + STRIP: "{{default 1 .STRIP}}" + TAR_FILE: '{{default (printf "%s.tar.gz" .OUTPUT_DIR) .TAR_FILE}}' + requires: + vars: ["OUTPUT_DIR", "URL", "URL_SHA256"] + sources: ["{{.TASKFILE}}"] + generates: ["{{.CHECKSUM_FILE}}", "{{.TAR_FILE}}"] + deps: + - task: "curl" + vars: + URL: "{{.URL}}" + URL_SHA256: "{{.URL_SHA256}}" + OUTPUT_FILE: "{{.TAR_FILE}}" + - task: "validate-checksum" + vars: + CHECKSUM_FILE: "{{.CHECKSUM_FILE}}" + DATA_PATHS: ["{{.OUTPUT_DIR}}"] + cmds: + - |- + rm -rf "{{.OUTPUT_DIR}}" + mkdir -p "{{.OUTPUT_DIR}}" + tar -x --strip-components="{{.STRIP}}" -C "{{.OUTPUT_DIR}}" -f "{{.TAR_FILE}}" + # This command must be last + - task: "compute-checksum" + vars: + DATA_PATHS: ["{{.OUTPUT_DIR}}"] + OUTPUT_FILE: "{{.CHECKSUM_FILE}}" + + # @param {[]string} [DATA_PATHS] A list of paths to compute the checksum for. + # @param {string} OUTPUT_FILE + # @param {[]string} [EXCLUDE_PATHS] A list of paths, relative to any `DATA_PATHS`, to exclude from + # the checksum. + compute-checksum: + desc: "Tries to compute a checksum for the given directory and output it to a file." + internal: true + silent: true + requires: + vars: ["DATA_PATHS", "OUTPUT_FILE"] + cmds: + - >- + tar cf - + --group 0 + --mtime "UTC 1970-01-01" + --numeric-owner + --owner 0 + --sort name + {{- range .EXCLUDE_PATHS}} + --exclude="{{.}}" + {{- end}} + {{- range .DATA_PATHS}} + "{{.}}" + {{- end}} + 2> /dev/null + | md5sum > {{.OUTPUT_FILE}} + # Ignore errors so that dependent tasks don't fail + ignore_error: true + + # @param {[]string} [DATA_PATHS] A list of paths to validate the checksum for. + # @param {string} OUTPUT_FILE + # @param {[]string} [EXCLUDE_PATHS] A list of paths, relative to any `DATA_PATHS`, to exclude from + # the checksum. + validate-checksum: + desc: "Validates the checksum of the given directory matches the checksum in the given file, or + deletes the checksum file otherwise." + internal: true + silent: true + vars: + TMP_CHECKSUM_FILE: "{{.CHECKSUM_FILE}}.tmp" + requires: + vars: ["CHECKSUM_FILE", "DATA_PATHS"] + cmds: + - task: "compute-checksum" + vars: + DATA_PATHS: + ref: ".DATA_PATHS" + EXCLUDE_PATHS: + ref: ".EXCLUDE_PATHS" + OUTPUT_FILE: "{{.TMP_CHECKSUM_FILE}}" + - defer: "rm -f '{{.TMP_CHECKSUM_FILE}}'" + # Check that the directory exists and the checksum matches; otherwise delete the checksum file + - >- + ( + {{- range .DATA_PATHS}} + test -e "{{.}}" && + {{- end}} + diff -q '{{.TMP_CHECKSUM_FILE}}' '{{.CHECKSUM_FILE}}' 2> /dev/null + ) || rm -f '{{.CHECKSUM_FILE}}' + diff --git a/taskfile.yml b/taskfile.yml new file mode 100644 index 0000000..28429ac --- /dev/null +++ b/taskfile.yml @@ -0,0 +1,169 @@ +version: "3" + +includes: + lint: "task-lint.yml" + # utils: "tools/yscope-dev-utils/taskfiles/utils.yml" + utils: "task-utils.yml" + +vars: + G_BUILD_BASE_DIR: "{{.TASKFILE_DIR}}/build" + G_BUILD_TYPE: "Release" + G_BUILD_DIR: "{{.G_BUILD_BASE_DIR}}/{{.G_BUILD_TYPE}}" + G_DEPS_DIR: "{{.G_BUILD_BASE_DIR}}/deps" + G_INSTALL_PREFIX: "{{.TASKFILE_DIR}}" + G_INSTALL_INCLUDE_DIR: "{{.G_INSTALL_PREFIX}}/include/ffi_go" + G_INSTALL_LIB: '{{printf "%s/lib/libclp_ffi_%s_%s.a" .G_INSTALL_PREFIX OS ARCH}}' + G_INSTALL_CHECKSUM_FILE: "{{.G_BUILD_BASE_DIR}}/install.md5" + +tasks: + default: + cmds: + - task: "build" + + build-cpp: + deps: + - "install-deps-cpp-clp" + - "install-deps-cpp-outcome" + - "install-deps-cpp-msgpack" + cmds: + - task: "utils:cmake-build" + vars: + BUILD_DIR: "{{.G_BUILD_DIR}}" + SOURCE_DIR: "{{.TASKFILE_DIR}}/cpp" + CMAKE_ARGS: >- + -DCMAKE_BUILD_TYPE="{{.G_BUILD_TYPE}}" + -DOS_SUFFIX="{{OS}}" + -DARCH_SUFFIX="{{ARCH}}" + -DDEPS_DIR="{{.G_DEPS_DIR}}" + -Dmsgpack-cxx_ROOT="{{.G_DEPS_DIR}}/msgpack-install" + -Doutcome_SOURCE_DIR="{{.G_DEPS_DIR}}/outcome-src" + + build-go: + aliases: ["build"] + deps: + - "build-go-generate" + - "install-cpp" + sources: + - "{{.TASKFILE_DIR}}/go.mod" + - "{{.TASKFILE_DIR}}/ffi/**/*" + - "{{.TASKFILE_DIR}}/ir/**/*" + cmds: + - "go build {{.TASKFILE_DIR}}/..." + + build-go-generate: + sources: + - "{{.TASKFILE_DIR}}/go.mod" + - "{{.TASKFILE_DIR}}/ffi/**/*" + - "{{.TASKFILE_DIR}}/ir/**/*" + - exclude: "{{.TASKFILE_DIR}}/ir/irerror_string.go" + generates: ["{{.TASKFILE_DIR}}/ir/irerror_string.go"] + cmds: + - |- + go install "golang.org/x/tools/cmd/stringer@latest" + go generate "{{.TASKFILE_DIR}}/..." + + install-cpp: + deps: ["build-cpp"] + cmds: + - task: "utils:cmake-install" + vars: + BUILD_DIR: "{{.G_BUILD_DIR}}" + DATA_PATHS: + - "{{.G_INSTALL_INCLUDE_DIR}}" + - "{{.G_INSTALL_LIB}}" + INSTALL_PREFIX: "{{.G_INSTALL_PREFIX}}" + CHECKSUM_FILE: "{{.G_INSTALL_CHECKSUM_FILE}}" + + install-deps-cpp-clp: + vars: + SOURCE_DIR: '{{default (printf "%s/clp-src/clp" .G_DEPS_DIR) .SOURCE_DIR}}' + deps: ["install-deps-cpp-clp-json"] + cmds: + - task: "utils:fetch-src" + vars: + OUTPUT_DIR: "{{.SOURCE_DIR}}" + URL: "https://github.com/y-scope/clp/archive/e21672b906641c4724a25ea74f13857afdebe0e8.tar.gz" + URL_SHA256: "b7ab19af62fb0601d858047452e2f330489070caccd4aaf1e09709f6ca6324ab" + + install-deps-cpp-clp-json: + cmds: + - task: "utils:curl" + vars: + OUTPUT_FILE: "{{.G_DEPS_DIR}}/json-src/json/single_include/nlohmann/json.hpp" + URL: "https://github.com/nlohmann/json/releases/download/v3.11.3/json.hpp" + URL_SHA256: "9bea4c8066ef4a1c206b2be5a36302f8926f7fdc6087af5d20b417d0cf103ea6" + + install-deps-cpp-msgpack: + vars: + BUILD_DIR: '{{default (printf "%s/msgpack-build" .G_DEPS_DIR) .BUILD_DIR}}' + SOURCE_DIR: '{{default (printf "%s/msgpack-src" .G_DEPS_DIR) .SOURCE_DIR}}' + INSTALL_PREFIX: '{{default (printf "%s/msgpack-install" .G_DEPS_DIR) .INSTALL_PREFIX}}' + cmds: + - task: "utils:fetch-src" + vars: + OUTPUT_DIR: "{{.SOURCE_DIR}}" + URL: "https://github.com/msgpack/msgpack-c/archive/cpp-6.1.0.tar.gz" + URL_SHA256: "5e63e4d9b12ab528fccf197f7e6908031039b1fc89cd8da0e97fbcbf5a6c6d3a" + - task: "utils:cmake-build" + vars: + BUILD_DIR: "{{.BUILD_DIR}}" + SOURCE_DIR: "{{.SOURCE_DIR}}" + CMAKE_ARGS: >- + -DMSGPACK_CXX20="ON" + -DMSGPACK_USE_BOOST="OFF" + - task: "utils:cmake-install" + vars: + BUILD_DIR: "{{.BUILD_DIR}}" + INSTALL_PREFIX: "{{.INSTALL_PREFIX}}" + + install-deps-cpp-outcome: + vars: + SOURCE_DIR: '{{default (printf "%s/outcome-src/outcome/single-header" .G_DEPS_DIR) .SOURCE_DIR}}' + cmds: + - task: "utils:curl" + vars: + OUTPUT_FILE: "{{.SOURCE_DIR}}/outcome.hpp" + URL: "https://github.com/ned14/outcome/raw/v2.2.10/single-header/outcome.hpp" + URL_SHA256: "ad624622dcb1613027d39bd1aac93a13f11f46df197aa494a3980bef3c044dad" + + clean: + cmds: + - |- + rm -fr "{{.G_INSTALL_INCLUDE_DIR}}" + rm -f "{{.G_INSTALL_LIB}}" + rm -fr "{{.G_BUILD_DIR}}" + rm -f "{{.G_BUILD_DIR}}.md5" + go clean -cache + + clean-all: + deps: + - "clean-deps" + - "clean" + cmds: + - "rm -fr {{.G_BUILD_BASE_DIR}}" + + clean-deps: + cmds: + - "rm -fr {{.G_DEPS_DIR}}" + + test-all: + deps: + - "test" + - "test-bazel" + + test: + deps: ["build-go"] + cmds: + - "go test ./..." + + build-bazel: + cmds: + - "bazel build //..." + + clean-bazel: + cmds: + - "bazel clean --expunge" + + test-bazel: + cmds: + - "bazel test //ir:ir_test" diff --git a/tools/yscope-dev-utils b/tools/yscope-dev-utils new file mode 160000 index 0000000..159768c --- /dev/null +++ b/tools/yscope-dev-utils @@ -0,0 +1 @@ +Subproject commit 159768c7d171595ed2cba17b758c10043a2efe96