File tree Expand file tree Collapse file tree 5 files changed +86
-0
lines changed
Expand file tree Collapse file tree 5 files changed +86
-0
lines changed Original file line number Diff line number Diff line change @@ -8915,6 +8915,40 @@ module Message = struct
89158915 ~params: [(Set (Ref _message), " messages" , " Messages to destroy" )]
89168916 ~allowed_roles: _R_POOL_OP ()
89178917
8918+ let destroy_all =
8919+ call ~name: " destroy_all" ~lifecycle: []
8920+ ~versioned_params:
8921+ [
8922+ {
8923+ param_type= DateTime
8924+ ; param_name= " before"
8925+ ; param_doc=
8926+ " Cutoff time for destroyed messages - only destroy messages with \
8927+ an earlier timestamp. When no timezone is specified UTC is \
8928+ assumed."
8929+ ; param_release= numbered_release " 25.39.0-next"
8930+ ; param_default= Some (VDateTime (Date. of_ptime Ptime. max))
8931+ }
8932+ ; {
8933+ param_type= DateTime
8934+ ; param_name= " after"
8935+ ; param_doc=
8936+ " Cutoff time for destroyed messages - only destroy messages with \
8937+ a later timestamp. When no timezone is specified UTC is \
8938+ assumed."
8939+ ; param_release= numbered_release " 25.39.0-next"
8940+ ; param_default= Some (VDateTime Date. epoch)
8941+ }
8942+ ; {
8943+ param_type= Int
8944+ ; param_name= " priority"
8945+ ; param_doc= " Priority of messages to be destroyed"
8946+ ; param_release= numbered_release " 25.39.0-next"
8947+ ; param_default= Some (VInt (- 1L ))
8948+ }
8949+ ]
8950+ ~allowed_roles: _R_POOL_OP ()
8951+
89188952 let get_all =
89198953 call ~name: " get_all"
89208954 ~lifecycle: [(Published , rel_orlando, " " )]
@@ -9002,6 +9036,7 @@ module Message = struct
90029036 create
90039037 ; destroy
90049038 ; destroy_many
9039+ ; destroy_all
90059040 ; get
90069041 ; get_all
90079042 ; get_since
Original file line number Diff line number Diff line change @@ -223,6 +223,8 @@ let prototyped_of_message = function
223223 Some " 24.14.0"
224224 | "PCI" , "disable_dom0_access" ->
225225 Some " 24.14.0"
226+ | "message" , "destroy_all" ->
227+ Some " 25.39.0-next"
226228 | "message" , "destroy_many" ->
227229 Some " 22.19.0"
228230 | "VTPM" , "set_contents" ->
Original file line number Diff line number Diff line change @@ -128,6 +128,15 @@ let rec cmdtable_data : (string * cmd_spec) list =
128128 ; flags= []
129129 }
130130 )
131+ ; ( " message-destroy-all"
132+ , {
133+ reqd= []
134+ ; optn= [" before" ; " after" ; " priority" ]
135+ ; help= " Destroy all existing messages matching the given conditions."
136+ ; implementation= No_fd Cli_operations. message_destroy_all
137+ ; flags= []
138+ }
139+ )
131140 ; ( " pool-enable-binary-storage"
132141 , {
133142 reqd= []
Original file line number Diff line number Diff line change @@ -1424,6 +1424,28 @@ let message_destroy (_ : printer) rpc session_id params =
14241424 in
14251425 Client.Message. destroy_many ~rpc ~session_id ~messages
14261426
1427+ let message_destroy_all (_ : printer ) rpc session_id params =
1428+ let fail msg = raise (Cli_util. Cli_failure msg) in
1429+ let before_str = List. assoc_opt " before" params in
1430+ let after_str = List. assoc_opt " after" params in
1431+ let priority_str = List. assoc_opt " priority" params in
1432+ let before =
1433+ try
1434+ Option. map Date. of_iso8601 before_str
1435+ |> Option. value ~default: (Date. of_ptime Ptime. max)
1436+ (* Default value is Ptime.max - everything is before it *)
1437+ with _ -> fail " invalid timestamp format for 'before' (expected RFC3339)"
1438+ in
1439+ let after =
1440+ try Option. map Date. of_iso8601 after_str |> Option. value ~default: Date. epoch
1441+ with _ -> fail " Invalid timestamp format for 'after' (expected RFC3339)"
1442+ in
1443+ let priority =
1444+ try Option. map Int64. of_string priority_str |> Option. value ~default: (- 1L )
1445+ with _ -> fail " Invalid priority format (expected integer)"
1446+ in
1447+ Client.Message. destroy_all ~rpc ~session_id ~before ~after ~priority
1448+
14271449(* Pool operations *)
14281450
14291451let get_pool_with_default rpc session_id params key =
Original file line number Diff line number Diff line change @@ -730,6 +730,24 @@ let get_record ~__context ~self =
730730
731731let get_all_records ~__context = get_real message_dir (fun _ -> true ) 0.0
732732
733+ let destroy_all ~__context ~before ~after ~priority =
734+ let filter_timestamp ts =
735+ Date. is_earlier ts ~than: before && Date. is_later ts ~than: after
736+ in
737+ let priority_filter =
738+ (* Default priority is -1, which stands for any priority *)
739+ if priority = - 1L then fun _ -> true else fun p -> p = priority
740+ in
741+ let message_filter msg =
742+ filter_timestamp msg.API. message_timestamp
743+ && priority_filter msg.API. message_priority
744+ in
745+ let messages =
746+ get_real_inner message_dir message_filter (fun _ -> true )
747+ |> List. map (fun (_ , msg , _ ) -> msg)
748+ in
749+ destroy_many ~__context ~messages
750+
733751let get_all_records_where ~__context ~expr =
734752 let open Xapi_database in
735753 let expr = Db_filter. expr_of_string expr in
You can’t perform that action at this time.
0 commit comments