diff --git a/apps/alert_schedule/.DS_Store b/apps/alert_schedule/.DS_Store new file mode 100644 index 00000000..30f96ae5 Binary files /dev/null and b/apps/alert_schedule/.DS_Store differ diff --git a/apps/alert_schedule/README.txt b/apps/alert_schedule/README.txt new file mode 100644 index 00000000..ae8ace80 --- /dev/null +++ b/apps/alert_schedule/README.txt @@ -0,0 +1,21 @@ +@author Eric Plett + +Overview + +This app gives you the ability to setup alert schedules which include normal working hours, holidays, and maintenance windows +This is done by + +Configuring your alert schedules in the provided lookup files +Using the included macro, `check_alerting_schedule(my_schedule_id)` at the end of your alert searches +Configuring your alert to use a Custom Trigger Condition with the check for alerts_active="true" +Alert Configuration + +Example Alert can be found here Example Alert +SPL to test the current state of an alert schedule (Note:'US' is the schedule_id field in the lookups) +| makeresults +| `check_alerting_schedule(US)` +Support + +This app is community supported. + +Any bugs, enhancement requests, or general comments please send to Eric Plett \ No newline at end of file diff --git a/apps/alert_schedule/bin/README b/apps/alert_schedule/bin/README new file mode 100755 index 00000000..9a70db09 --- /dev/null +++ b/apps/alert_schedule/bin/README @@ -0,0 +1 @@ +This is where you put any scripts you want to add to this app. diff --git a/apps/alert_schedule/default/app.conf b/apps/alert_schedule/default/app.conf new file mode 100644 index 00000000..661ade7b --- /dev/null +++ b/apps/alert_schedule/default/app.conf @@ -0,0 +1,17 @@ +[default] +[install] +is_configured = 0 + +[launcher] +description = This app is used to configure when you would like alerts to fire. It is useful for alerting during normal business hours, e.g. when a stock exchange is open. It also supports holidays, maintenance windows, and multiple spans of regular business hours (e.g. Tokyo Stock Exchange). +version = 0.6 +author = Eric Plett + +[package] +check_for_updates = 1 +id = alert_schedule + +[ui] +label = Alert Schedule for Splunk +is_visible = 1 + diff --git a/apps/alert_schedule/default/data/ui/nav/default.xml b/apps/alert_schedule/default/data/ui/nav/default.xml new file mode 100644 index 00000000..5de12112 --- /dev/null +++ b/apps/alert_schedule/default/data/ui/nav/default.xml @@ -0,0 +1,6 @@ + \ No newline at end of file diff --git a/apps/alert_schedule/default/data/ui/views/README b/apps/alert_schedule/default/data/ui/views/README new file mode 100644 index 00000000..6cf74f0b --- /dev/null +++ b/apps/alert_schedule/default/data/ui/views/README @@ -0,0 +1 @@ +Add all the views that your app needs in this directory diff --git a/apps/alert_schedule/default/data/ui/views/home.xml b/apps/alert_schedule/default/data/ui/views/home.xml new file mode 100644 index 00000000..5cc1fd36 --- /dev/null +++ b/apps/alert_schedule/default/data/ui/views/home.xml @@ -0,0 +1,35 @@ + + + + + Welcome to Alert Schedule! + +

Overview

+

+ This app gives you the ability to setup alert schedules which include normal working hours, holidays, and maintenance windows
+

+

+ This is done by +

    +
  • Configuring your alert schedules in the provided lookup files +
  • +
  • Using the included macro, `check_alerting_schedule(my_schedule_id)` at the end of your alert searches
  • +
  • Configuring your alert to use a Custom Trigger Condition with the check for alerts_active="true"
  • +
+

+

Alert Configuration

+
    +
  • Example Alert can be found here Example Alert
  • +
  • SPL to test the current state of an alert schedule (Note:'US' is the schedule_id field in the lookups)
  • +
+ | makeresults
+ | `check_alerting_schedule(US)` + +

Support

+ This app is community supported.

+ + Any bugs, enhancement requests, or general comments please send to Eric Plett + +
+
+
\ No newline at end of file diff --git a/apps/alert_schedule/default/data/ui/views/lookups.xml b/apps/alert_schedule/default/data/ui/views/lookups.xml new file mode 100644 index 00000000..9f7edd6f --- /dev/null +++ b/apps/alert_schedule/default/data/ui/views/lookups.xml @@ -0,0 +1,56 @@ + + + + + Edit Schedules + +

+ Click buttons below to edit the alert schedule lookup files.
+ Note: this requires the Lookup File Editor App for Splunk Enterprise +

+ + Schedules + + + Hours + + + Holidays + + + Maintenance Windows + +

+

Lookup Files Help

+ Schedules lookup +
    +
  • schedule_id: can be anything you want it to be as long as it consistent through all of the lookup files. This is the "primary key" which drives all of the functionality. Note: The included default lookups use contry codes because that was what worked for the original use case this was developed for.
  • +
  • schedule_description: is a user friendly name for the schedule. This does not drive any functionality and is essentially optional
  • +
  • schedule_timezone: is the timezone (format %Z) that will be used to specify times when configuring the schedule. This will be used to translate the "local" time of the user running the alert search to the one specified for the schedule. This allows the schedules to be configured using the local time of where the schedule originates.
  • +
+ Schedule Hours lookup +
    +
  • schedule_id: this needs to correspond to one of the schedule_ids specified in the schedules.csv file referenced above
  • +
  • calendar_day_of_week: numeric day of the week 0-6 corresponds to Sunday-Saturday. If there are multiple regular work periods on a day (e.g. Tokyo Stock Exchange), this can be supported by including a second row for the corresponding day.
  • +
  • start_time: start time of the regualr work day period entered as a 24 Hour value (format %H:%M) in the schedule's Timezone (specified in the schedules.csv)
  • +
  • end_time: end time of the regualr work day period entered as a 24 Hour value (format %H:%M) in the schedule's Timezone (specified in the schedules.csv)
  • +
+ Schedule Holidays lookup +
    +
  • schedule_id: this needs to correspond to one of the schedule_ids specified in the schedules.csv file referenced above
  • +
  • holiday_description is a user friendly description of the holiday. This does not drive any functionality and is essentially optional
  • +
  • holiday_date: specific date (format %d/%m/%y) the holiday falls on
  • +
  • start_time: start time of the holiday entered as a 24 Hour value (format %H:%M) in the schedule's Timezone (specified in the schedules.csv)
  • +
  • end_time: end time of the holiday entered as a 24 Hour value (format %H:%M) in the schedule's Timezone (specified in the schedules.csv)
  • +
+ Schedule Maintenance Windows lookup +
    +
  • schedule_id: this needs to correspond to one of the schedule_ids specified in the schedules.csv file referenced above
  • +
  • mw_description: is a user friendly description of the maintenance window. This does not drive any functionality and is essentially optional
  • +
  • start_time: start date and time of the maintenance window (format %d/%m/%y %H:%M) in the schedule's Timezone (specified in the schedules.csv)
  • +
  • end_time: end date and time of the maintenance window (format %d/%m/%y %H:%M) in the schedule's Timezone (specified in the schedules.csv)
  • +
+ +
+
+
\ No newline at end of file diff --git a/apps/alert_schedule/default/data/ui/views/schedules.xml b/apps/alert_schedule/default/data/ui/views/schedules.xml new file mode 100644 index 00000000..74d28ad9 --- /dev/null +++ b/apps/alert_schedule/default/data/ui/views/schedules.xml @@ -0,0 +1,107 @@ +
+ +
+ + + schedule_description + schedule_id + + | inputlookup schedules.csv | table schedule_id schedule_description + + US + +
+ + + Schedule ID: $my_schedule_id$ + + Current Alert Schedule Status + + | makeresults +| `check_alerting_schedule($my_schedule_id$)` +| fields - _time, *_count + 0 + 1 + + + + + + + + +
+ + Schedule + + | inputlookup schedules.csv +| search schedule_id = $my_schedule_id$ | table schedule_id schedule_description schedule_timezone + 0 + 1 + + + + + + + + +
+ + Regular Schedule + + | inputlookup schedule_hours.csv +| search schedule_id = $my_schedule_id$ | sort schedule_id calendar_day_of_week start_time | table schedule_id calendar_day_of_week start_time end_time + 0 + + 1 + + + + + + + + +
+ + Maintenance Windows + + | inputlookup schedule_maintenance_windows.csv +| search schedule_id = $my_schedule_id$ +| sort start_time +| table schedule_id mw_description start_time end_time + 0 + + 1 + + + + + + + + +
+ + Holidays + + | inputlookup schedule_holidays.csv +| search schedule_id = $my_schedule_id$ +| sort holiday_date +| table schedule_id holiday_description holiday_date start_time end_time + 0 + + 1 + + + + + + + + +
+
+
+
\ No newline at end of file diff --git a/apps/alert_schedule/default/macros.conf b/apps/alert_schedule/default/macros.conf new file mode 100644 index 00000000..4ba90af9 --- /dev/null +++ b/apps/alert_schedule/default/macros.conf @@ -0,0 +1,75 @@ +[check_alerting_schedule(1)] +args = schedule_id +definition = `schedule_hours_check($schedule_id$)` \ +| `schedule_holiday_check($schedule_id$)` \ +| `schedule_maintenance_windows_check($schedule_id$)`\ +| eval alerts_active = if((is_business_hours="true" AND is_holiday="false" AND is_maint_win="false"),"true","false") +iseval = 0 + +[schedule_holiday_check(1)] +args = schedule_id +definition = join \ + [| inputlookup schedule_holidays.csv \ + | search schedule_id = $schedule_id$ \ + | `schedule_local_time($schedule_id$)` \ + | eval holiday_start_time = holiday_date." ".start_time \ + | eval holiday_end_time = holiday_date." ".end_time \ + | convert timeformat="%m/%d/%y %H:%M" mktime(*_time) \ + | where current_time > holiday_start_time \ + | where current_time < holiday_end_time \ + | stats count as holiday_count \ + | eval is_holiday = if(holiday_count>0,"true","false")] +errormsg = When calling schedule_holiday_check input param schedule_id must be provided +iseval = 0 +validation = isnotnull($schedule_id$) + +[schedule_hours_check(1)] +args = schedule_id +definition = join \ + [| inputlookup schedule_hours.csv \ + | search schedule_id = $schedule_id$ \ + | `schedule_local_time($schedule_id$)` \ + | eval day_of_week =strftime(current_time, "%w") \ + | where day_of_week = calendar_day_of_week \ + | eval current_date =strftime(current_time, "%m/%d/%y") \ + | eval hours_startTime = current_date." ".start_time \ + | eval hours_endTime = current_date." ".end_time \ + | convert timeformat="%m/%d/%y %H:%M" mktime(*Time) \ + | where current_time > hours_startTime \ + | where current_time < hours_endTime \ + | stats count as schedule_hours_count \ + | eval is_business_hours = if(schedule_hours_count>0,"true","false")] +errormsg = When calling is_holiday input param schedule_id must be provided +iseval = 0 +validation = isnotnull($schedule_id$) + +[schedule_local_time(1)] +args = schedule_id +definition = eval schedule_id = "$schedule_id$"\ +| lookup schedules.csv schedule_id \ +| eval current_time_local=now() \ +| eval schedule_time_formatted =strftime(current_time_local, "%m/%d/%y %H:%M")." ".schedule_timezone \ +| eval schedule_time = round(strptime(schedule_time_formatted,"%m/%d/%y %H:%M %Z")) \ +| eval offset_hours = round((current_time_local - schedule_time)/3600) \ +| eval offset_secs = offset_hours*3600 \ +| eval current_time = current_time_local + offset_secs \ +| eval current_time_formatted = strftime(current_time, "%m/%d/%y %H:%M") \ +| fields - schedule_time, schedule_time_formatted, offset_secs\ + \ + +iseval = 0 + +[schedule_maintenance_windows_check(1)] +args = schedule_id +definition = join \ + [| inputlookup schedule_maintenance_windows.csv \ + | search schedule_id = $schedule_id$ \ + | `schedule_local_time($schedule_id$)` \ + | convert timeformat="%m/%d/%y %H:%M" mktime(*_time) \ + | where current_time > start_time \ + | where current_time < end_time \ + | stats count as maint_win_count \ + | eval is_maint_win = if(maint_win_count>0,"true","false")] +errormsg = When calling schedule_holiday_check input param schedule_id must be provided +iseval = 0 +validation = isnotnull($schedule_id$) diff --git a/apps/alert_schedule/default/savedsearches.conf b/apps/alert_schedule/default/savedsearches.conf new file mode 100644 index 00000000..6e974485 --- /dev/null +++ b/apps/alert_schedule/default/savedsearches.conf @@ -0,0 +1,20 @@ +[Example Alert] +action.email.useNSSubject = 1 +alert.severity = 4 +alert.suppress = 1 +alert.suppress.period = 5m +alert.track = 1 +alert_condition = search alert_value > 50 AND alerts_active="true" +auto_summarize.dispatch.earliest_time = -1d@h +counttype = custom +cron_schedule = */1 * * * * +description = Example alert using the alert schedule macro to control the alerting schedule. +dispatch.latest_time = -15m@m +display.general.type = statistics +display.page.search.tab = statistics +enableSched = 1 +request.ui_dispatch_app = alert_schedule +request.ui_dispatch_view = search +search = index=_internal sourcetype=splunkd_ui_access error\ +| stats count as alert_value\ +| `check_alerting_schedule(US)` diff --git a/apps/alert_schedule/lookups/schedule_holidays.csv b/apps/alert_schedule/lookups/schedule_holidays.csv new file mode 100644 index 00000000..3febf2a9 --- /dev/null +++ b/apps/alert_schedule/lookups/schedule_holidays.csv @@ -0,0 +1,23 @@ +schedule_id,holiday_description,holiday_date,start_time,end_time +US,Test Day,3/26/17,00:00,23:59 +US,New Year's Day,1/2/17,9:00,16:00 +US,"Martin Luther King, Jr. Day",1/16/17,9:00,16:00 +US,Washington's Birthday,2/20/17,9:00,16:00 +US,Good Friday,4/14/17,9:00,16:00 +US,Memorial Day,5/29/17,9:00,16:00 +US,Independence Day,7/4/17,9:00,16:00 +US,Labor Day,9/4/17,9:00,16:00 +US,Thanksgiving Day,11/23/17,9:00,16:00 +US,Christmas Day,12/25/17,9:00,16:00 +US,Day before Independence Day,7/3/17,13:00,16:00 +US,Day following Thanksgiving,11/24/17,13:00,16:00 +CA,New Year's Day,1/2/17,9:00,16:00 +CA,Family Day,2/20/17,9:00,16:00 +CA,Good Friday,4/14/17,9:00,16:00 +CA,Victoria Day,5/22/17,9:00,16:00 +CA,Canada Day,7/3/17,9:00,16:00 +CA,Civic Holiday,8/7/17,9:00,16:00 +CA,Labour Day,9/4/17,9:00,16:00 +CA,Thanksgiving Day,10/9/17,9:00,16:00 +CA,Christmas Day,12/25/17,9:00,16:00 +CA,Boxing Day,12/26/17,13:00,16:00 diff --git a/apps/alert_schedule/lookups/schedule_hours.csv b/apps/alert_schedule/lookups/schedule_hours.csv new file mode 100644 index 00000000..e9c34fdd --- /dev/null +++ b/apps/alert_schedule/lookups/schedule_hours.csv @@ -0,0 +1,21 @@ +schedule_id,calendar_day_of_week,start_time,end_time +US,1,9:30,16:00 +US,2,9:30,16:00 +US,3,9:30,16:00 +US,4,9:30,16:00 +US,5,9:30,16:00 +CA,1,9:30,16:00 +CA,2,9:30,16:00 +CA,3,9:30,16:00 +CA,4,9:30,16:00 +CA,5,9:30,16:00 +JP,1,9:00,11:30 +JP,2,9:00,11:30 +JP,3,9:00,11:30 +JP,4,9:00,11:30 +JP,5,9:00,11:30 +JP,1,12:30,15:00 +JP,2,12:30,15:00 +JP,3,12:30,15:00 +JP,4,12:30,15:00 +JP,5,12:30,15:00 diff --git a/apps/alert_schedule/lookups/schedule_maintenance_windows.csv b/apps/alert_schedule/lookups/schedule_maintenance_windows.csv new file mode 100644 index 00000000..e5982b74 --- /dev/null +++ b/apps/alert_schedule/lookups/schedule_maintenance_windows.csv @@ -0,0 +1,5 @@ +schedule_id,mw_description,start_time,end_time +US,Example,3/27/17 22:00,3/28/17 02:00 +CA,Example,3/23/17 22:00,3/24/17 02:00 +JP,Example,3/23/17 22:00,3/24/17 02:00 +GB,Example,3/23/17 22:00,3/24/17 02:00 diff --git a/apps/alert_schedule/lookups/schedules.csv b/apps/alert_schedule/lookups/schedules.csv new file mode 100644 index 00000000..7b1417d4 --- /dev/null +++ b/apps/alert_schedule/lookups/schedules.csv @@ -0,0 +1,5 @@ +schedule_id,schedule_timezone,schedule_description +US,EDT,New York Stock Exchange +CA,EDT,Toronto Stock Exchange +GB,GMT,London Stock Exchange +JP,JST,Tokyo Stock Exchange diff --git a/apps/alert_schedule/metadata/default.meta b/apps/alert_schedule/metadata/default.meta new file mode 100644 index 00000000..bf08a6a4 --- /dev/null +++ b/apps/alert_schedule/metadata/default.meta @@ -0,0 +1,122 @@ + +# Application-level permissions + +[] +access = read : [ * ], write : [ admin, power ] + +### EVENT TYPES + +[eventtypes] +export = system + + +### PROPS + +[props] +export = system + + +### TRANSFORMS + +[transforms] +export = system + + +### LOOKUPS + +[lookups] +export = system + + +### VIEWSTATES: even normal users should be able to create shared viewstates + +[viewstates] +access = read : [ * ], write : [ * ] +export = system + +[app/ui] +version = 6.5.0 +modtime = 1493061154.378643000 + +[app/launcher] +version = 6.5.0 +modtime = 1493061154.390197000 + +[macros/check_alerting_schedule%281%29] +access = read : [ * ], write : [ admin, power ] +export = system +owner = nobody +version = 6.5.0 +modtime = 1490386264.256548000 + +[macros/schedule_holiday_check%281%29] +access = read : [ * ], write : [ admin, power ] +export = system +owner = nobody +version = 6.5.0 +modtime = 1490386346.647888000 + +[macros/schedule_hours_check%281%29] +access = read : [ * ], write : [ admin, power ] +export = system +owner = nobody +version = 6.5.0 +modtime = 1490387988.953289000 + +[macros/schedule_local_time%281%29] +access = read : [ * ], write : [ admin, power ] +export = system +owner = nobody +version = 6.5.0 +modtime = 1490386377.655856000 + +[macros/schedule_maintenance_windows_check%281%29] +access = read : [ * ], write : [ admin, power ] +export = system +owner = nobody +version = 6.5.0 +modtime = 1490386388.374271000 + +[views/home] +owner = admin +version = 6.5.0 +modtime = 1490817850.252257000 + +[nav/default] +version = 6.5.0 +modtime = 1490624106.667944000 + +[views/schedules] +owner = admin +version = 6.5.0 +modtime = 1490643624.335333000 + +[lookups/schedule_hours.csv] +version = 6.5.0 +modtime = 1490627587.132246000 + +[lookups/schedule_maintenance_windows.csv] +version = 6.5.0 +modtime = 1490627665.901425000 + +[views/lookups] +access = read : [ admin, power ] +export = none +owner = admin +version = 6.5.0 +modtime = 1490650745.015424000 + +[lookups/schedule_holidays.csv] +version = 6.5.0 +modtime = 1490624793.762113000 + +[savedsearches/Example%20Alert] +access = read : [ * ], write : [ admin, power ] +export = none +owner = admin +version = 6.5.0 +modtime = 1490640182.176775000 + +[app/package/check_for_updates] +version = 6.5.0 +modtime = 1493061154.394154000 diff --git a/apps/alert_schedule/metadata/local.meta b/apps/alert_schedule/metadata/local.meta new file mode 100644 index 00000000..044d1c2f --- /dev/null +++ b/apps/alert_schedule/metadata/local.meta @@ -0,0 +1,11 @@ +[app/ui] +version = 6.5.0 +modtime = 1506963296.485904000 + +[app/launcher] +version = 6.5.0 +modtime = 1506963296.502645000 + +[app/package/check_for_updates] +version = 6.5.0 +modtime = 1506963296.506964000 diff --git a/apps/alert_schedule/splunkbase.manifest b/apps/alert_schedule/splunkbase.manifest new file mode 100644 index 00000000..6d4e48a4 --- /dev/null +++ b/apps/alert_schedule/splunkbase.manifest @@ -0,0 +1,119 @@ +{ + "version": "1.0", + "date": "2022-11-14T20:35:27.980726541Z", + "hashAlgorithm": "SHA-256", + "app": { + "id": 3563, + "version": "0.6", + "files": [ + { + "path": "README.txt", + "hash": "98fb82653ad4b4fbd58b412e27ee6d69ff9662bdc30350b062b69d31d036a843" + }, + { + "path": "bin/README", + "hash": "597cdad620bec4e52e0e8adc3cad99de9b3ce45da0dd18e4159e1009c976e957" + }, + { + "path": "default/app.conf", + "hash": "f35b1d88306710c7fa83c24295ac9197e361cd1661faeb7c9b0dce46d3ac4d27" + }, + { + "path": "default/macros.conf", + "hash": "f9d157e287ac70a016918e5e4a9c20158e083975fa8bb33af5e74b73ad71f6f2" + }, + { + "path": "default/savedsearches.conf", + "hash": "b6fda5cd21658009c976e4b58c8b015946ca6e965bf44a992fd050cf547a0d9f" + }, + { + "path": "default/data/ui/nav/default.xml", + "hash": "33f27f2d732b0a813f82449f0c6523bf5d21f4865741998a0f7dd102b51c6a10" + }, + { + "path": "default/data/ui/views/home.xml", + "hash": "6fa2cc144e52615ac7fca02f70815411f2dd8f6cef62dd42efbcf487ad57c632" + }, + { + "path": "default/data/ui/views/lookups.xml", + "hash": "f788445df81993af4c3c60f2e44d2e253745330a264adef52e9adf9be7d8518e" + }, + { + "path": "default/data/ui/views/README", + "hash": "4ccd9dc2dca5bd634f7c07ad1749e4e63a7969c84e2eff83517256f7c884cd29" + }, + { + "path": "default/data/ui/views/schedules.xml", + "hash": "2b2ced26fe52b643c5c0d2fcd04a3dbae3a93b1889d914a358c8d614e4693e97" + }, + { + "path": "lookups/schedule_holidays.csv", + "hash": "5bfadb189cd53261dbaf3f24b151042d6fee91ae26c2e3b6f477fb283baebeca" + }, + { + "path": "lookups/schedule_hours.csv", + "hash": "d8edd57844fe16f56d9544d6fd837c960028b07fc8d32a01b693658bce93f8a9" + }, + { + "path": "lookups/schedule_maintenance_windows.csv", + "hash": "7c5169a7e66c9d4f57b3766f0927ba95d054b6988a830bcc9a1303b2cb969ba5" + }, + { + "path": "lookups/schedules.csv", + "hash": "276cdc05a5ef6e2d15a7e3020a6216e1066a189eb27b536e96d4df23192f5c8b" + }, + { + "path": "metadata/default.meta", + "hash": "d9f5d06e1f0fa3abb3e0d7e8c863293616affab0c9f47be951b7114ee410eb90" + }, + { + "path": "metadata/local.meta", + "hash": "9c40fb36c437f5ffed2f67693a9e4e89df250b01b4b39bf957edb6c7e2eaeaee" + }, + { + "path": "static/appIcon.png", + "hash": "ab3633ee135f104b1e2f32d229818effabca369add726f035b3c90506210a022" + }, + { + "path": "static/appIcon_2x.png", + "hash": "790ce1b70014acbd124e6a35666482f6e63d7bb1084b53cca0d731e6f4f0366e" + }, + { + "path": "static/screen_shot_home.jpg", + "hash": "ed101031263b3cecb49ac3e62c105c8187b9cee8527a25d62138e2c59ba9611c" + }, + { + "path": "static/screen_shot_lookup_edit.jpg", + "hash": "d62bf96386d68292c46ed9789bf398179c1be98253b16c2016e44c0b02ac31b5" + }, + { + "path": "static/screen_shot_lookups.jpg", + "hash": "3072f096c666f0b1647890bba2d8026dc9c9f6f95425dc82b02b94be9a4bade7" + }, + { + "path": "static/screen_shot_schedules.jpg", + "hash": "bf7791f158cb9e0fa50bc00aca349b4d5a8372d0b07f2f50fc332d8efe89d8a6" + } + ] + }, + "products": [ + { + "platform": "splunk", + "product": "enterprise", + "versions": [ + "7.0" + ], + "architectures": [ + "x86_64" + ], + "operatingSystems": [ + "windows", + "linux", + "macos", + "freebsd", + "solaris", + "aix" + ] + } + ] +} \ No newline at end of file diff --git a/apps/alert_schedule/static/appIcon.png b/apps/alert_schedule/static/appIcon.png new file mode 100644 index 00000000..fa6d829d Binary files /dev/null and b/apps/alert_schedule/static/appIcon.png differ diff --git a/apps/alert_schedule/static/appIcon_2x.png b/apps/alert_schedule/static/appIcon_2x.png new file mode 100644 index 00000000..87f27550 Binary files /dev/null and b/apps/alert_schedule/static/appIcon_2x.png differ diff --git a/apps/alert_schedule/static/screen_shot_home.jpg b/apps/alert_schedule/static/screen_shot_home.jpg new file mode 100644 index 00000000..3a46156c Binary files /dev/null and b/apps/alert_schedule/static/screen_shot_home.jpg differ diff --git a/apps/alert_schedule/static/screen_shot_lookup_edit.jpg b/apps/alert_schedule/static/screen_shot_lookup_edit.jpg new file mode 100644 index 00000000..131124e2 Binary files /dev/null and b/apps/alert_schedule/static/screen_shot_lookup_edit.jpg differ diff --git a/apps/alert_schedule/static/screen_shot_lookups.jpg b/apps/alert_schedule/static/screen_shot_lookups.jpg new file mode 100644 index 00000000..e5578c48 Binary files /dev/null and b/apps/alert_schedule/static/screen_shot_lookups.jpg differ diff --git a/apps/alert_schedule/static/screen_shot_schedules.jpg b/apps/alert_schedule/static/screen_shot_schedules.jpg new file mode 100644 index 00000000..9879e76c Binary files /dev/null and b/apps/alert_schedule/static/screen_shot_schedules.jpg differ