Class: Harbor::AuditLog

Inherits:
Object
  • Object
show all
Defined in:
lib/harbor/audit_log.rb

Instance Method Summary collapse

Constructor Details

#initialize(db_path = nil) ⇒ AuditLog

Returns a new instance of AuditLog.



9
10
11
12
13
14
15
16
17
# File 'lib/harbor/audit_log.rb', line 9

def initialize(db_path = nil)
  db_path ||= DEFAULT_AUDIT_DB
  FileUtils.mkdir_p(File.dirname(db_path))
  @db = SQLite3::Database.new(db_path)
  @db.execute("PRAGMA journal_mode=WAL")
  @db.execute("PRAGMA busy_timeout=5000")
  @db.results_as_hash = true
  create_table
end

Instance Method Details

#closeObject



50
51
52
# File 'lib/harbor/audit_log.rb', line 50

def close
  @db.close
end

#query(project: nil, limit: 50) ⇒ Object



42
43
44
45
46
47
48
# File 'lib/harbor/audit_log.rb', line 42

def query(project: nil, limit: 50)
  if project
    @db.execute("SELECT * FROM audit_log WHERE project = ? ORDER BY id DESC LIMIT ?", [project, limit])
  else
    @db.execute("SELECT * FROM audit_log ORDER BY id DESC LIMIT ?", [limit])
  end
end

#record(project:, operation:, destination: nil, parameters: nil, initiated_by: "cli", status: "success", output: nil, duration_ms: nil) ⇒ Object



34
35
36
37
38
39
40
# File 'lib/harbor/audit_log.rb', line 34

def record(project:, operation:, destination: nil, parameters: nil, initiated_by: "cli",
           status: "success", output: nil, duration_ms: nil)
  @db.execute(
    "INSERT INTO audit_log (timestamp, project, destination, operation, parameters, initiated_by, status, output, duration_ms) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)",
    [Time.now.utc.iso8601, project, destination, operation, parameters&.to_json, initiated_by, status, truncate_output(output), duration_ms]
  )
end

#record_complete(id, status:, output: nil, duration_ms: nil) ⇒ Object



27
28
29
30
31
32
# File 'lib/harbor/audit_log.rb', line 27

def record_complete(id, status:, output: nil, duration_ms: nil)
  @db.execute(
    "UPDATE audit_log SET status = ?, output = ?, duration_ms = ? WHERE id = ?",
    [status, truncate_output(output), duration_ms, id]
  )
end

#record_start(project:, operation:, destination: nil, parameters: nil, initiated_by: "cli") ⇒ Object



19
20
21
22
23
24
25
# File 'lib/harbor/audit_log.rb', line 19

def record_start(project:, operation:, destination: nil, parameters: nil, initiated_by: "cli")
  @db.execute(
    "INSERT INTO audit_log (timestamp, project, destination, operation, parameters, initiated_by, status) VALUES (?, ?, ?, ?, ?, ?, ?)",
    [Time.now.utc.iso8601, project, destination, operation, parameters&.to_json, initiated_by, "started"]
  )
  @db.last_insert_row_id
end