Class: Smplkit::Audit::Forwarder
- Inherits:
-
Object
- Object
- Smplkit::Audit::Forwarder
- Defined in:
- lib/smplkit/audit/models.rb
Overview
A SIEM streaming forwarder configured on the customer’s account.
Active-record style: instantiate via mgmt.audit.forwarders.new_forwarder(…), mutate fields directly, and call #save to persist or #delete to remove. Header values in configuration.headers are returned redacted on reads — the GET path on the audit API replaces every header value with “<redacted>”. Re-supply real values before calling #save; the SDK does not cache them client-side.
Instance Attribute Summary collapse
-
#configuration ⇒ HttpConfiguration
Destination request configuration.
-
#created_at ⇒ String?
ISO-8601 timestamp of first persist.
-
#deleted_at ⇒ String?
Soft-delete timestamp.
-
#description ⇒ String?
Optional free-text description.
-
#enabled ⇒ Boolean
Read-only.
-
#environments ⇒ Hash{String => ForwarderEnvironment}
Per-environment overrides keyed by environment key (e.g. “production”, “staging”).
-
#filter ⇒ Hash?
Optional JSON Logic expression evaluated per event.
-
#forward_smplkit_events ⇒ Boolean
When
true, this forwarder also receives platform change events that smplkit records about your own resources (flag, configuration, and similar changes). - #forwarder_type ⇒ String
-
#id ⇒ String?
Caller-supplied unique identifier (key) for this forwarder.
-
#name ⇒ String
Display name.
-
#transform ⇒ Object?
Optional template applied to each event before delivery.
-
#transform_type ⇒ String?
Engine that evaluates #transform — one of TransformType::VALUES.
-
#updated_at ⇒ String?
ISO-8601 timestamp of the most recent mutation.
-
#version ⇒ Integer?
Monotonic version counter, bumped on every server-side write.
Class Method Summary collapse
- .from_resource(resource, client: nil) ⇒ Object
-
.validate_transform_pair!(transform, transform_type) ⇒ Object
private
Validate the (transform, transform_type) pair.
Instance Method Summary collapse
- #_apply(other) ⇒ Object private
-
#delete ⇒ nil
(also: #delete!)
Soft-delete this forwarder on the server.
-
#initialize(client = nil, name:, forwarder_type:, configuration:, id: nil, enabled: false, forward_smplkit_events: false, environments: nil, description: nil, filter: nil, transform: nil, transform_type: nil, created_at: nil, updated_at: nil, deleted_at: nil, version: nil) ⇒ Forwarder
constructor
A new instance of Forwarder.
-
#save ⇒ self
(also: #save!)
Create or update this forwarder on the server.
Constructor Details
#initialize(client = nil, name:, forwarder_type:, configuration:, id: nil, enabled: false, forward_smplkit_events: false, environments: nil, description: nil, filter: nil, transform: nil, transform_type: nil, created_at: nil, updated_at: nil, deleted_at: nil, version: nil) ⇒ Forwarder
Returns a new instance of Forwarder.
503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 |
# File 'lib/smplkit/audit/models.rb', line 503 def initialize(client = nil, name:, forwarder_type:, configuration:, id: nil, enabled: false, forward_smplkit_events: false, environments: nil, description: nil, filter: nil, transform: nil, transform_type: nil, created_at: nil, updated_at: nil, deleted_at: nil, version: nil) @client = client @id = id @name = name @forwarder_type = ForwarderType.coerce(forwarder_type) @configuration = configuration # ``enabled`` is server-pinned false; we keep the attribute so reads # round-trip the server value, but enablement is driven by # ``environments`` (see the class docstring). @enabled = enabled @forward_smplkit_events = forward_smplkit_events @environments = environments || {} @description = description @filter = filter @transform = transform @transform_type = TransformType.coerce(transform_type) @created_at = created_at @updated_at = updated_at @deleted_at = deleted_at @version = version end |
Instance Attribute Details
#configuration ⇒ HttpConfiguration
Returns Destination request configuration.
470 471 472 |
# File 'lib/smplkit/audit/models.rb', line 470 def configuration @configuration end |
#created_at ⇒ String?
Returns ISO-8601 timestamp of first persist. nil for an unsaved instance.
492 493 494 |
# File 'lib/smplkit/audit/models.rb', line 492 def created_at @created_at end |
#deleted_at ⇒ String?
Returns Soft-delete timestamp. nil for live forwarders.
498 499 500 |
# File 'lib/smplkit/audit/models.rb', line 498 def deleted_at @deleted_at end |
#description ⇒ String?
Returns Optional free-text description.
473 474 475 |
# File 'lib/smplkit/audit/models.rb', line 473 def description @description end |
#enabled ⇒ Boolean
Returns Read-only. Always false — the base enablement is pinned off. Whether a forwarder actually delivers is decided per environment via #environments; mutating this field has no effect on the server.
448 449 450 |
# File 'lib/smplkit/audit/models.rb', line 448 def enabled @enabled end |
#environments ⇒ Hash{String => ForwarderEnvironment}
Returns Per-environment overrides keyed by environment key (e.g. “production”, “staging”). A forwarder delivers in an environment only when environments[env].enabled is true. Each entry may carry an optional HttpConfiguration override; omit it to inherit the base #configuration. Every referenced environment must exist and be managed for the account.
467 468 469 |
# File 'lib/smplkit/audit/models.rb', line 467 def environments @environments end |
#filter ⇒ Hash?
Returns Optional JSON Logic expression evaluated per event. When set, events that don’t match are recorded as filtered_out deliveries instead of being delivered to the destination.
478 479 480 |
# File 'lib/smplkit/audit/models.rb', line 478 def filter @filter end |
#forward_smplkit_events ⇒ Boolean
Returns When true, this forwarder also receives platform change events that smplkit records about your own resources (flag, configuration, and similar changes). Each such event is delivered through every environment this forwarder is enabled in, using that environment’s resolved configuration. Defaults to false — platform change events are not forwarded unless you opt in. Independent of the per-environment enabled settings, since platform change events are not tied to a deployment environment.
458 459 460 |
# File 'lib/smplkit/audit/models.rb', line 458 def forward_smplkit_events @forward_smplkit_events end |
#forwarder_type ⇒ String
Returns One of Smplkit::Audit::ForwarderType::VALUES.
442 443 444 |
# File 'lib/smplkit/audit/models.rb', line 442 def forwarder_type @forwarder_type end |
#id ⇒ String?
Returns Caller-supplied unique identifier (key) for this forwarder. Unique within an account; immutable for the lifetime of the forwarder. nil only while the object represents an unsaved instance constructed without an id (which #save would then reject).
436 437 438 |
# File 'lib/smplkit/audit/models.rb', line 436 def id @id end |
#name ⇒ String
Returns Display name. Free-form.
439 440 441 |
# File 'lib/smplkit/audit/models.rb', line 439 def name @name end |
#transform ⇒ Object?
Returns Optional template applied to each event before delivery. Free-form — the audit service passes the value verbatim to the engine named by #transform_type. For TransformType::JSONATA a JSONata expression string; nil delivers the event JSON as-is. Must be paired with a non-nil #transform_type.
485 486 487 |
# File 'lib/smplkit/audit/models.rb', line 485 def transform @transform end |
#transform_type ⇒ String?
Returns Engine that evaluates #transform — one of TransformType::VALUES. Required whenever #transform is set.
489 490 491 |
# File 'lib/smplkit/audit/models.rb', line 489 def transform_type @transform_type end |
#updated_at ⇒ String?
Returns ISO-8601 timestamp of the most recent mutation.
495 496 497 |
# File 'lib/smplkit/audit/models.rb', line 495 def updated_at @updated_at end |
#version ⇒ Integer?
Returns Monotonic version counter, bumped on every server-side write.
501 502 503 |
# File 'lib/smplkit/audit/models.rb', line 501 def version @version end |
Class Method Details
.from_resource(resource, client: nil) ⇒ Object
600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 |
# File 'lib/smplkit/audit/models.rb', line 600 def self.from_resource(resource, client: nil) a = resource.attributes environments = (a.environments || {}).each_with_object({}) do |(env_key, env_raw), out| out[env_key.to_s] = ForwarderEnvironment.from_wire(env_raw) end new( client, id: resource.id, name: a.name, description: a.description, forwarder_type: a.forwarder_type, # The base ``enabled`` is server-pinned false; round-trip whatever # the server returned (always false) without assuming a default of # true. enabled: a.enabled.nil? ? false : a.enabled, # ``forward_smplkit_events`` defaults to false; a forwarder persisted # before the field landed reads back as not opted in. forward_smplkit_events: a.forward_smplkit_events.nil? ? false : a.forward_smplkit_events, environments: environments, filter: a.filter.nil? ? nil : Smplkit::Helpers.deep_stringify_keys(a.filter), transform_type: a.transform_type, transform: a.transform, configuration: HttpConfiguration.from_wire(a.configuration), created_at: a.created_at, updated_at: a.updated_at, deleted_at: a.deleted_at, version: a.version ) end |
.validate_transform_pair!(transform, transform_type) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Validate the (transform, transform_type) pair.
Both must be nil or both must be set. When transform_type is TransformType::JSONATA, transform must be a String (the JSONata expression). Other engines accept any value.
587 588 589 590 591 592 593 594 595 596 597 598 |
# File 'lib/smplkit/audit/models.rb', line 587 def self.validate_transform_pair!(transform, transform_type) if transform.nil? != transform_type.nil? raise ArgumentError, "transform and transform_type must be specified together (both nil or both set)" end return if transform.nil? return unless transform_type == TransformType::JSONATA && !transform.is_a?(String) raise ArgumentError, "transform must be a String when transform_type is JSONATA " \ "(got #{transform.class})" end |
Instance Method Details
#_apply(other) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 |
# File 'lib/smplkit/audit/models.rb', line 562 def _apply(other) @id = other.id @name = other.name @forwarder_type = other.forwarder_type @configuration = other.configuration @enabled = other.enabled @forward_smplkit_events = other.forward_smplkit_events @environments = other.environments @description = other.description @filter = other.filter @transform = other.transform @transform_type = other.transform_type @created_at = other.created_at @updated_at = other.updated_at @deleted_at = other.deleted_at @version = other.version end |
#delete ⇒ nil Also known as: delete!
Soft-delete this forwarder on the server.
554 555 556 557 558 |
# File 'lib/smplkit/audit/models.rb', line 554 def delete raise "Forwarder was constructed without a client or id; cannot delete" if @client.nil? || @id.nil? @client.delete(@id) end |
#save ⇒ self Also known as: save!
Create or update this forwarder on the server.
Upsert behavior is driven by #created_at: a forwarder with no created_at is created (POST); otherwise it’s full-replace updated (PUT). After the call, every field is refreshed from the server response (including newly-assigned id, created_at, updated_at, version).
541 542 543 544 545 546 547 548 |
# File 'lib/smplkit/audit/models.rb', line 541 def save raise "Forwarder was constructed without a client; cannot save" if @client.nil? self.class.send(:validate_transform_pair!, @transform, @transform_type) updated = @created_at.nil? ? @client._create_forwarder(self) : @client._update_forwarder(self) _apply(updated) self end |