2019-08-05 17:51:02 +12:00
< div class = "cover margin-bottom-large" >
2020-02-28 06:44:03 +13:00
< h1 class = "zone xl margin-bottom-large" >
< a data-ls-attrs = "href=/console/home?project={{router.params.project}}" class = "back text-size-small" > < i class = "icon-left-open" > < / i > Home< / a >
< br / >
< span > Tasks< / span >
2019-08-05 17:51:02 +12:00
< / h1 >
< / div >
2019-08-08 17:09:49 +12:00
< div class = "zone xl"
data-service="projects.listTasks"
data-scope="console"
2020-01-31 09:58:49 +13:00
data-event="load,projects.createTask,projects.updateTask,projects.deleteTask"
2019-08-08 17:09:49 +12:00
data-name="console-tasks"
data-param-project-id="{{router.params.project}}"
data-success="trigger"
2020-01-31 09:58:49 +13:00
data-success-param-trigger-events="projects.listTasks">
2019-08-05 16:47:52 +12:00
2020-02-24 08:27:02 +13:00
< div data-ls-if = "0 === {{console-tasks.length}} || undefined === {{console-tasks.length}}" class = "box margin-top margin-bottom" >
2020-02-25 02:47:35 +13:00
< h3 class = "margin-bottom-small text-bold" > No Tasks Found< / h3 >
2019-08-05 16:47:52 +12:00
< p class = "margin-bottom-no" > You haven't created any tasks for your project yet.< / p >
< / div >
2020-02-24 08:27:02 +13:00
< div class = "box y-scroll margin-bottom" data-ls-if = "0 != {{console-tasks.length}}" >
2020-02-27 10:54:12 +13:00
< table class = "full vertical" >
2019-08-05 16:47:52 +12:00
< thead >
< tr >
2020-03-03 18:07:23 +13:00
< th > Name< / th >
< th width = "140" > Status< / th >
< th width = "180" > Schedule< / th >
< th width = "140" > < / th >
2019-08-05 16:47:52 +12:00
< / tr >
< / thead >
< tbody data-ls-loop = "console-tasks" data-ls-as = "task" class = "list" >
< tr >
< td >
< div class = "margin-bottom-tiny text-one-liner" >
2020-02-28 06:44:03 +13:00
< span data-ls-attrs = "title={{task.name}} ({{task.failures}} errors)" data-ls-bind = "{{task.name}}" > < / span >
2019-08-05 16:47:52 +12:00
2020-02-24 08:27:02 +13:00
< span data-ls-if = "0 === {{task.security}}" >
2019-08-05 16:47:52 +12:00
< span class = "text-danger" > SSL/TLS Disabled< / span >
< / span >
2020-02-24 08:27:02 +13:00
< span data-ls-if = "0 !== {{task.failures}}" >
2019-08-05 16:47:52 +12:00
< span class = "text-danger" data-ls-bind = "({{task.failures}} errors)" > < / span >
< / span >
< / div >
2020-05-10 10:12:00 +12:00
< a data-ls-attrs = "href={{task.httpUrl}}" data-ls-bind = "{{task.httpUrl}}" target = "_blank" class = "text-one-liner text-size-small" > < / a >
2019-08-05 16:47:52 +12:00
< / td >
2020-02-27 10:54:12 +13:00
< td data-title = "" style = "vertical-align: middle" >
2020-02-24 08:27:02 +13:00
< span data-ls-if = "'play' === {{task.status}}" >
2019-08-05 16:47:52 +12:00
< span class = "tag green" > < i class = "icon-play" > < / i > Running < / span >
< / span >
2020-02-24 08:27:02 +13:00
< span data-ls-if = "'play' !== {{task.status}}" >
2019-08-05 16:47:52 +12:00
< span class = "tag red" > < i class = "icon-pause" > < / i > Paused < / span >
< / span >
< / td >
2020-03-03 18:07:23 +13:00
< td data-title = "" style = "vertical-align: middle" class = "text-size-small text-fade" >
< span data-ls-bind = "Next: {{task.next|date-time}}" > < / span >
< br / >
2020-02-27 10:54:12 +13:00
< span data-ls-if = "undefined !== {{task.previous}}" >
2020-03-03 18:07:23 +13:00
< span data-ls-bind = "Prev: {{task.previous|date-time}}" > < / span >
2019-08-05 16:47:52 +12:00
2020-05-10 10:12:00 +12:00
<!-- <span data - ls - if="undefined !== {{task.delay}} && 59 < {{task.delay}}" class="text - danger margin - top - tiny">
2019-08-24 07:07:17 +12:00
< small data-ls-bind = "({{task.delay|ms2hum}} Delay)" > < / small >
2020-05-10 10:12:00 +12:00
< / span > -->
2020-02-27 10:54:12 +13:00
< / span >
2020-05-01 04:35:39 +12:00
< small data-ls-if = "undefined === {{task.previous}}" class = "text-size-small" >
2019-08-05 16:47:52 +12:00
None.
2019-08-24 07:07:17 +12:00
< / small >
2019-08-05 16:47:52 +12:00
< / td >
2020-02-28 06:44:03 +13:00
< td data-title = "" >
2020-05-01 04:35:39 +12:00
< div data-ui-modal class = "modal box sticky-footer close" data-button-alias = "none" data-open-event = "task-update-{{task.$id}}" >
2019-08-05 16:47:52 +12:00
< button type = "button" class = "close pull-end" data-ui-modal-close = "" > < i class = "icon-cancel" > < / i > < / button >
< h1 > Update Task< / h1 >
2019-08-08 17:09:49 +12:00
< form
2020-02-04 19:28:41 +13:00
data-analytics-event="submit"
data-analytics-category="console"
data-analytics-label="Update Project Task"
2019-08-08 17:09:49 +12:00
data-service="projects.updateTask"
data-scope="console"
data-event="submit"
data-success="alert,trigger"
data-success-param-alert-text="Updated task successfully"
2020-02-24 19:59:10 +13:00
data-success-param-trigger-events="projects.updateTask"
2019-08-08 17:09:49 +12:00
data-failure="alert"
2019-08-09 01:43:24 +12:00
data-failure-param-alert-text="Failed to update task"
data-failure-param-alert-classname="error">
2019-08-05 16:47:52 +12:00
2019-08-24 07:07:17 +12:00
< input type = "hidden" name = "projectId" data-ls-bind = "{{router.params.project}}" / >
2020-02-17 20:16:11 +13:00
< input type = "hidden" name = "taskId" data-ls-bind = "{{task.$id}}" / >
2019-08-05 16:47:52 +12:00
2020-02-17 20:16:11 +13:00
< label data-ls-attrs = "for=name-{{task.$id}}" > Name< / label >
< input type = "text" class = "full-width" data-ls-attrs = "id=name-{{task.$id}}" name = "name" required autocomplete = "off" data-ls-bind = "{{task.name}}" / >
2019-08-05 16:47:52 +12:00
2020-02-17 20:16:11 +13:00
< label data-ls-attrs = "for=status-{{task.$id}}" class = "margin-bottom" > Status
2019-08-05 16:47:52 +12:00
< div class = "margin-top-small" >
2020-05-01 04:35:39 +12:00
< input name = "status" type = "radio" checked = "checked" required data-ls-bind = "{{task.status}}" value = "play" / > < span > Play< / span >
2020-05-10 10:12:00 +12:00
< input name = "status" type = "radio" required data-ls-bind = "{{task.status}}" value = "pause" / > < span > Pause< / span >
2019-08-05 16:47:52 +12:00
< / div >
< / label >
2020-02-17 20:16:11 +13:00
< label data-ls-attrs = "for=schedule-{{task.$id}}" > Schedule (CRON Syntax)< / label >
< input type = "text" class = "full-width" data-ls-attrs = "id=schedule-{{task.$id}}" name = "schedule" required autocomplete = "off" data-ls-bind = "{{task.schedule}}" placeholder = "* * * * *" / >
2019-08-05 16:47:52 +12:00
2020-02-25 01:56:57 +13:00
< div class = "row responsive thin" >
2019-08-05 16:47:52 +12:00
< div class = "col span-4" >
2020-02-17 20:16:11 +13:00
< label data-ls-attrs = "for=httpMethod-{{task.$id}}" > HTTP Method< / label >
< select data-ls-attrs = "id=httpMethod-{{task.$id}}" name = "httpMethod" required data-ls-bind = "{{task.httpMethod}}" >
2019-08-05 16:47:52 +12:00
< option value = "POST" > POST< / option >
< option value = "GET" > GET< / option >
< option value = "PUT" > PUT< / option >
< option value = "PATCH" > PATCH< / option >
< option value = "DELETE" > DELETE< / option >
< option value = "CONNECT" > CONNECT< / option >
< option value = "HEAD" > HEAD< / option >
< option value = "TRACE" > TRACE< / option >
< option value = "OPTIONS" > OPTIONS< / option >
< / select >
< / div >
< div class = "col span-8" >
2020-02-17 20:16:11 +13:00
< label data-ls-attrs = "for=httpUrl-{{task.$id}}" > HTTP URL< / label >
< input type = "url" class = "full-width" data-ls-attrs = "id=httpUrl-{{task.$id}}" name = "httpUrl" required autocomplete = "off" placeholder = "https://example.com/callback" data-ls-bind = "{{task.httpUrl}}" / >
2019-08-05 16:47:52 +12:00
< / div >
< / div >
2019-08-09 18:28:16 +12:00
< div class = "margin-bottom toggle" data-ls-ui-open >
< i class = "icon-plus pull-end margin-top-tiny" > < / i >
< i class = "icon-minus pull-end margin-top-tiny" > < / i >
< h2 class = "margin-bottom" >
Advanced Options
2019-08-24 07:07:17 +12:00
< small class = "text-size-small" > (optional)< / small >
2019-08-09 18:28:16 +12:00
< / h2 >
2020-02-05 10:00:34 +13:00
< label for = "httpHeaders" class = "text-bold" > HTTP Headers< / label >
2019-08-26 07:30:06 +12:00
< input type = "hidden" id = "httpHeadersInit" name = "httpHeaders" data-cast-to = "array-empty" >
2019-08-09 18:28:16 +12:00
< div class = "margin-bottom-small" >
< div data-ls-loop = "task.httpHeaders" data-ls-as = "header" style = "overflow: hidden" >
< div class = "margin-bottom-small" >
< div data-forms-remove class = "row thin" >
< div class = "col span-10" >
< input type = "hidden" name = "httpHeaders" data-forms-headers data-ls-bind = "{{header}}" data-cast-to = "array" / >
< / div >
< div class = "col span-2" >
< button type = "button" data-remove class = "reverse danger round pull-end" > < i class = "icon-cancel" > < / i > < / button >
< / div >
2019-08-05 16:47:52 +12:00
< / div >
< / div >
< / div >
2019-08-09 18:28:16 +12:00
< div data-forms-clone = "" data-label = "Add Header" data-first = "0" >
< div class = "" >
< div data-forms-remove class = "row thin margin-bottom-small" >
< div class = "col span-10" >
< input type = "hidden" name = "httpHeaders" data-forms-headers data-cast-to = "array" / >
< / div >
< div class = "col span-2" >
< button type = "button" data-remove class = "reverse danger round pull-end" > < i class = "icon-cancel" > < / i > < / button >
< / div >
2019-08-05 16:47:52 +12:00
< / div >
< / div >
< / div >
< / div >
2020-02-17 20:16:11 +13:00
< label data-ls-attrs = "for=security-{{task.$id}}" class = "margin-bottom" >
2020-02-05 10:00:34 +13:00
< div class = "margin-bottom-small text-bold" > SSL / TLS (Certificate verification)< / div >
2019-08-24 07:07:17 +12:00
2019-08-09 18:28:16 +12:00
< input name = "security" type = "radio" required data-ls-bind = "{{task.security}}" value = "1" / > < span > Enabled< / span >
< input name = "security" type = "radio" required data-ls-bind = "{{task.security}}" value = "0" / > < span > Disabled< / span >
< / label >
2019-08-05 16:47:52 +12:00
2020-02-05 10:00:34 +13:00
< p class = "margin-bottom text-size-small text-fade" > < span class = "text-red" > Warning< / span > : Untrusted or self-signed certificates may not be secure.
2019-08-09 18:28:16 +12:00
< a href = "https://en.wikipedia.org/wiki/Self-signed_certificate" target = "_blank" rel = "noopener" > Learn more< i class = "icon-link-ext" > < / i > < / a >
< / p >
2019-08-05 16:47:52 +12:00
2020-02-05 10:00:34 +13:00
< label class = "text-bold" > HTTP Authentication < span class = "tooltip" data-tooltip = "Use to secure your endpoint from untrusted sources" > < i class = "icon-question" > < / i > < / span > < small > (optional)< / small > < / label >
2019-08-05 16:47:52 +12:00
2020-02-25 01:56:57 +13:00
< div class = "row responsive thin" >
< div class = "col span-6 margin-bottom" >
2020-02-17 20:16:11 +13:00
< label data-ls-attrs = "for=httpUser-{{task.$id}}" > User< / label >
< input type = "text" class = "full-width margin-bottom-no" data-ls-attrs = "id=httpUser-{{task.$id}}" name = "httpUser" autocomplete = "off" data-ls-bind = "{{task.httpUser}}" / >
2019-08-09 18:28:16 +12:00
< / div >
2020-02-25 01:56:57 +13:00
< div class = "col span-6 margin-bottom" >
2020-02-17 20:16:11 +13:00
< label data-ls-attrs = "for=httpPass-{{task.$id}}" > Password< / label >
< input type = "password" class = "full-width margin-bottom-no" data-ls-attrs = "id=httpPass-{{task.$id}}" name = "httpPass" autocomplete = "off" data-ls-bind = "{{task.httpPass}}" / >
2019-08-09 18:28:16 +12:00
< / div >
2019-08-05 16:47:52 +12:00
< / div >
< / div >
2020-05-01 04:35:39 +12:00
< footer >
< button type = "submit" > Update< / button > < button data-ui-modal-close = "" type = "button" class = "reverse" > Cancel< / button >
< / footer >
2019-08-05 16:47:52 +12:00
< / form >
< / div >
2020-02-28 06:44:03 +13:00
< form
data-analytics-event="submit"
data-analytics-category="console"
data-analytics-label="Delete Project Task"
data-service="projects.deleteTask"
data-scope="console"
data-event="task-delete-{{task.$id}}"
data-confirm="Are you sure you want to delete this task?"
data-success="alert,trigger"
data-success-param-alert-text="Deleted task successfully"
data-success-param-trigger-events="projects.deleteTask"
data-failure="alert"
data-failure-param-alert-text="Failed to delete task"
data-failure-param-alert-classname="error">
< input type = "hidden" name = "projectId" data-ls-bind = "{{router.params.project}}" / >
< input type = "hidden" name = "taskId" data-ls-bind = "{{task.$id}}" / >
< / form >
2020-03-03 18:07:23 +13:00
< button class = "pull-end margin-start round desktops-only" data-ls-ui-trigger = "task-update-{{task.$id}}" > < i class = "icon-cog" > < / i > < / button >
2020-02-28 06:44:03 +13:00
< button class = "pull-end reverse danger round desktops-only" data-ls-ui-trigger = "task-delete-{{task.$id}}" > < i class = "icon-trash" > < / i > < / button >
< button class = "link pull-start margin-end-small tablets-only phones-only" data-ls-ui-trigger = "task-update-{{task.$id}}" > Update< / button >
2020-02-29 19:24:55 +13:00
< button class = "link pull-start margin-end text-danger tablets-only phones-only" data-ls-ui-trigger = "task-delete-{{task.$id}}" > Delete< / button >
2019-08-05 16:47:52 +12:00
< / td >
< / tr >
< / tbody >
< / table >
< / div >
< div class = "clear" >
2020-05-01 04:35:39 +12:00
< div data-ui-modal class = "modal box close sticky-footer" data-button-text = "Add Task" >
2019-08-05 16:47:52 +12:00
< button type = "button" class = "close pull-end" data-ui-modal-close = "" > < i class = "icon-cancel" > < / i > < / button >
< h1 > Add Task< / h1 >
2019-08-08 17:09:49 +12:00
< form
2020-02-04 19:28:41 +13:00
data-analytics-event="submit"
data-analytics-category="console"
data-analytics-label="Create Project Task"
2019-08-08 17:09:49 +12:00
data-service="projects.createTask"
data-scope="console"
data-event="submit"
data-success="alert,trigger,reset"
data-success-param-alert-text="Created task successfully"
2020-02-24 19:59:10 +13:00
data-success-param-trigger-events="projects.createTask"
2019-08-08 17:09:49 +12:00
data-failure="alert"
2019-08-09 01:43:24 +12:00
data-failure-param-alert-text="Failed to create task"
data-failure-param-alert-classname="error">
2019-08-05 16:47:52 +12:00
2019-08-24 07:07:17 +12:00
< input type = "hidden" name = "projectId" data-ls-bind = "{{router.params.project}}" / >
2019-08-05 16:47:52 +12:00
< label for = "name" > Name< / label >
< input type = "text" class = "full-width" id = "name" name = "name" required autocomplete = "off" / >
< label data-ls-attrs = "for=status" class = "margin-bottom" > Status
< div class = "margin-top-small" >
2020-05-10 10:12:00 +12:00
< input name = "status" type = "radio" value = "play" checked = "checked" required / > < span > Play< / span >
< input name = "status" type = "radio" value = "pause" required / > < span > Pause< / span >
2019-08-05 16:47:52 +12:00
< / div >
< / label >
< label for = "schedule" > Schedule (CRON Syntax)< / label >
2019-08-09 18:05:45 +12:00
< input type = "text" class = "full-width" id = "schedule" name = "schedule" required autocomplete = "off" placeholder = "* * * * *" / >
2019-08-05 16:47:52 +12:00
2020-02-25 01:56:57 +13:00
< div class = "row responsive thin" >
2019-08-05 16:47:52 +12:00
< div class = "col span-4" >
< label for = "httpMethod" > HTTP Method< / label >
< select id = "httpMethod" name = "httpMethod" required >
< option value = "POST" > POST< / option >
< option value = "GET" > GET< / option >
< option value = "PUT" > PUT< / option >
< option value = "PATCH" > PATCH< / option >
< option value = "DELETE" > DELETE< / option >
< option value = "CONNECT" > CONNECT< / option >
< option value = "HEAD" > HEAD< / option >
< option value = "TRACE" > TRACE< / option >
< option value = "OPTIONS" > OPTIONS< / option >
< / select >
< / div >
< div class = "col span-8" >
< label for = "httpUrl" > HTTP URL< / label >
< input type = "url" class = "full-width" id = "httpUrl" name = "httpUrl" required autocomplete = "off" placeholder = "https://example.com/callback" / >
< / div >
< / div >
2019-08-09 18:28:16 +12:00
< div class = "margin-bottom toggle" data-ls-ui-open >
< i class = "icon-plus pull-end margin-top-tiny" > < / i >
< i class = "icon-minus pull-end margin-top-tiny" > < / i >
< h2 class = "margin-bottom" >
Advanced Options
2019-08-24 07:07:17 +12:00
< small class = "text-size-small" > (optional)< / small >
2019-08-09 18:28:16 +12:00
< / h2 >
2020-02-05 10:00:34 +13:00
< label for = "httpHeaders" class = "text-bold" > HTTP Headers< / label >
2019-08-26 07:30:06 +12:00
< input type = "hidden" id = "httpHeadersInitAdd" name = "httpHeaders" data-cast-to = "array-empty" >
2019-08-09 18:28:16 +12:00
< div class = "margin-bottom-small" >
< div data-forms-clone = "" data-label = "Add Header" data-first = "0" >
< div class = "" >
< div data-forms-remove class = "row thin margin-bottom-small" >
< div class = "col span-10" >
< input type = "hidden" name = "httpHeaders" data-forms-headers data-cast-to = "array" / >
< / div >
< div class = "col span-2" >
< button type = "button" data-remove class = "reverse danger round pull-end" > < i class = "icon-cancel" > < / i > < / button >
< / div >
2019-08-05 16:47:52 +12:00
< / div >
< / div >
< / div >
< / div >
2019-08-24 07:07:17 +12:00
< label for = "secure" class = "margin-bottom-small" >
2020-02-05 10:00:34 +13:00
< div class = "margin-bottom-small text-bold" > SSL / TLS (Certificate verification)< / div >
2019-08-24 07:07:17 +12:00
2019-08-09 18:28:16 +12:00
< input name = "security" data-ls-attrs = "id=secure-yes" type = "radio" value = "1" checked = "checked" required / > < span > Enabled< / span >
< input name = "security" data-ls-attrs = "id=secure-no" type = "radio" value = "0" required / > < span > Disabled< / span >
< / label >
2019-08-05 16:47:52 +12:00
2020-02-05 10:00:34 +13:00
< p class = "margin-bottom text-size-small text-fade" > < span class = "text-red" > Warning< / span > : Untrusted or self-signed certificates may not be secure.
2019-08-09 18:28:16 +12:00
< a href = "https://en.wikipedia.org/wiki/Self-signed_certificate" target = "_blank" rel = "noopener" > Learn more< i class = "icon-link-ext" > < / i > < / a >
< / p >
2019-08-05 16:47:52 +12:00
2020-02-05 10:00:34 +13:00
< label class = "text-bold" > HTTP Authentication < span class = "tooltip" data-tooltip = "Use to secure your endpoint from untrusted sources" > < i class = "icon-question" > < / i > < / span > < small > (optional)< / small > < / label >
2019-08-05 16:47:52 +12:00
2020-02-25 01:56:57 +13:00
< div class = "row responsive thin" >
< div class = "col span-6 margin-bottom" >
2019-08-09 18:28:16 +12:00
< label for = "httpUser" > User< / label >
2020-02-05 10:00:34 +13:00
< input type = "text" class = "full-width margin-bottom-no" id = "httpUser" name = "httpUser" autocomplete = "off" / >
2019-08-09 18:28:16 +12:00
< / div >
2020-02-25 01:56:57 +13:00
< div class = "col span-6 margin-bottom" >
2019-08-09 18:28:16 +12:00
< label for = "httpPass" > Password< / label >
2020-02-05 10:00:34 +13:00
< input type = "password" class = "full-width margin-bottom-no" id = "httpPass" name = "httpPass" autocomplete = "off" / >
2019-08-09 18:28:16 +12:00
< / div >
2019-08-05 16:47:52 +12:00
< / div >
< / div >
2020-05-01 04:35:39 +12:00
< footer >
< button type = "submit" > Create< / button > < button data-ui-modal-close = "" type = "button" class = "reverse" > Cancel< / button >
< / footer >
2019-08-05 16:47:52 +12:00
< / form >
< / div >
< / div >
< / div >