scheduledtask.go 7.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236
  1. // Copyright 2019 Yunion
  2. //
  3. // Licensed under the Apache License, Version 2.0 (the "License");
  4. // you may not use this file except in compliance with the License.
  5. // You may obtain a copy of the License at
  6. //
  7. // http://www.apache.org/licenses/LICENSE-2.0
  8. //
  9. // Unless required by applicable law or agreed to in writing, software
  10. // distributed under the License is distributed on an "AS IS" BASIS,
  11. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. // See the License for the specific language governing permissions and
  13. // limitations under the License.
  14. package compute
  15. import (
  16. "fmt"
  17. "time"
  18. "yunion.io/x/jsonutils"
  19. "yunion.io/x/pkg/util/printutils"
  20. "yunion.io/x/onecloud/cmd/climc/shell"
  21. apis "yunion.io/x/onecloud/pkg/apis/scheduledtask"
  22. "yunion.io/x/onecloud/pkg/mcclient"
  23. modules "yunion.io/x/onecloud/pkg/mcclient/modules/scheduledtask"
  24. "yunion.io/x/onecloud/pkg/mcclient/options"
  25. )
  26. var (
  27. R = shell.R
  28. printList = printutils.PrintJSONList
  29. printObject = printutils.PrintJSONObject
  30. )
  31. func init() {
  32. type ScheduledTaskListOptions struct {
  33. options.BaseListOptions
  34. ScheduledType string `help:"scheduled type" choices:"timing|cycle"`
  35. ResourceType string `help:"resource type"`
  36. Operation string `help:"operation"`
  37. UtcOffset int `help:"utc offset"`
  38. }
  39. R(&ScheduledTaskListOptions{}, "scheduledtask-list", "list Scheduled Task", func(s *mcclient.ClientSession, args *ScheduledTaskListOptions) error {
  40. params, err := options.ListStructToParams(args)
  41. tasks, err := modules.ScheduledTask.List(s, params)
  42. if err != nil {
  43. return err
  44. }
  45. printList(tasks, modules.ScheduledTask.GetColumns(s))
  46. return nil
  47. })
  48. type ScheduledTaskShowOptions struct {
  49. ID string `help:"ScheduledTask ID or Name"`
  50. }
  51. R(&ScheduledTaskShowOptions{}, "scheudled-task-show", "Show Scheduled Task", func(s *mcclient.ClientSession,
  52. args *ScheduledTaskShowOptions) error {
  53. params := jsonutils.NewDict()
  54. params.Set("details", jsonutils.JSONTrue)
  55. task, err := modules.ScheduledTask.Get(s, args.ID, params)
  56. if err != nil {
  57. return err
  58. }
  59. printObject(task)
  60. return nil
  61. })
  62. type Timer struct {
  63. TimingExecTime string `help:"Exectime for 'timing' type trigger, format:'2006-01-02 15:04:05'" json:"exec_time"`
  64. }
  65. type CycleTimer struct {
  66. CycleCycleType string `help:"Cycle type for cycle timer" json:"cycle_type" choices:"hour|day|week|month"`
  67. CycleMinute int `help:"Minute of cycle timer" json:"minute"`
  68. CycleHour int `help:"Hour of cycle timer" json:"hour"`
  69. CycleCycleNum int `help:"Cycle count of cycle timer" json:"cycle_num"`
  70. CycleWeekdays []int `help:"Weekdays for cycle timer" json:"weekdays"`
  71. CycleMonthDays []int `help:"Month days for cycle timer" json:"month_days"`
  72. CycleStartTime string `help:"Start time for cycle timer, format:'2006-01-02 15:04:05'" json:"start_time"`
  73. CycleEndTime string `help:"End time for cycle timer, format:'2006-01-02 15:04:05'" json:"end_time"`
  74. }
  75. type ScheduledTaskCreateOptions struct {
  76. NAME string `help:"ScheduledTask Name" json:"name"`
  77. ScheduledType string `help:"Scheudled Type" choices:"timing|cycle" json:"scheduled_type"`
  78. Timer
  79. CycleTimer
  80. ResourceType string `help:"resource type"`
  81. Operation string `help:"operation"`
  82. LabelType string `help:"label type"`
  83. Labels []string `help:"labels"`
  84. }
  85. R(&ScheduledTaskCreateOptions{}, "scheduledtask-create", "Create Scheduled Task", func(s *mcclient.ClientSession, args *ScheduledTaskCreateOptions) error {
  86. formatStr := "2006-01-02 15:04:05"
  87. var exectime, starttime, endtime time.Time
  88. var err error
  89. if len(args.TimingExecTime) > 0 {
  90. exectime, err = time.Parse(formatStr, args.TimingExecTime)
  91. if err != nil {
  92. return fmt.Errorf("invalid time format for 'exec_time'")
  93. }
  94. }
  95. if len(args.CycleStartTime) > 0 {
  96. starttime, err = time.Parse(formatStr, args.CycleStartTime)
  97. if err != nil {
  98. return fmt.Errorf("invalid time format for 'start_time'")
  99. }
  100. }
  101. if len(args.CycleEndTime) > 0 {
  102. endtime, err = time.Parse(formatStr, args.CycleEndTime)
  103. if err != nil {
  104. return fmt.Errorf("invalid time format for 'end_time'")
  105. }
  106. }
  107. stCreateInput := apis.ScheduledTaskCreateInput{
  108. ScheduledType: args.ScheduledType,
  109. Timer: apis.TimerCreateInput{
  110. ExecTime: exectime,
  111. },
  112. CycleTimer: apis.CycleTimerCreateInput{
  113. CycleType: args.CycleCycleType,
  114. CycleNum: args.CycleCycleNum,
  115. Minute: args.CycleMinute,
  116. Hour: args.CycleHour,
  117. WeekDays: args.CycleWeekdays,
  118. MonthDays: args.CycleMonthDays,
  119. StartTime: starttime,
  120. EndTime: endtime,
  121. },
  122. ResourceType: args.ResourceType,
  123. Operation: args.Operation,
  124. LabelType: args.LabelType,
  125. Labels: args.Labels,
  126. }
  127. stCreateInput.Name = args.NAME
  128. ret, err := modules.ScheduledTask.Create(s, jsonutils.Marshal(stCreateInput))
  129. if err != nil {
  130. return err
  131. }
  132. printObject(ret)
  133. return nil
  134. })
  135. type ScheduledTaskEnableOptions struct {
  136. ID string `help:"ScheduledTask ID or Name"`
  137. }
  138. R(&ScheduledTaskEnableOptions{}, "scheduledtask-enable", "Enable ScheduledTask", func(s *mcclient.ClientSession,
  139. args *ScheduledTaskEnableOptions) error {
  140. ret, err := modules.ScheduledTask.PerformAction(s, args.ID, "enable", jsonutils.NewDict())
  141. if err != nil {
  142. return err
  143. }
  144. printObject(ret)
  145. return nil
  146. })
  147. R(&ScheduledTaskEnableOptions{}, "scheduledtask-disable", "Disable ScheduledTask",
  148. func(s *mcclient.ClientSession, args *ScheduledTaskEnableOptions) error {
  149. ret, err := modules.ScheduledTask.PerformAction(s, args.ID, "disable", jsonutils.NewDict())
  150. if err != nil {
  151. return err
  152. }
  153. printObject(ret)
  154. return nil
  155. },
  156. )
  157. type ScheduledTaskSetLabelsOptions struct {
  158. ID string `help:"ScheduledTask ID or Name"`
  159. Labels []string `help:"Label"`
  160. }
  161. R(&ScheduledTaskSetLabelsOptions{}, "scheduledtask-setlabels", "Trigger ScheduledTask's action",
  162. func(s *mcclient.ClientSession, args *ScheduledTaskSetLabelsOptions) error {
  163. params := jsonutils.NewDict()
  164. params.Set("labels", jsonutils.Marshal(args.Labels))
  165. ret, err := modules.ScheduledTask.PerformAction(s, args.ID, "set-labels", params)
  166. if err != nil {
  167. return err
  168. }
  169. printObject(ret)
  170. return nil
  171. },
  172. )
  173. type ScheduledTaskTriggerOptions struct {
  174. ID string `help:"ScheduledTask ID or Name"`
  175. }
  176. R(&ScheduledTaskTriggerOptions{}, "scheduledtask-trigger", "Trigger ScheduledTask",
  177. func(s *mcclient.ClientSession, args *ScheduledTaskTriggerOptions) error {
  178. params := jsonutils.NewDict()
  179. ret, err := modules.ScheduledTask.PerformAction(s, args.ID, "trigger", params)
  180. if err != nil {
  181. return err
  182. }
  183. printObject(ret)
  184. return nil
  185. },
  186. )
  187. type ScheduledTaskDeleteOptions struct {
  188. ID string `help:"ScheduledTask ID or Name"`
  189. }
  190. R(&ScheduledTaskDeleteOptions{}, "scheduledtask-delete", "Delete ScheduledTask",
  191. func(s *mcclient.ClientSession, args *ScheduledTaskDeleteOptions) error {
  192. ret, err := modules.ScheduledTask.Delete(s, args.ID, jsonutils.NewDict())
  193. if err != nil {
  194. return err
  195. }
  196. printObject(ret)
  197. return nil
  198. },
  199. )
  200. type ScheduledTaskAvtivityListOptions struct {
  201. options.BaseListOptions
  202. ScheduledTask string `help:"Scheduled Task" json:"scheduled_task"`
  203. }
  204. R(&ScheduledTaskAvtivityListOptions{}, "scheduledtask-activity-list", "List Scheduled Task Activity",
  205. func(s *mcclient.ClientSession, args *ScheduledTaskAvtivityListOptions) error {
  206. params, err := options.ListStructToParams(args)
  207. if err != nil {
  208. return err
  209. }
  210. list, err := modules.ScheduledTaskActivity.List(s, params)
  211. if err != nil {
  212. return err
  213. }
  214. printList(list, modules.ScheduledTaskActivity.GetColumns(s))
  215. return nil
  216. },
  217. )
  218. }