From a766dd09aca339e286bacd27f98bccb4e6b3eaed Mon Sep 17 00:00:00 2001 From: Nanaloveyuki Date: Wed, 20 May 2026 09:12:02 +0800 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Extract=20runtime=20file?= =?UTF-8?q?=20state=20helpers?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/runtime_logger.mbt | 78 +++------------------------- src/utils/runtime_file_state.mbt | 89 ++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 71 deletions(-) create mode 100644 src/utils/runtime_file_state.mbt diff --git a/src/runtime_logger.mbt b/src/runtime_logger.mbt index 55fbca3..8ab213b 100644 --- a/src/runtime_logger.mbt +++ b/src/runtime_logger.mbt @@ -9,94 +9,30 @@ pub(all) enum RuntimeSink { QueuedFile(QueuedSink[FileSink]) } -pub struct RuntimeFileState { - file : FileSinkState - queued : Bool - pending_count : Int - dropped_count : Int -} - -pub fn RuntimeFileState::new( - file : FileSinkState, - queued~ : Bool = false, - pending_count~ : Int = 0, - dropped_count~ : Int = 0, -) -> RuntimeFileState { - { file, queued, pending_count, dropped_count } -} - -fn file_sink_policy_to_json_value(policy : FileSinkPolicy) -> @json_parser.JsonValue { - let obj : Map[String, @json_parser.JsonValue] = { - "append": @json_parser.JsonValue::Bool(policy.append), - "auto_flush": @json_parser.JsonValue::Bool(policy.auto_flush), - } - match policy.rotation { - None => obj["rotation"] = @json_parser.JsonValue::Null - Some(rotation) => obj["rotation"] = file_rotation_config_to_json(rotation) - } - @json_parser.JsonValue::Object(obj) -} +pub type RuntimeFileState = @utils.RuntimeFileState pub fn file_sink_policy_to_json(policy : FileSinkPolicy) -> @json_parser.JsonValue { - file_sink_policy_to_json_value(policy) + @utils.file_sink_policy_to_json(policy) } pub fn stringify_file_sink_policy(policy : FileSinkPolicy, pretty~ : Bool = false) -> String { - let value = file_sink_policy_to_json_value(policy) - if pretty { - @json_parser.stringify_pretty(value, 2) - } else { - @json_parser.stringify(value) - } -} - -fn file_sink_state_to_json_value(state : FileSinkState) -> @json_parser.JsonValue { - let obj : Map[String, @json_parser.JsonValue] = { - "path": @json_parser.JsonValue::String(state.path), - "available": @json_parser.JsonValue::Bool(state.available), - "append": @json_parser.JsonValue::Bool(state.append), - "auto_flush": @json_parser.JsonValue::Bool(state.auto_flush), - "open_failures": @json_parser.JsonValue::Number(state.open_failures.to_double()), - "write_failures": @json_parser.JsonValue::Number(state.write_failures.to_double()), - "flush_failures": @json_parser.JsonValue::Number(state.flush_failures.to_double()), - "rotation_failures": @json_parser.JsonValue::Number(state.rotation_failures.to_double()), - } - match state.rotation { - None => obj["rotation"] = @json_parser.JsonValue::Null - Some(rotation) => obj["rotation"] = file_rotation_config_to_json(rotation) - } - @json_parser.JsonValue::Object(obj) + @utils.stringify_file_sink_policy(policy, pretty=pretty) } pub fn file_sink_state_to_json(state : FileSinkState) -> @json_parser.JsonValue { - file_sink_state_to_json_value(state) + @utils.file_sink_state_to_json(state) } pub fn stringify_file_sink_state(state : FileSinkState, pretty~ : Bool = false) -> String { - let value = file_sink_state_to_json_value(state) - if pretty { - @json_parser.stringify_pretty(value, 2) - } else { - @json_parser.stringify(value) - } + @utils.stringify_file_sink_state(state, pretty=pretty) } pub fn runtime_file_state_to_json(state : RuntimeFileState) -> @json_parser.JsonValue { - @json_parser.JsonValue::Object({ - "file": file_sink_state_to_json_value(state.file), - "queued": @json_parser.JsonValue::Bool(state.queued), - "pending_count": @json_parser.JsonValue::Number(state.pending_count.to_double()), - "dropped_count": @json_parser.JsonValue::Number(state.dropped_count.to_double()), - }) + @utils.runtime_file_state_to_json(state) } pub fn stringify_runtime_file_state(state : RuntimeFileState, pretty~ : Bool = false) -> String { - let value = runtime_file_state_to_json(state) - if pretty { - @json_parser.stringify_pretty(value, 2) - } else { - @json_parser.stringify(value) - } + @utils.stringify_runtime_file_state(state, pretty=pretty) } pub impl Sink for RuntimeSink with write(self, rec) { diff --git a/src/utils/runtime_file_state.mbt b/src/utils/runtime_file_state.mbt new file mode 100644 index 0000000..9b9047e --- /dev/null +++ b/src/utils/runtime_file_state.mbt @@ -0,0 +1,89 @@ +pub struct RuntimeFileState { + file : FileSinkState + queued : Bool + pending_count : Int + dropped_count : Int +} + +pub fn RuntimeFileState::new( + file : FileSinkState, + queued~ : Bool = false, + pending_count~ : Int = 0, + dropped_count~ : Int = 0, +) -> RuntimeFileState { + { file, queued, pending_count, dropped_count } +} + +fn file_sink_policy_to_json_value(policy : FileSinkPolicy) -> @json_parser.JsonValue { + let obj : Map[String, @json_parser.JsonValue] = { + "append": @json_parser.JsonValue::Bool(policy.append), + "auto_flush": @json_parser.JsonValue::Bool(policy.auto_flush), + } + match policy.rotation { + None => obj["rotation"] = @json_parser.JsonValue::Null + Some(rotation) => obj["rotation"] = file_rotation_config_to_json(rotation) + } + @json_parser.JsonValue::Object(obj) +} + +pub fn file_sink_policy_to_json(policy : FileSinkPolicy) -> @json_parser.JsonValue { + file_sink_policy_to_json_value(policy) +} + +pub fn stringify_file_sink_policy(policy : FileSinkPolicy, pretty~ : Bool = false) -> String { + let value = file_sink_policy_to_json_value(policy) + if pretty { + @json_parser.stringify_pretty(value, 2) + } else { + @json_parser.stringify(value) + } +} + +fn file_sink_state_to_json_value(state : FileSinkState) -> @json_parser.JsonValue { + let obj : Map[String, @json_parser.JsonValue] = { + "path": @json_parser.JsonValue::String(state.path), + "available": @json_parser.JsonValue::Bool(state.available), + "append": @json_parser.JsonValue::Bool(state.append), + "auto_flush": @json_parser.JsonValue::Bool(state.auto_flush), + "open_failures": @json_parser.JsonValue::Number(state.open_failures.to_double()), + "write_failures": @json_parser.JsonValue::Number(state.write_failures.to_double()), + "flush_failures": @json_parser.JsonValue::Number(state.flush_failures.to_double()), + "rotation_failures": @json_parser.JsonValue::Number(state.rotation_failures.to_double()), + } + match state.rotation { + None => obj["rotation"] = @json_parser.JsonValue::Null + Some(rotation) => obj["rotation"] = file_rotation_config_to_json(rotation) + } + @json_parser.JsonValue::Object(obj) +} + +pub fn file_sink_state_to_json(state : FileSinkState) -> @json_parser.JsonValue { + file_sink_state_to_json_value(state) +} + +pub fn stringify_file_sink_state(state : FileSinkState, pretty~ : Bool = false) -> String { + let value = file_sink_state_to_json_value(state) + if pretty { + @json_parser.stringify_pretty(value, 2) + } else { + @json_parser.stringify(value) + } +} + +pub fn runtime_file_state_to_json(state : RuntimeFileState) -> @json_parser.JsonValue { + @json_parser.JsonValue::Object({ + "file": file_sink_state_to_json_value(state.file), + "queued": @json_parser.JsonValue::Bool(state.queued), + "pending_count": @json_parser.JsonValue::Number(state.pending_count.to_double()), + "dropped_count": @json_parser.JsonValue::Number(state.dropped_count.to_double()), + }) +} + +pub fn stringify_runtime_file_state(state : RuntimeFileState, pretty~ : Bool = false) -> String { + let value = runtime_file_state_to_json(state) + if pretty { + @json_parser.stringify_pretty(value, 2) + } else { + @json_parser.stringify(value) + } +}