diff --git a/api/migrations/0002_jobtemplate.py b/api/migrations/0002_jobtemplate.py new file mode 100644 index 00000000..7257314f --- /dev/null +++ b/api/migrations/0002_jobtemplate.py @@ -0,0 +1,28 @@ +# Generated by Django 2.2.6 on 2019-10-26 04:25 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [("api", "0001_initial")] + + operations = [ + migrations.CreateModel( + name="JobTemplate", + fields=[ + ( + "id", + models.AutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("name", models.CharField(max_length=255)), + ("job", models.TextField()), + ], + options={"db_table": "salt_job_template"}, + ) + ] diff --git a/api/models.py b/api/models.py index 783e0485..33176a03 100644 --- a/api/models.py +++ b/api/models.py @@ -53,7 +53,13 @@ def user(self): def arguments(self): ret = self.loaded_ret() if "fun_args" in ret and ret["fun_args"]: - return " ".join(str(i) for i in ret["fun_args"]) + return " ".join(str(i) for i in ret["fun_args"] if "=" not in str(i)) + return "" + + def keyword_arguments(self): + ret = self.loaded_ret() + if "fun_args" in ret and ret["fun_args"]: + return " ".join(str(i) for i in ret["fun_args"] if "=" in str(i)) return "" def success_bool(self): @@ -104,6 +110,18 @@ class Meta: app_label = "api" +class JobTemplate(models.Model): + name = models.CharField(max_length=255) + job = models.TextField() + + def __str__(self): + return "{}".format(self.name) + + class Meta: + db_table = "salt_job_template" + app_label = "api" + + class Minions(models.Model): minion_id = models.CharField(max_length=128, null=False, blank=False) grain = models.TextField() diff --git a/api/serializers.py b/api/serializers.py index e072840e..cd9489d1 100644 --- a/api/serializers.py +++ b/api/serializers.py @@ -1,7 +1,10 @@ +import json + from django.contrib.auth.models import User from rest_framework import serializers from rest_framework_simplejwt.serializers import TokenObtainPairSerializer +from api.utils import RawCommand from .models import ( SaltReturns, SaltEvents, @@ -12,12 +15,14 @@ UserSettings, Functions, Schedule, + JobTemplate, ) class SaltReturnsSerializer(serializers.ModelSerializer): user = serializers.CharField() arguments = serializers.CharField() + keyword_arguments = serializers.CharField() success = serializers.BooleanField(source="success_bool") class Meta: @@ -74,11 +79,26 @@ class Meta: fields = "__all__" +class JobTemplateSerializer(serializers.ModelSerializer): + def create(self, validated_data): + name = validated_data["name"] + job = validated_data["job"] + command = RawCommand(job) + parsed_command = command.parse() + obj, created = JobTemplate.objects.update_or_create( + name=name, defaults={"job": json.dumps(parsed_command[0])} + ) + return obj + + class Meta: + model = JobTemplate + fields = "__all__" + + class UsersSerializer(serializers.ModelSerializer): user_settings = UserSettingsSerializer(read_only=True) def create(self, validated_data): - print(validated_data) for param in ["is_active", "groups", "user_permissions"]: del validated_data[param] user = User(**validated_data) diff --git a/api/urls.py b/api/urls.py index 471e859b..878c2630 100644 --- a/api/urls.py +++ b/api/urls.py @@ -30,6 +30,7 @@ search, verify, version, + JobTemplateViewSet, ) from rest_framework import routers @@ -43,6 +44,7 @@ router.register(r"minionsfields", MinionsCustomFieldsViewSet) router.register(r"functions", FunctionsViewSet) router.register(r"schedules", ScheduleViewSet) +router.register(r"job_templates", JobTemplateViewSet) urlpatterns = [ path("", index_view, name="index"), diff --git a/api/views/alcali.py b/api/views/alcali.py index 45fc9a55..906c4aca 100644 --- a/api/views/alcali.py +++ b/api/views/alcali.py @@ -36,7 +36,7 @@ manage_schedules, ) from api.models import SaltReturns, Keys, Minions, SaltEvents, Schedule, Conformity -from api.models import UserSettings, MinionsCustomFields, Functions +from api.models import UserSettings, MinionsCustomFields, Functions, JobTemplate from api.permissions import IsLoggedInUserOrAdmin, IsAdminUser from api.renderer import StreamingRenderer from api.serializers import ( @@ -48,6 +48,7 @@ ScheduleSerializer, MyTokenObtainPairSerializer, SaltReturnsSerializer, + JobTemplateSerializer, ) from api.serializers import KeysSerializer, MinionsSerializer from api.utils import graph_data, render_conformity, RawCommand @@ -329,6 +330,11 @@ class UserSettingsViewSet(viewsets.ModelViewSet): serializer_class = UserSettingsSerializer +class JobTemplateViewSet(viewsets.ModelViewSet): + queryset = JobTemplate.objects.all() + serializer_class = JobTemplateSerializer + + @api_view(["GET"]) def jobs_graph(request): id = request.query_params.get("id", None) @@ -387,7 +393,6 @@ def stats(request): @api_view(["GET"]) def version(request): - return Response({"version": settings.VERSION}) diff --git a/dist/index.html b/dist/index.html index 40625cbd..496fc342 100644 --- a/dist/index.html +++ b/dist/index.html @@ -1 +1 @@ -ALCALI
\ No newline at end of file +ALCALI
\ No newline at end of file diff --git a/dist/static/css/app.321866b5.css b/dist/static/css/app.7dd676e0.css similarity index 92% rename from dist/static/css/app.321866b5.css rename to dist/static/css/app.7dd676e0.css index de3c71eb..793fc662 100644 --- a/dist/static/css/app.321866b5.css +++ b/dist/static/css/app.7dd676e0.css @@ -1 +1 @@ -::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:10px;background-color:#f5f5f5}::-webkit-scrollbar{width:10px;background-color:#f5f5f5}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#555}span .v-chip__content{white-space:nowrap}.v-list{border-radius:0!important}html{overflow-y:auto!important}.v-menu--inline[data-v-bcf3f6c0]{display:block}.chartjs-tooltip-key[data-v-bcf3f6c0]{display:inline-block;width:10px;height:10px;margin-right:10px}html[data-v-e48ee6a0]{overflow-y:auto!important}.cm-s-made-of-code{font-size:1em;line-height:1.5em;font-family:inconsolata,monospace;letter-spacing:.3px;word-spacing:1px;background:rgba(9,9,22,.95);color:#f8f8f8}.cm-s-made-of-code .CodeMirror-lines{padding:8px 0}.cm-s-made-of-code .CodeMirror-gutters{box-shadow:1px 0 2px 0 rgba(0,0,0,.5);-webkit-box-shadow:1px 0 2px 0 rgba(0,0,0,.5);background-color:rgba(9,9,22,.95);padding-right:10px;z-index:3;border:none}.cm-s-made-of-code div.CodeMirror-cursor{border-left:3px solid #f8f8f8}.cm-s-made-of-code .CodeMirror-activeline-background{background:transparent}.cm-s-made-of-code .CodeMirror-selected{background:rgba(0,125,255,.5)}.cm-s-made-of-code .cm-comment{color:#54576b;background:transparent}.cm-s-made-of-code .cm-keyword{color:#ff3854}.cm-s-made-of-code .cm-string{color:#8fff58;background:rgba(16,38,34,.98)}.cm-s-made-of-code .cm-atom,.cm-s-made-of-code .cm-number,.cm-s-made-of-code .cm-property{color:#f1d950}.cm-s-made-of-code .cm-operator{color:#ff3854}.cm-s-made-of-code .CodeMirror-linenumber{color:#54576b}.cm-s-made-of-code{padding-top:10px;outline:thin solid rgba(51,51,51,.3)}.CodeMirror{height:100%;font-size:16px}div.CodeMirror-sizer>div{padding-left:10px}.CodeMirror-foldmarker{color:#333;text-shadow:#bfbfbf 1px 1px 2px,#bfbfbf -1px -1px 2px,#bfbfbf 1px -1px 2px,#bfbfbf -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.9em}.CodeMirror-foldgutter-folded,.CodeMirror-foldgutter-open{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25BE"}.CodeMirror-foldgutter-folded:after{content:"\25B8"}.overlayedBtn[data-v-107b300f]{position:absolute;right:0;z-index:1}.ansiStyle[data-v-ebea9e70]{background-color:#000;padding:10px}.desc[data-v-5dd162c9]{background-color:#8a8a8a;border:10px;border-right:20px}.ansiStyle[data-v-5dd162c9]{background-color:#000;padding:10px}.v-expansion-panel-content[data-v-69fc5fbb]{background-color:#000} \ No newline at end of file +::-webkit-scrollbar-track{-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);border-radius:10px;background-color:#f5f5f5}::-webkit-scrollbar{width:10px;background-color:#f5f5f5}::-webkit-scrollbar-thumb{border-radius:10px;-webkit-box-shadow:inset 0 0 6px rgba(0,0,0,.3);background-color:#555}span .v-chip__content{white-space:nowrap}.v-list{border-radius:0!important}html{overflow-y:auto!important}.v-menu--inline[data-v-bcf3f6c0]{display:block}.chartjs-tooltip-key[data-v-bcf3f6c0]{display:inline-block;width:10px;height:10px;margin-right:10px}html[data-v-e48ee6a0]{overflow-y:auto!important}.cm-s-made-of-code{font-size:1em;line-height:1.5em;font-family:inconsolata,monospace;letter-spacing:.3px;word-spacing:1px;background:rgba(9,9,22,.95);color:#f8f8f8}.cm-s-made-of-code .CodeMirror-lines{padding:8px 0}.cm-s-made-of-code .CodeMirror-gutters{box-shadow:1px 0 2px 0 rgba(0,0,0,.5);-webkit-box-shadow:1px 0 2px 0 rgba(0,0,0,.5);background-color:rgba(9,9,22,.95);padding-right:10px;z-index:3;border:none}.cm-s-made-of-code div.CodeMirror-cursor{border-left:3px solid #f8f8f8}.cm-s-made-of-code .CodeMirror-activeline-background{background:transparent}.cm-s-made-of-code .CodeMirror-selected{background:rgba(0,125,255,.5)}.cm-s-made-of-code .cm-comment{color:#54576b;background:transparent}.cm-s-made-of-code .cm-keyword{color:#ff3854}.cm-s-made-of-code .cm-string{color:#8fff58;background:rgba(16,38,34,.98)}.cm-s-made-of-code .cm-atom,.cm-s-made-of-code .cm-number,.cm-s-made-of-code .cm-property{color:#f1d950}.cm-s-made-of-code .cm-operator{color:#ff3854}.cm-s-made-of-code .CodeMirror-linenumber{color:#54576b}.cm-s-made-of-code{padding-top:10px;outline:thin solid rgba(51,51,51,.3)}.CodeMirror{height:100%;font-size:16px}div.CodeMirror-sizer>div{padding-left:10px}.CodeMirror-foldmarker{color:#333;text-shadow:#bfbfbf 1px 1px 2px,#bfbfbf -1px -1px 2px,#bfbfbf 1px -1px 2px,#bfbfbf -1px 1px 2px;font-family:arial;line-height:.3;cursor:pointer}.CodeMirror-foldgutter{width:.9em}.CodeMirror-foldgutter-folded,.CodeMirror-foldgutter-open{cursor:pointer}.CodeMirror-foldgutter-open:after{content:"\25BE"}.CodeMirror-foldgutter-folded:after{content:"\25B8"}.overlayedBtn[data-v-107b300f]{position:absolute;right:0;z-index:1}.ansiStyle[data-v-664654b1]{background-color:#000;padding:10px}.desc[data-v-ab381b0c]{background-color:#8a8a8a;border:10px;border-right:20px}.ansiStyle[data-v-ab381b0c]{background-color:#000;padding:10px}.v-expansion-panel-content[data-v-69fc5fbb]{background-color:#000} \ No newline at end of file diff --git a/dist/static/js/app.6bf41df6.js b/dist/static/js/app.6bf41df6.js new file mode 100644 index 00000000..1bb1eb5d --- /dev/null +++ b/dist/static/js/app.6bf41df6.js @@ -0,0 +1,2 @@ +(function(t){function e(e){for(var s,r,o=e[0],l=e[1],c=e[2],u=0,h=[];u0?a("span",[t._v(t._s(t.notif_nb))]):t._e()]},proxy:!0}],null,!0)},[a("v-icon",t._g({on:{click:function(e){t.notif_nb=0}}},s),[t._v("notifications")])],1)]}}]),model:{value:t.notif_menu,callback:function(e){t.notif_menu=e},expression:"notif_menu"}},[a("v-card",{attrs:{"min-width":"500px","max-width":"500px"}},[a("v-list",{attrs:{"max-height":"700px"}},[0===t.messages.length?a("v-list-item",[a("v-list-item-content",[a("v-list-item-subtitle",[t._v("No new notifications")])],1)],1):t._e(),t._l(t.messages,function(e,s){return a("v-list-item",{key:s,attrs:{to:e.link}},[a("v-list-item-avatar",[a("v-icon",{attrs:{dark:"",color:e.color,size:"62"}},[t._v(t._s(e.icon))])],1),a("v-list-item-content",[a("v-list-item-title",[t._v(t._s(e.text))]),a("v-list-item-subtitle",[t._v(t._s(e.tag))])],1)],1)})],2),a("v-card-actions",{directives:[{name:"show",rawName:"v-show",value:t.messages.length>0,expression:"messages.length > 0"}]},[a("v-spacer"),a("v-btn",{attrs:{text:""},on:{click:function(e){t.messages=[]}}},[t._v("Clear")])],1)],1)],1),a("v-menu",{attrs:{bottom:"",left:"","offset-y":"","offset-x":"","close-on-click":""},scopedSlots:t._u([{key:"activator",fn:function(e){var s=e.on;return[a("v-btn",t._g({attrs:{icon:""}},s),[a("v-icon",[t._v("mdi-dots-vertical")])],1)]}}])},[a("v-list",[a("v-list-item",{on:{click:t.toggleTheme}},[a("v-list-item-title",[t._v("Toggle Theme")])],1),a("v-divider"),a("v-list-item",{on:{click:t.logout}},[a("v-list-item-title",[t._v("Logout")])],1)],1)],1)],1),a("v-content",[a("v-container",[a("v-fade-transition",{attrs:{mode:"out-in"}},[a("router-view")],1)],1)],1)],1)},o=[],l={methods:{fnmatch(t){if(-1===t.indexOf("*"))return e=>t===e;{let e=/[\\^$.*+?()[\]{}|]/g,a=t.replace(e,"\\$&"),s=new RegExp("^"+a.replace(/\\\*/g,".*")+"$");return t=>s.test(t)}},sleep(t){return new Promise(e=>setTimeout(e,t))}}},c={name:"Layout",props:{source:String},data:()=>({expand_search:!1,notif_menu:!1,searchInput:"",drawer:!0,mini:!0,messages:[],settings:null,notif_nb:0,notifs:{created:!1,published:!1,returned:!1,event:!1},routes:[{name:"Overview",path:"/",icon:"dashboard"},{name:"Minions",path:"/minions",icon:"device_hub"},{name:"Jobs",path:"/jobs",icon:"playlist_play"},{name:"Run",path:"/run",icon:"play_arrow"},{name:"Job Templates",path:"/job_templates",icon:"playlist_add_check"},{name:"Schedules",path:"/schedules",icon:"schedule"},{name:"Conformity",path:"/conformity",icon:"done_all"},{name:"Keys",path:"/keys",icon:"compare_arrows"},{name:"Events",path:"/events",icon:"playlist_add"}]}),methods:{logout:function(){this.$store.dispatch("logout").then(()=>{this.$router.push("/login")})},searchBar(){""!==this.searchInput&&this.$router.push({name:"search",query:{q:this.searchInput}})},getPrefs(){this.$http.get("api/userssettings/"+this.$store.getters.user_id+"/").then(t=>{this.settings=t.data,Object.keys(this.notifs).forEach(t=>{this.notifs[t]=this.settings["notifs_"+t]})})},toggleTheme(){this.$store.dispatch("toggleTheme").then(()=>{this.$vuetify.theme.dark=JSON.parse(this.$store.state.theme)})},saltStatus(){let t=l.methods.fnmatch("salt/job/*"),e=l.methods.fnmatch("salt/job/*/new"),a=l.methods.fnmatch("salt/job/*/ret/*"),s=new EventSource("/api/event_stream/");s.addEventListener("open",()=>{this.$store.dispatch("updateWs")}),s.addEventListener("message",s=>{let n=JSON.parse(s.data);if(e(n.tag)&&!0===this.notifs.published){n.type="new",n.color="green",n.icon="keyboard_tab",n.link="";let t="";t=n.data.hasOwnProperty("tgt")?n.data.tgt:n.data.minions.length+" minion(s)",n.text="Job "+n.data.fun+" published for "+t,this.messages.unshift(n),this.messages.length>this.settings.max_notifs&&this.messages.pop(),this.notif_nb+=1}else a(n.tag)&&!0===this.notifs.returned?(n.type="return",n.color="primary",n.icon="subdirectory_arrow_left",n.text="Job "+n.data.fun+" returned for "+n.data.id,n.link="/jobs/"+n.data.jid+"/"+n.data.id,this.messages.unshift(n),this.messages.length>this.settings.max_notifs&&this.messages.pop(),this.notif_nb+=1):t(n.tag)&&!0===this.notifs.event?(n.type="event",n.color="orange",n.icon="more_horiz",n.text="Job Event",n.link="",this.messages.unshift(n),this.messages.length>this.settings.max_notifs&&this.messages.pop(),this.notif_nb+=1):/^\w{20}$/.test(n.tag)&&!0===this.notifs.created&&(n.type="created",n.color="secondary",n.icon="add",n.text="New Job Created",n.link="",this.messages.unshift(n),this.messages.length>this.settings.max_notifs&&this.messages.pop(),this.notif_nb+=1)},!1)}},mounted(){this.getPrefs(),this.saltStatus(),this.$vuetify.theme.dark=JSON.parse(this.$store.getters.theme)},computed:{username(){return this.$store.state.username},email(){return this.$store.state.email},theme(){return this.$store.state.theme}}},d=c,u=(a("355a"),a("2877")),h=a("6544"),m=a.n(h),v=a("7496"),p=a("40dc"),f=a("5bc1"),b=a("4ca6"),_=a("8336"),g=a("b0af"),y=a("99d9"),x=a("a523"),k=a("a75b"),C=a("ce7e"),w=a("0789"),j=a("132d"),V=a("8860"),S=a("da13"),T=a("1800"),$=a("8270"),D=a("5d23"),O=a("e449"),E=a("f774"),R=a("2fa4"),A=a("8654"),F=a("2a7f"),I=a("3a2f"),P=Object(u["a"])(d,r,o,!1,null,null,null),M=P.exports;m()(P,{VApp:v["a"],VAppBar:p["a"],VAppBarNavIcon:f["a"],VBadge:b["a"],VBtn:_["a"],VCard:g["a"],VCardActions:y["a"],VContainer:x["a"],VContent:k["a"],VDivider:C["a"],VExpandTransition:w["a"],VFadeTransition:w["d"],VIcon:j["a"],VList:V["a"],VListItem:S["a"],VListItemAction:T["a"],VListItemAvatar:$["a"],VListItemContent:D["a"],VListItemSubtitle:D["b"],VListItemTitle:D["c"],VMenu:O["a"],VNavigationDrawer:E["a"],VSpacer:R["a"],VTextField:A["a"],VToolbarTitle:F["a"],VTooltip:I["a"]});var L=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("router-view")},N=[],J={name:"SimpleLayout"},q=J,U=Object(u["a"])(q,L,N,!1,null,"0f66a338",null),z=U.exports,B={computed:{layout(){return this.$route.meta.plainLayout}},components:{"app-layout":M,"simple-layout":z}},H=B,K=(a("034f"),Object(u["a"])(H,n,i,!1,null,null,null)),G=K.exports;m()(K,{VApp:v["a"]});a("5363");var W=a("f309"),Y=a("2db4"),Q=a("87f6"),X=a.n(Q);s["a"].use(W["a"],{components:{VSnackbar:Y["a"],VBtn:_["a"],VIcon:j["a"]}}),s["a"].use(X.a,{x:"center",y:"bottom",color:"black",icon:"info",iconColor:"",classes:["body-2"],timeout:3e3,dismissable:!0,multiLine:!1,vertical:!1,queueable:!1,showClose:!0,closeText:"",closeColor:"",shorts:{custom:{color:"purple"}},property:"$toast"});var Z=new W["a"]({icons:{iconfont:"md"},theme:{themes:{light:{primary:"#6200EE",secondary:"#03DAC6"},dark:{secondary:"#BB86FC",primary:"#03DAC6"}}}}),tt=a("8c4f"),et=a("2f62"),at=a("bc3a"),st=a.n(at);s["a"].use(et["a"]);var nt=new et["a"].Store({state:{username:localStorage.getItem("username")||"",email:localStorage.getItem("email")||"",id:localStorage.getItem("id")||"",access:localStorage.getItem("access")||"",refresh:localStorage.getItem("refresh")||"",ws_status:!1,theme:localStorage.getItem("theme")||!1},mutations:{auth_success(t,e){Object.keys(e).forEach(a=>{t[a]=e[a]})},logout(t){t.access=""},updateWs(t){t.ws_status=!0},toggleTheme(t){t.theme=!t.theme,localStorage.setItem("theme",JSON.stringify(t.theme))}},getters:{isLoggedIn:t=>!!t.access,theme:t=>t.theme,user_id:t=>t.id},actions:{updateWs({commit:t}){t("updateWs")},toggleTheme({commit:t}){t("toggleTheme")},login({commit:t},e){return new Promise((a,s)=>{st()({url:"/api/token/",data:e,method:"POST"}).then(e=>{Object.keys(e.data).forEach(t=>{localStorage.setItem(t,e.data[t])}),st.a.defaults.headers.common.Authorization=`Bearer ${e.data.access}`,t("auth_success",e.data),a(e)}).catch(t=>{localStorage.clear(),s(t)})})},logout({commit:t}){return new Promise(e=>{t("logout"),localStorage.clear(),delete st.a.defaults.headers.common["Authorization"],e()})}}}),it=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",[a("v-col",{attrs:{sm:"12",lg:"7"}},[a("ConformityChart")],1),a("v-col",{attrs:{sm:"6",lg:"2"}},[a("KeysStatusCard")],1),a("v-col",{attrs:{sm:"6",lg:"3"}},[a("AlcaliStatusCard")],1)],1),a("v-row",[a("v-col",{attrs:{lg:"12"}},[a("JobsChartCard")],1)],1),a("v-row",[a("v-col",{attrs:{lg:"12"}},[a("JobsTable",{attrs:{filter:{limit:10}}})],1)],1)],1)},rt=[],ot=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-card-title",[t._v("Keys")]),a("v-simple-table",[a("tbody",t._l(t.keys_status,function(e,s){return a("tr",{key:s},[a("td",{staticClass:"pr-0"},[a("v-icon",[t._v(t._s(t.statusIcon(s)))])],1),a("td",{staticClass:"pl-0"},[t._v(t._s(s))]),a("td",{staticClass:"text-right"},[t._v(t._s(e)+" / "+t._s(t.keys_total))])])}),0)])],1)],1)},lt=[],ct={name:"KeysStatusCard",data(){return{keys_status:{},keys_total:0}},mounted(){this.loadData()},methods:{loadData(){this.$http.get("api/keys/keys_status/").then(t=>{this.keys_status=t.data,this.keys_total=Object.values(t.data).reduce((t,e)=>t+e)})},statusIcon(t){switch(t){case"accepted":return"check";case"rejected":return"first_page";case"denied":return"close";case"unaccepted":return"refresh"}}}},dt=ct,ut=a("1f4f"),ht=Object(u["a"])(dt,ot,lt,!1,null,"b6756222",null),mt=ht.exports;m()(ht,{VCard:g["a"],VCardTitle:y["c"],VContainer:x["a"],VIcon:j["a"],VSimpleTable:ut["a"]});var vt=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",{attrs:{elevation:null==t.minion?2:0}},[a("v-list-item",{attrs:{"three-line":"",dense:""}},[a("v-list-item-content",[a("v-list-item-title",{staticClass:"headline mb-1"},[t._v("Jobs Stats")])],1),a("v-spacer"),a("v-list-item-content",{staticClass:"mr-6"},[a("v-select",{attrs:{items:t.filters,label:"Filter","return-object":""},on:{change:t.loadData},model:{value:t.selectedFilter,callback:function(e){t.selectedFilter=e},expression:"selectedFilter"}})],1),a("v-list-item-content",[a("v-select",{attrs:{items:t.periods,label:"Period","return-object":""},on:{change:t.loadData},model:{value:t.selectedPeriod,callback:function(e){t.selectedPeriod=e},expression:"selectedPeriod"}})],1)],1),a("canvas",{ref:"chart"})],1)],1)},pt=[],ft=a("30ef"),bt=a.n(ft);let _t={afterLayout:function(t){if(t.options.linearGradientLine){let e=t.chart.ctx;t.data.datasets.forEach(a=>{let s=Number.MAX_VALUE,n=Number.MIN_VALUE;for(let t=0;ta.data[t]&&(s=a.data[t]),n{let s=(t.chartArea.left+t.chartArea.right)/2,n=(t.chartArea.top+t.chartArea.bottom)/2,i=e.createRadialGradient(s,n,2*t.innerRadius*.2,s,n,2*t.innerRadius);i.addColorStop(0,a.colorStart),i.addColorStop(1,a.colorEnd),a.backgroundColor=i})}}};var gt=_t,yt={name:"JobsChartCard",props:["minion"],data(){return{filters:[{text:"All",value:"all"},{text:"Highstate",value:"highstate"},{text:"Other",value:"other"}],periods:[{text:"Week",value:7},{text:"Two Weeks",value:14},{text:"Month",value:30},{text:"Year",value:365}],jobchart:null,selectedFilter:null,selectedPeriod:null,labels:null,chart_data:[]}},mounted(){this.createChart()},methods:{loadData(){let t=null==this.selectedFilter?"all":this.selectedFilter.value,e=null==this.selectedPeriod?7:this.selectedPeriod.value,a={params:{fun:t,period:e}};this.minion&&(a.params.id=this.minion),this.$http.get("api/jobs/graph",a).then(t=>{this.jobchart.data.labels=t.data.labels,this.jobchart.data.datasets[0].data=t.data.series[0],this.jobchart.data.datasets[1].data=t.data.series[1],this.jobchart.update()})},createChart(){let t=null==this.selectedFilter?"all":this.selectedFilter.value,e=null==this.selectedPeriod?7:this.selectedPeriod.value,a={params:{fun:t,period:e}};this.minion&&(a.params.id=this.minion),null!=this.jobchart&&this.jobchart.destroy(),this.$http.get("api/jobs/graph",a).then(t=>{this.labels=t.data.labels,this.chart_data[0]=t.data.series[0],this.chart_data[1]=t.data.series[1],this.$refs.chart.height=60,this.jobchart=new bt.a(this.$refs.chart,{type:"line",data:{labels:this.labels,datasets:[{lineTension:.1,pointRadius:1,data:this.chart_data[0],fill:!1,colorStart:"rgba(0, 173, 238, 1.0)",colorEnd:"rgba(231, 18, 143, 1.0)"},{lineTension:.1,pointRadius:1,data:this.chart_data[1],fill:!1,colorStart:"rgba(255, 255, 255, 1.0)",colorEnd:"rgba(255, 0, 0, 1.0)"}]},options:{linearGradientLine:!0,legend:{display:!1},scales:{xAxes:[{gridLines:{display:!0}}],yAxes:[{gridLines:{display:!0},ticks:{autoSkip:!0,beginAtZero:!0,maxTicksLimit:6}}]},responsive:!0},plugins:[gt]})})}}},xt=yt,kt=a("b974"),Ct=Object(u["a"])(xt,vt,pt,!1,null,"e0df043e",null),wt=Ct.exports;m()(Ct,{VCard:g["a"],VContainer:x["a"],VListItem:S["a"],VListItemContent:D["a"],VListItemTitle:D["c"],VSelect:kt["a"],VSpacer:R["a"]});var jt=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-card-title",[t._v("Status")]),a("v-simple-table",[a("tbody",[a("tr",[a("td",[t._v("Salt WebSocket")]),a("td",{staticClass:"text-right"},[a("v-chip",{attrs:{color:t.wsStatus?"green":"red","text-color":"white"}},[t._v("\n "+t._s(t.wsStatus?"OK":"NOT OK")+"\n ")])],1)]),t._l(t.stats,function(e,s){return a("tr",{key:s},[a("td",[t._v(t._s(s))]),a("td",{staticClass:"text-right"},[t._v(t._s(e))])])})],2)])],1)],1)},Vt=[],St={name:"AlcaliStatusCard",mixins:[l],data(){return{stats:{}}},mounted(){this.loadData()},computed:{wsStatus(){return this.$store.state.ws_status}},methods:{loadData(){this.$http.get("api/stats/").then(t=>this.stats=t.data)}}},Tt=St,$t=a("cc20"),Dt=Object(u["a"])(Tt,jt,Vt,!1,null,"1eb41eb0",null),Ot=Dt.exports;m()(Dt,{VCard:g["a"],VCardTitle:y["c"],VChip:$t["a"],VContainer:x["a"],VSimpleTable:ut["a"]});var Et=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-card-title",[t._v("Conformity")]),a("v-card-text",[a("v-container",[t._l(t.conformitynames,function(e){return[a("v-row",{key:e,attrs:{"no-gutters":"",align:"center",justify:"center"}},[a("v-col",{attrs:{sm:"2"}},[t._v(t._s(e))]),a("v-col",{attrs:{sm:"10"}},[a("v-menu",{attrs:{"open-on-hover":"","max-width":"250px"},scopedSlots:t._u([{key:"activator",fn:function(s){var n=s.on;return[a("canvas",t._g({ref:e,refInFor:!0,attrs:{height:"15"}},n))]}}],null,!0)},[a("v-simple-table",{attrs:{dense:""}},[a("thead",[a("tr",[a("th",[t._v(t._s(e))])])]),a("tbody",{domProps:{innerHTML:t._s(t.customTool)}})])],1)],1)],1)]})],2)],1)],1)],1)},Rt=[],At=(a("02d0"),a("fcf4")),Ft={name:"ConformityChart",data(){return{conformitynames:null,confchart:null,conformity:null,customTool:""}},created(){},mounted(){this.loadConformity()},methods:{loadConformity(){this.$http.get("api/minions/conformity/").then(t=>{this.conformity=t.data.data,this.conformitynames=t.data.name}).then(()=>{this.conformity.forEach((t,e)=>{let a={labels:[this.conformitynames[e]],datasets:[]};Object.keys(t).forEach(e=>{let s="";if(["conflict","false"].indexOf(e)>=0)s="#F44336";else if(["conform","true"].indexOf(e)>=0)s="#41f40e";else if(["None","unknown","null"].indexOf(e)>=0)s=this.$vuetify.theme.themes.light.primary;else{let t=Object.keys(At["a"]);s=At["a"][t[t.length*Math.random()<<0]].darken2}a.datasets.push({label:e,data:[t[e]],backgroundColor:s})}),new bt.a(this.$refs[this.conformitynames[e]],{type:"horizontalBar",data:a,options:{animation:!1,plugins:{stacked100:{enable:!0}},tooltips:{enabled:!1,mode:"index",intersect:!1,custom:t=>{if(t&&t.body){let e=t.body.map(t=>t.lines),a="";e.forEach(function(e,s){let n=t.labelColors[s],i="background:"+n.backgroundColor;i+="; border-color:"+n.borderColor,i+="; border-width: 2px";let r=`__`;a+=""+r+" "+e+""}),this.customTool=a}}},legend:{display:!1},scales:{xAxes:[{stacked:!0,display:!1,gridLines:{display:!1,drawTicks:!1,drawBorder:!1},ticks:{display:!1,padding:-20}}],yAxes:[{stacked:!0,display:!1,ticks:{display:!1,padding:-20},gridLines:{drawTicks:!1,display:!1,drawBorder:!1}}]}}})})})}}},It=Ft,Pt=(a("3244"),a("62ad")),Mt=a("0fd9"),Lt=Object(u["a"])(It,Et,Rt,!1,null,"bcf3f6c0",null),Nt=Lt.exports;m()(Lt,{VCard:g["a"],VCardText:y["b"],VCardTitle:y["c"],VCol:Pt["a"],VContainer:x["a"],VMenu:O["a"],VRow:Mt["a"],VSimpleTable:ut["a"]});var Jt=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[null==t.filter?a("v-row",{attrs:{"no-gutters":""}},[a("v-col",{attrs:{sm:"12"}},[a("v-card",{staticClass:"mb-8"},[a("v-row",[a("v-col",{attrs:{lg:"2"}},[a("v-card-title",[t._v("Search Jobs")])],1),a("v-divider"),a("v-col",{attrs:{lg:"2","align-self":"center"}},[a("v-menu",{ref:"menu",attrs:{"close-on-content-click":!1,"return-value":t.selectedDate,transition:"scale-transition","offset-y":"","min-width":"290px"},on:{"update:returnValue":function(e){t.selectedDate=e},"update:return-value":function(e){t.selectedDate=e}},scopedSlots:t._u([{key:"activator",fn:function(e){var s=e.on;return[a("v-text-field",t._g({attrs:{label:"Select date(s)",readonly:""},model:{value:t.dateRangeText,callback:function(e){t.dateRangeText=e},expression:"dateRangeText"}},s))]}}],null,!1,4129137489),model:{value:t.menu,callback:function(e){t.menu=e},expression:"menu"}},[a("v-date-picker",{attrs:{max:(new Date).toISOString().split("T")[0],reactive:"","no-title":"",range:""},model:{value:t.selectedDate,callback:function(e){t.selectedDate=e},expression:"selectedDate"}},[a("div",{staticClass:"flex-grow-1"}),a("v-btn",{attrs:{text:"",color:"primary"},on:{click:function(e){t.menu=!1}}},[t._v("Cancel")]),a("v-btn",{attrs:{text:"",color:"primary"},on:{click:function(e){return t.$refs.menu.save(t.selectedDate)}}},[t._v("OK")])],1)],1)],1),a("v-col",{attrs:{lg:"2"}},[a("v-autocomplete",{attrs:{items:t.users,label:"User(s)",multiple:"","single-line":""},scopedSlots:t._u([{key:"selection",fn:function(e){var s=e.item,n=e.index;return[0===n?a("span",[t._v(t._s(s))]):t._e(),1===n?a("span",{staticClass:"grey--text caption"},[t._v(" (+"+t._s(t.selectedUsers.length-1)+" others)")]):t._e()]}}],null,!1,2591977476),model:{value:t.selectedUsers,callback:function(e){t.selectedUsers=e},expression:"selectedUsers"}})],1),a("v-col",{attrs:{lg:"2"}},[a("v-autocomplete",{attrs:{items:t.minions,label:"Target(s)",multiple:"","single-line":""},scopedSlots:t._u([{key:"selection",fn:function(e){var s=e.item,n=e.index;return[0===n?a("span",[t._v(t._s(s))]):t._e(),1===n?a("span",{staticClass:"grey--text caption"},[t._v(" (+"+t._s(t.selectedTarget.length-1)+" others)")]):t._e()]}}],null,!1,3190666039),model:{value:t.selectedTarget,callback:function(e){t.selectedTarget=e},expression:"selectedTarget"}})],1),a("v-col",{attrs:{lg:"1"}},[a("v-select",{attrs:{items:t.limit,label:"Limit","single-line":""},model:{value:t.selectedLimit,callback:function(e){t.selectedLimit=e},expression:"selectedLimit"}})],1),a("v-col",{attrs:{lg:"1","align-self":"center"}},[a("div",{staticClass:"text-center"},[a("v-btn",{attrs:{color:"primary"},on:{click:t.filterJobs}},[t._v("Search\n ")])],1)])],1)],1)],1)],1):t._e(),a("v-row",{attrs:{"no-gutters":""}},[a("v-col",{attrs:{sm:"12"}},[a("v-card",{attrs:{elevation:null==t.filter?2:0}},[a("v-card-title",[t._v("\n Jobs\n "),a("v-spacer"),a("v-text-field",{attrs:{"append-icon":"search",label:"Search","single-line":"","hide-details":""},model:{value:t.search,callback:function(e){t.search=e},expression:"search"}})],1),a("v-data-table",{staticClass:"elevation-1",attrs:{"sort-by":"jid","sort-desc":"","item-key":"uniqueid",headers:t.filteredHeaders,items:t.indexedItems,search:t.search,loading:t.loading},scopedSlots:t._u([{key:"item.jid",fn:function(e){var s=e.item;return[a("v-btn",{staticClass:"text-none",attrs:{text:"",small:"",to:"/jobs/"+s.jid+"/"+s.id}},[t._v(t._s(s.jid))])]}},{key:"item.id",fn:function(e){var s=e.item;return[a("v-btn",{directives:[{name:"show",rawName:"v-show",value:!t.filter,expression:"!filter"}],staticClass:"text-none",attrs:{text:"",small:"",to:"/minions/"+s.id}},[t._v(t._s(s.id))])]}},{key:"item.arguments",fn:function(e){var a=e.item;return[t._v("\n "+t._s(a.arguments.length>20?a.arguments.slice(0,20)+"...":a.arguments)+"\n ")]}},{key:"item.keyword_arguments",fn:function(e){var a=e.item;return[t._v("\n "+t._s(a.keyword_arguments.length>20?a.keyword_arguments.slice(0,20)+"...":a.keyword_arguments)+"\n ")]}},{key:"item.success",fn:function(e){var s=e.item;return[a("v-chip",{attrs:{color:t.boolRepr(s.success),dark:""}},[t._v(t._s(t.boolText(s.success)))])]}},{key:"item.alter_time",fn:function(e){var a=e.item;return[t._v("\n "+t._s(new Date(a.alter_time).toLocaleString("en-GB"))+"\n ")]}},{key:"item.action",fn:function(e){var s=e.item;return[a("div",{staticClass:"text-center"},[a("v-btn",{staticClass:"ma-2",attrs:{small:"",color:"blue",tile:"",dark:"",to:"/jobs/"+s.jid+"/"+s.id}},[t._v("\n detail\n ")]),a("v-btn",{staticClass:"ma-2",attrs:{small:"",color:"blue-grey",tile:"",dark:"",to:"/run?tgt="+s.id+"&fun="+s.fun+"&arg="+s.arguments+"&kwarg="+s.keyword_arguments}},[t._v("\n rerun\n ")])],1)]}}])})],1)],1)],1)],1)},qt=[],Ut={name:"JobsTable",props:["filter"],data(){return{menu:!1,limit:[50,100,200,500,1e3],selectedDate:[],selectedLimit:null,selectedUsers:null,selectedTarget:null,minions:[],users:[],search:"",headers:[{text:"Jid",value:"jid"},{text:"Target",value:"id"},{text:"Function",value:"fun"},{text:"Arguments",value:"arguments"},{text:"Keyword Arguments",value:"keyword_arguments"},{text:"User",value:"user"},{text:"Status",value:"success"},{text:"Date",value:"alter_time"},{text:"Actions",value:"action",sortable:!1}],jobs:[],loading:!0}},computed:{indexedItems(){return this.jobs.map((t,e)=>({uniqueid:e,...t}))},dateRangeText(){return this.selectedDate.join(" ~ ")},filteredHeaders(){return this.filter&&this.filter.hasOwnProperty("target[]")&&this.headers.splice(1,1),this.headers}},mounted(){this.loadData()},methods:{loadData(){this.$http.get("api/jobs/filters/").then(t=>{this.minions=t.data.minions,this.users=t.data.users}),this.$http.get("api/jobs/",{params:this.filter}).then(t=>{this.jobs=t.data,this.loading=!1})},filterJobs(){this.loading=!0;let t={limit:this.selectedLimit,target:this.selectedTarget,users:this.selectedUsers};this.selectedDate.length>0&&(t.start=this.selectedDate[0],t.end=this.selectedDate[1]||this.selectedDate[0]),this.$http.get("api/jobs/",{params:t}).then(t=>{this.jobs=t.data,this.loading=!1,this.selectedUsers=this.selectedTarget=this.selectedLimit=this.selectedDate=null,this.selectedDate=[]})},boolRepr(t){return!0===t?"green":"red"},boolText(t){return!0===t?"success":"failed"}}},zt=Ut,Bt=a("c6a6"),Ht=a("8fea"),Kt=a("2e4b"),Gt=Object(u["a"])(zt,Jt,qt,!1,null,"63e073c0",null),Wt=Gt.exports;m()(Gt,{VAutocomplete:Bt["a"],VBtn:_["a"],VCard:g["a"],VCardTitle:y["c"],VChip:$t["a"],VCol:Pt["a"],VContainer:x["a"],VDataTable:Ht["a"],VDatePicker:Kt["a"],VDivider:C["a"],VMenu:O["a"],VRow:Mt["a"],VSelect:kt["a"],VSpacer:R["a"],VTextField:A["a"]});var Yt={name:"home",components:{JobsTable:Wt,ConformityChart:Nt,AlcaliStatusCard:Ot,KeysStatusCard:mt,JobsChartCard:wt}},Qt=Yt,Xt=Object(u["a"])(Qt,it,rt,!1,null,null,null),Zt=Xt.exports;m()(Xt,{VCol:Pt["a"],VContainer:x["a"],VRow:Mt["a"]});var te=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-app",{attrs:{id:"inspire"}},[a("v-content",[a("v-container",{staticClass:"fill-height",attrs:{fluid:""}},[a("v-row",{attrs:{align:"center",justify:"center"}},[a("v-col",{attrs:{cols:"12",sm:"8",md:"4"}},[a("h1",{staticClass:"text-center font-weight-bold display-4 mb-8"},[t._v("ALCALI")]),a("v-card",{staticClass:"elevation-12"},[a("v-toolbar",{attrs:{color:"black",dark:"",flat:""}},[a("v-toolbar-title",[t._v("Login")]),a("v-spacer")],1),a("v-card-text",[a("v-form",[a("v-text-field",{attrs:{label:"Login",name:"login","prepend-icon":"person",type:"text"},model:{value:t.username,callback:function(e){t.username=e},expression:"username"}}),a("v-text-field",{attrs:{label:"Password",name:"password","prepend-icon":"lock",type:"password"},model:{value:t.password,callback:function(e){t.password=e},expression:"password"}})],1)],1),a("v-card-actions",[a("v-spacer"),a("v-btn",{attrs:{color:"primary",dark:""},on:{click:function(e){return e.preventDefault(),t.authenticate(e)}}},[t._v("Login")])],1)],1)],1)],1)],1)],1)],1)},ee=[],ae={name:"Login",data:()=>({username:null,password:null}),methods:{authenticate(){let t=this.username,e=this.password;this.$store.dispatch("login",{username:t,password:e}).then(()=>this.$router.push("/")).catch(t=>{this.$toast.error("Invalid Login / Password")})}}},se=ae,ne=(a("a084"),a("4bd4")),ie=a("71d9"),re=Object(u["a"])(se,te,ee,!1,null,"e48ee6a0",null),oe=re.exports;m()(re,{VApp:v["a"],VBtn:_["a"],VCard:g["a"],VCardActions:y["a"],VCardText:y["b"],VCol:Pt["a"],VContainer:x["a"],VContent:k["a"],VForm:ne["a"],VRow:Mt["a"],VSpacer:R["a"],VTextField:A["a"],VToolbar:ie["a"],VToolbarTitle:F["a"]});var le=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",[a("v-col",{attrs:{sm:"12",cols:"12"}},[a("JobsTable")],1)],1)],1)},ce=[],de={name:"Jobs",components:{JobsTable:Wt}},ue=de,he=Object(u["a"])(ue,le,ce,!1,null,"4867fa69",null),me=he.exports;m()(he,{VCol:Pt["a"],VContainer:x["a"],VRow:Mt["a"]});var ve=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",[a("v-col",{attrs:{sm:"12"}},[a("KeysTable",{key:t.refreshKey})],1)],1),t.fabs?a("Fab",{attrs:{fabs:t.fabs},on:{fab_action:t.fabAction}}):t._e()],1)},pe=[],fe=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-card-title",[t._v("\n Keys\n "),a("v-spacer"),a("v-text-field",{attrs:{"append-icon":"search",label:"Search","single-line":"","hide-details":""},model:{value:t.search,callback:function(e){t.search=e},expression:"search"}})],1),a("v-data-table",{staticClass:"elevation-1",attrs:{"sort-by":"minion_id",headers:t.headers,items:t.keys,search:t.search,loading:t.loading},scopedSlots:t._u([{key:"item.minion_id",fn:function(e){var s=e.item;return["accepted"===s.status?[a("v-btn",{staticClass:"text-none",attrs:{text:"",small:"",to:"/minions/"+s.minion_id}},[t._v(t._s(s.minion_id))])]:[t._v("\n "+t._s(s.minion_id)+"\n ")]]}},{key:"item.status",fn:function(e){var s=e.item;return[a("v-chip",{attrs:{color:t.keysRepr(s.status),dark:""}},[t._v(t._s(s.status.toString()))])]}},{key:"item.action",fn:function(e){var s=e.item;return[t._l(t.keyAction(s.status),function(e){return[a("v-btn",{key:e,staticClass:"ma-2",attrs:{small:"",dark:"",color:t.keysRepr(e)},on:{click:function(a){return t.manageKey(e,s.minion_id)}}},[t._v("\n "+t._s(e)+"\n ")])]})]}}])})],1)],1)},be=[],_e={name:"KeysTable",data(){return{search:"",headers:[{text:"Minion Id",value:"minion_id"},{text:"Status",value:"status"},{text:"Public Key",value:"pub"},{text:"Actions",value:"action",sortable:!1}],keys:[],loading:!0}},mounted(){this.loadData()},methods:{loadData(){this.$http.get("api/keys/").then(t=>{this.keys=t.data,this.loading=!1})},sleep(t){return new Promise(e=>setTimeout(e,t))},keysRepr(t){return t.startsWith("accept")?"green":t.startsWith("reject")?"orange":t.startsWith("de")?"red":"grey"},keyAction(t){return"accepted"===t?["reject","delete"]:"rejected"===t?["accept","delete"]:"denied"===t?["accept"]:["accept","delete"]},manageKey(t,e){let a=new FormData;a.set("action",t),a.set("target",e),this.$http.post("api/keys/manage_keys/",a).then(t=>{this.$toast(t.data.result)}),this.sleep(2e3).then(()=>{this.loadData()})}}},ge=_e,ye=Object(u["a"])(ge,fe,be,!1,null,"50efcc63",null),xe=ye.exports;m()(ye,{VBtn:_["a"],VCard:g["a"],VCardTitle:y["c"],VChip:$t["a"],VContainer:x["a"],VDataTable:Ht["a"],VSpacer:R["a"],VTextField:A["a"]});var ke=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-speed-dial",{attrs:{fixed:"",bottom:"",right:"",direction:"top",transition:"slide-y-reverse-transition"},scopedSlots:t._u([{key:"activator",fn:function(){return[a("v-btn",{attrs:{color:"primary",fab:""},model:{value:t.fab,callback:function(e){t.fab=e},expression:"fab"}},[t.fab?a("v-icon",[t._v("close")]):a("v-icon",[t._v("menu")])],1)]},proxy:!0}]),model:{value:t.fab,callback:function(e){t.fab=e},expression:"fab"}},[t._l(t.fabs,function(e){return[a("v-tooltip",{key:e.tooltip,attrs:{left:""},scopedSlots:t._u([{key:"activator",fn:function(s){var n=s.on;return[a("v-btn",t._g({attrs:{fab:"",dark:"",small:"",color:e.color},on:{click:function(a){return t.emit("fab_action",e.action)}}},n),[a("v-icon",[t._v(t._s(e.icon))])],1)]}}],null,!0)},[a("span",[t._v(t._s(e.tooltip))])])]})],2)},Ce=[],we={name:"Fab",props:["fabs"],methods:{emit(t,e){this.$emit(t,e)}},data:()=>({fab:!1})},je=we,Ve=a("c73b"),Se=Object(u["a"])(je,ke,Ce,!1,null,"56c34fbd",null),Te=Se.exports;m()(Se,{VBtn:_["a"],VIcon:j["a"],VSpeedDial:Ve["a"],VTooltip:I["a"]});var $e={name:"Keys",components:{Fab:Te,KeysTable:xe},data:()=>({fabs:[{color:"blue",action:"refreshKeys",icon:"compare_arrows",tooltip:"Refresh keys"},{color:"orange",action:"rejectAll",icon:"close",tooltip:"Reject all keys"},{color:"green",action:"acceptAll",icon:"done",tooltip:"Accept all keys"}],refreshKey:0}),methods:{fabAction(t){this[t]()},refreshKeys(){this.$toast("refreshing keys"),this.$http.post("/api/keys/refresh/").then(()=>{this.$toast("keys refreshed")}).then(()=>{this.refreshKey+=1}).catch(function(t){alert(t)})},acceptAll(){let t=new FormData;t.set("action","accept"),t.set("target","*"),this.$http.post("api/keys/manage_keys/",t).then(t=>{this.$toast(t.data.result)}).then(()=>{this.refreshKey+=1})},rejectAll(){let t=new FormData;t.set("action","reject"),t.set("target","*"),this.$http.post("api/keys/manage_keys/",t).then(t=>{this.$toast(t.data.result)}).then(()=>{this.refreshKey+=1})}}},De=$e,Oe=Object(u["a"])(De,ve,pe,!1,null,"47322cce",null),Ee=Oe.exports;m()(Oe,{VCol:Pt["a"],VContainer:x["a"],VRow:Mt["a"]});var Re=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",[a("v-col",{attrs:{sm:"12",cols:"12"}},[a("MinionsTable",{key:t.refreshKey}),t.fabs?a("Fab",{attrs:{fabs:t.fabs},on:{fab_action:t.fabAction}}):t._e()],1)],1)],1)},Ae=[],Fe=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-card-title",[t._v("\n Minions\n "),a("v-spacer"),a("v-text-field",{attrs:{"append-icon":"search",label:"Search","single-line":"","hide-details":""},model:{value:t.search,callback:function(e){t.search=e},expression:"search"}})],1),a("v-data-table",{staticClass:"elevation-1",attrs:{"sort-by":"minion_id",headers:t.headers,items:t.minions,search:t.search,loading:t.loading,"loading-text":"Loading... Please wait"},scopedSlots:t._u([{key:"item.minion_id",fn:function(e){var s=e.item;return[a("v-btn",{staticClass:"text-none",attrs:{text:"",small:"",to:"/minions/"+s.minion_id}},[t._v(t._s(s.minion_id))])]}},{key:"item.conformity",fn:function(e){var s=e.item;return[a("v-chip",{attrs:{color:t.boolRepr(s.conformity),dark:""}},[t._v(t._s(null==s.conformity?"unknown":s.conformity.toString())+"\n ")])]}},{key:"item.last_job",fn:function(e){var a=e.item;return[t._v("\n "+t._s(null===a.last_job?"":new Date(a.last_job).toLocaleString("en-GB"))+"\n ")]}},{key:"item.last_highstate",fn:function(e){var a=e.item;return[t._v("\n "+t._s(null===a.last_highstate?"":new Date(a.last_highstate).toLocaleString("en-GB"))+"\n ")]}},{key:"item.action",fn:function(e){var s=e.item;return[a("div",{staticClass:"text-center"},[a("v-btn",{staticClass:"ma-2",attrs:{small:"",color:"blue",tile:"",dark:""},on:{click:function(e){return t.refreshMinion(s.minion_id)}}},[t._v("\n refresh\n ")]),a("v-btn",{staticClass:"ma-2",attrs:{small:"",color:"blue-grey",tile:"",dark:"",to:"/run?tgt="+s.minion_id}},[t._v("\n run job\n ")]),a("v-btn",{staticClass:"ma-2",attrs:{small:"",color:"red",tile:"",dark:""},on:{click:function(e){return e.stopPropagation(),t.showDialog(s.minion_id)}}},[t._v("\n delete\n ")])],1)]}}])})],1),a("div",{staticClass:"text-center"},[a("v-dialog",{attrs:{width:"500"},model:{value:t.dialog,callback:function(e){t.dialog=e},expression:"dialog"}},[a("v-card",[a("v-card-title",{staticClass:"headline red",attrs:{"primary-title":""}},[t._v("\n Delete "+t._s(t.target)+" ?\n ")]),a("v-card-text",[a("br"),t._v("\n If you delete "+t._s(t.target)+" from the database, you will need to refresh all minions.\n ")]),a("v-divider"),a("v-card-actions",[a("v-spacer"),a("v-btn",{attrs:{color:"primary",text:""},on:{click:function(e){t.dialog=!1}}},[t._v("\n close\n ")]),a("v-btn",{attrs:{color:"red",text:""},on:{click:function(e){return t.deleteMinion(t.target)}}},[t._v("\n delete\n ")])],1)],1)],1)],1)],1)},Ie=[],Pe={name:"MinionsTable",data(){return{search:"",dialog:!1,headers:[{text:"Minion Id",value:"minion_id"},{text:"Highstate Conformity",value:"conformity"},{text:"F.Q.D.N",value:"fqdn"},{text:"O.S",value:"os"},{text:"O.S Version",value:"oscodename"},{text:"Kernel",value:"kernelrelease"},{text:"Last Job",value:"last_job"},{text:"Last Highstate",value:"last_highstate"},{text:"Actions",value:"action",sortable:!1}],minions:[],target:null,loading:!0}},mounted(){this.loadData()},methods:{loadData(){this.$http.get("api/minions/").then(t=>{function e(t){return t.forEach(t=>{let e=JSON.parse(t.grain);for(let a in e)t[a]=e[a]}),t}this.minions=e(t.data),this.loading=!1})},boolRepr(t){return!0===t?"green":!1===t?"red":"primary"},refreshMinion(t){this.$toast("refreshing "+t);let e=new FormData;e.set("minion_id",t),this.$http.post("/api/minions/refresh_minions/",e).then(t=>{this.$toast(t.data.result)})},deleteMinion(t){this.dialog=!1,this.$http.delete("/api/minions/"+t).then(()=>{this.minions.splice(this.minions.indexOf(t),1),this.$toast(t+" deleted")})},showDialog(t){this.target=t,this.dialog=!0}}},Me=Pe,Le=a("169a"),Ne=Object(u["a"])(Me,Fe,Ie,!1,null,"6727802c",null),Je=Ne.exports;m()(Ne,{VBtn:_["a"],VCard:g["a"],VCardActions:y["a"],VCardText:y["b"],VCardTitle:y["c"],VChip:$t["a"],VContainer:x["a"],VDataTable:Ht["a"],VDialog:Le["a"],VDivider:C["a"],VSpacer:R["a"],VTextField:A["a"]});var qe={name:"Minions",components:{Fab:Te,MinionsTable:Je},data:()=>({refreshKey:0,fabs:[{color:"pink",action:"refreshMinions",icon:"refresh",tooltip:"Refresh all minions"},{color:"orange",action:"runAll",icon:"playlist_play",tooltip:"Run job on all minions"}]}),methods:{fabAction(t){this[t]()},refreshMinions(){this.$toast("refreshing minions"),this.$http.post("/api/minions/refresh_minions/").then(()=>{this.$toast("minions refreshed")}).then(()=>{this.refreshKey+=1}).catch(function(t){alert(t)})},runAll(){this.$router.push("/run?tgt=*")}}},Ue=qe,ze=Object(u["a"])(Ue,Re,Ae,!1,null,"a997aed2",null),Be=ze.exports;m()(ze,{VCol:Pt["a"],VContainer:x["a"],VRow:Mt["a"]});var He=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",[a("v-col",{attrs:{sm:"12",lg:"3"}},[null!==t.minion?a("InfosCard",{attrs:{minion:t.minion}}):t._e(),null!==t.minion?a("NetworkCard",{attrs:{minion:t.minion}}):t._e()],1),a("v-col",{attrs:{sm:"12",lg:"9"}},[null!==t.minion?a("MinionDetailCard",{attrs:{minion:t.minion}}):t._e()],1),t.fabs?a("Fab",{attrs:{fabs:t.fabs},on:{fab_action:t.fabAction}}):t._e()],1)],1)},Ke=[],Ge=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-card-title",[t._v("Infos")]),a("v-tabs",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[a("v-tabs-slider"),a("v-tab",{attrs:{href:"#common"}},[t._v("\n Common\n ")]),a("v-tab",{attrs:{href:"#salt"}},[t._v("\n Salt\n ")]),a("v-tab",{attrs:{href:"#hardware"}},[t._v("\n Hardware\n ")])],1),a("v-tabs-items",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[a("v-tab-item",{attrs:{id:"common"}},[a("v-simple-table",[a("tbody",t._l(t.common,function(e){return a("tr",{key:e.name},[a("td",[t._v(t._s(e.name))]),"last_job"===e.grain||"last_highstate"===e.grain&&null!==t.minion[e.grain]?a("td",{staticClass:"text-right"},[t._v(t._s(new Date(t.minion[e.grain]).toLocaleString("en-GB"))+"\n ")]):"conformity"===e.grain?a("td",{staticClass:"text-right"},[a("v-chip",{attrs:{color:t.boolRepr(t.minion[e.grain]),dark:""}},[t._v(t._s(null==t.minion[e.grain]?"unknown":t.minion[e.grain]))])],1):a("td",{staticClass:"text-right"},[t._v(t._s(t.minion[e.grain]))])])}),0)])],1),a("v-tab-item",{attrs:{id:"salt"}},[a("v-simple-table",[a("tbody",t._l(t.salt,function(e){return a("tr",{key:e.name},[a("td",[t._v(t._s(e.name))]),a("td",{staticClass:"text-right"},[t._v(t._s(t.minion[e.grain]))])])}),0)])],1),a("v-tab-item",{attrs:{id:"hardware"}},[a("v-simple-table",[a("tbody",t._l(t.hardware,function(e){return a("tr",{key:e.name},[a("td",[t._v(t._s(e.name))]),a("td",{staticClass:"text-right"},[t._v(t._s(t.minion[e.grain]))])])}),0)])],1)],1)],1)],1)},We=[],Ye={name:"InfosCard",data(){return{tab:null,common:[{name:"F.Q.D.N",grain:"fqdn"},{name:"O.S",grain:"os"},{name:"O.S Version",grain:"oscodename"},{name:"Kernel",grain:"kernelrelease"},{name:"Last Job",grain:"last_job"},{name:"Last Highstate",grain:"last_highstate"},{name:"Highstate Conformity",grain:"conformity"}],salt:[{name:"ID",grain:"id"},{name:"Master",grain:"master"},{name:"Salt Version",grain:"saltversion"},{name:"Salt Path",grain:"saltpath"},{name:"Python Version",grain:"pythonversion"}],hardware:[{name:"C.P.U Model",grain:"cpu_model"},{name:"Number of C.P.U",grain:"num_cpus"},{name:"Total Memory",grain:"mem_total"},{name:"Total Swap",grain:"swap_total"},{name:"Virtual",grain:"virtual"}]}},props:["minion"],methods:{boolRepr(t){return!0===t?"green":!1===t?"red":"primary"}}},Qe=Ye,Xe=a("71a3"),Ze=a("c671"),ta=a("fe57"),ea=a("aac8"),aa=a("9a96"),sa=Object(u["a"])(Qe,Ge,We,!1,null,"88be39d6",null),na=sa.exports;m()(sa,{VCard:g["a"],VCardTitle:y["c"],VChip:$t["a"],VContainer:x["a"],VSimpleTable:ut["a"],VTab:Xe["a"],VTabItem:Ze["a"],VTabs:ta["a"],VTabsItems:ea["a"],VTabsSlider:aa["a"]});var ia=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-card-title",[t._v("Network")]),a("v-tabs",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[a("v-tabs-slider"),a("v-tab",{attrs:{href:"#interface"}},[t._v("\n Interfaces\n ")]),a("v-tab",{attrs:{href:"#mac"}},[t._v("\n Mac\n ")]),a("v-tab",{attrs:{href:"#dns"}},[t._v("\n Dns\n ")])],1),a("v-tabs-items",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[a("v-tab-item",{attrs:{id:"interface"}},[a("v-simple-table",[a("tbody",[t._l(t.minion.ip_interfaces,function(e,s){return a("tr",{key:s},[a("td",[t._v(t._s(s))]),t._l(e,function(e){return a("td",{staticClass:"text-right"},[t._v(t._s(e))])})],2)}),a("tr",[a("td",[t._v("IPv4 GATEWAY")]),a("td",{staticClass:"text-right"},[t._v(t._s(t.minion.ip4_gw))])]),a("tr",[a("td",[t._v("IPv6 GATEWAY")]),a("td",{staticClass:"text-right"},[t._v(t._s(t.minion.ip6_gw))])])],2)])],1),a("v-tab-item",{attrs:{id:"mac"}},[a("v-simple-table",[a("tbody",t._l(t.minion.hwaddr_interfaces,function(e,s){return a("tr",{key:s},[a("td",[t._v(t._s(s))]),a("td",{staticClass:"text-right"},[t._v(t._s(e))])])}),0)])],1),a("v-tab-item",{attrs:{id:"dns"}},[a("v-simple-table",[a("tbody",t._l(t.minion.dns,function(e,s){return a("tr",{key:s},[a("td",[t._v(t._s(s))]),a("td",{staticClass:"text-right"},[t._v(t._s(e.length>=1?e:""))])])}),0)])],1)],1)],1)],1)},ra=[],oa={name:"NetworkCard",data(){return{tab:null,tabs:3}},props:["minion"]},la=oa,ca=Object(u["a"])(la,ia,ra,!1,null,"4e9c41e8",null),da=ca.exports;m()(ca,{VCard:g["a"],VCardTitle:y["c"],VContainer:x["a"],VSimpleTable:ut["a"],VTab:Xe["a"],VTabItem:Ze["a"],VTabs:ta["a"],VTabsItems:ea["a"],VTabsSlider:aa["a"]});var ua=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-tabs",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[a("v-tabs-slider"),a("v-tab",{attrs:{href:"#grain"}},[t._v("\n Grains\n ")]),a("v-tab",{attrs:{href:"#pillar"}},[t._v("\n Pillar\n ")]),a("v-tab",{attrs:{href:"#history"}},[t._v("\n History\n ")]),a("v-tab",{attrs:{href:"#graph"}},[t._v("\n Graph\n ")]),t._l(t.minion.custom_fields,function(e){return a("v-tab",{key:e.name},[t._v("\n "+t._s(e.name)+"\n ")])})],2),a("v-tabs-items",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[a("v-tab-item",{attrs:{id:"grain"}},[a("div",{staticClass:"text-right"},[a("v-btn",{staticClass:"overlayedBtn",on:{click:function(e){return t.fold("grainCm")}}},[t._v(t._s(t.grainCmFolded?"unfold":"fold"))])],1),a("codemirror",{ref:"grainCm",attrs:{options:t.cmOptions},model:{value:t.code,callback:function(e){t.code=e},expression:"code"}})],1),a("v-tab-item",{attrs:{id:"pillar"}},[a("div",{staticClass:"text-right"},[a("v-btn",{staticClass:"overlayedBtn",on:{click:function(e){return t.fold("pillarCm")}}},[t._v(t._s(t.pillarCmFolded?"unfold":"fold"))])],1),a("codemirror",{ref:"pillarCm",attrs:{options:t.cmOptions},model:{value:t.codepillar,callback:function(e){t.codepillar=e},expression:"codepillar"}})],1),a("v-tab-item",{attrs:{id:"history"}},[a("JobsTable",{attrs:{filter:{"target[]":t.minion.minion_id}}})],1),a("v-tab-item",{attrs:{id:"graph",eager:""}},[t.minion?a("JobsChartCard",{attrs:{minion:t.minion.minion_id}}):t._e()],1),t._l(t.minion.custom_fields,function(e){return a("v-tab-item",{key:e.name},[a("codemirror",{attrs:{options:t.cmOptions,value:t.yamlRepr(e.value)}})],1)})],2)],1)],1)},ha=[],ma=a("56b3"),va=a.n(ma),pa=a("8f94"),fa=(a("f4ba"),a("4895"),a("aedd"),a("cbc8"),a("8d70"),a("f9d4"),a("a7be"),a("ced0"),a("efe9"),a("651e")),ba=a.n(fa),_a={name:"MinionDetailCard",components:{JobsTable:Wt,JobsChartCard:wt,codemirror:pa["codemirror"]},data(){return{tab:null,code:ba.a.safeDump(JSON.parse(this.minion.grain)),codepillar:ba.a.safeDump(JSON.parse(this.minion.pillar)),grainCmFolded:!1,pillarCmFolded:!1,cmOptions:{tabSize:4,mode:"yaml",theme:"made-of-code",line:!0,autoRefresh:!0,lineNumbers:!1,readOnly:!0,cursorBlinkRate:0,foldGutter:!0,gutters:["CodeMirror-foldgutter"]}}},methods:{yamlRepr(t){return ba.a.safeDump(JSON.parse(t))},fold(t){!0===this[t+"Folded"]?(va.a.commands.unfoldAll(this.$refs[t].codemirror),this[t+"Folded"]=!1):(va.a.commands.foldAll(this.$refs[t].codemirror),this[t+"Folded"]=!0)}},props:["minion"]},ga=_a,ya=(a("15fa"),Object(u["a"])(ga,ua,ha,!1,null,"107b300f",null)),xa=ya.exports;function ka(t){let e=JSON.parse(t.grain);for(let a in e)t[a]=e[a];return t}m()(ya,{VBtn:_["a"],VCard:g["a"],VContainer:x["a"],VTab:Xe["a"],VTabItem:Ze["a"],VTabs:ta["a"],VTabsItems:ea["a"],VTabsSlider:aa["a"]});var Ca={name:"MinionDetail",components:{Fab:Te,MinionDetailCard:xa,InfosCard:na,NetworkCard:da},data(){return{minion:null,fabs:[{color:"blue",action:"refreshMinion",icon:"refresh",tooltip:"Refresh "+this.minion_id},{color:"purple",action:"runMinion",icon:"play_arrow",tooltip:"Run job on "+this.minion_id},{color:"orange",action:"highstateMinion",icon:"all_inclusive",tooltip:"Run highstate on "+this.minion_id}]}},mounted(){this.loadData()},methods:{loadData(){this.$http.get("api/minions/"+this.minion_id+"/").then(t=>this.minion=ka(t.data))},fabAction(t){this[t]()},refreshMinion(){this.$toast("refreshing "+this.minion_id);let t=new FormData;t.set("minion_id",this.minion_id),this.$http.post("/api/minions/refresh_minions/",t).then(()=>{this.$toast("minion refreshed")}).catch(function(t){alert(t)})},runMinion(){this.$router.push("/run?tgt="+this.minion_id)},highstateMinion(){this.$router.push("/run?tgt="+this.minion_id+"&fun=state.apply")}},props:["minion_id"]},wa=Ca,ja=Object(u["a"])(wa,He,Ke,!1,null,"28b94c04",null),Va=ja.exports;m()(ja,{VCol:Pt["a"],VContainer:x["a"],VRow:Mt["a"]});var Sa=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",[a("v-col",{attrs:{sm:"12",lg:"4"}},[a("v-container",[a("v-card",[a("v-list-item",{attrs:{"two-line":""}},[a("v-list-item-content",[a("v-list-item-title",{staticClass:"headline"},[t._v(t._s(t.job.fun))]),a("v-list-item-subtitle",[t._v("Run on "+t._s(t.formatDate(t.job.alter_time)))])],1)],1),a("v-divider"),a("v-simple-table",[a("tbody",[a("tr",[a("td",[t._v("FUNCTION:")]),a("td",{staticClass:"text-right"},[t._v(t._s(t.job.fun))])]),a("tr",[a("td",[t._v("JID:")]),a("td",{staticClass:"text-right"},[t._v(t._s(t.job.jid))])]),t.job.arguments?a("tr",[a("td",[t._v("ARGUMENTS:")]),a("td",{staticClass:"text-right"},[t._v(t._s(t.job.arguments))])]):t._e(),t.job.keyword_arguments?a("tr",[a("td",[t._v("KEYWORD ARGUMENTS:")]),a("td",{staticClass:"text-right"},[t._v(t._s(t.job.keyword_arguments))])]):t._e(),a("tr",[a("td",[t._v("MINION ID:")]),a("td",{staticClass:"text-right"},[t._v(t._s(t.job.id))])]),a("tr",[a("td",[t._v("STATUS:")]),a("td",{staticClass:"text-right"},[a("v-chip",{attrs:{color:t.boolRepr(t.job.success),dark:""}},[t._v(t._s(t.boolText(t.job.success)))])],1)]),a("tr",[a("td",[t._v("START TIME:")]),a("td",{staticClass:"text-right"},[t._v(t._s(new Date(t.job.alter_time).toLocaleString("en-GB")))])])])])],1)],1)],1),a("v-col",{attrs:{sm:"12",lg:"8"}},[a("v-container",[a("v-card",[a("v-card-title",[t._v("Results")]),a("v-divider"),a("div",{staticClass:"ansiStyle",domProps:{innerHTML:t._s(t.ansiResult)}})],1)],1)],1)],1)],1)},Ta=[],$a={name:"JobDetail",props:["jid","minion_id"],data(){return{job:{},ansiResult:null}},mounted(){this.loadData(),this.loadRenderedJob()},methods:{loadData(){this.$http.get(`api/jobs/${this.jid}/${this.minion_id}/`).then(t=>this.job=t.data)},loadRenderedJob(){this.$http.get(`api/jobs/${this.jid}/${this.minion_id}/rendered_state/`).then(t=>this.ansiResult=t.data)},boolRepr(t){return!0===t?"green":"red"},boolText(t){return!0===t?"success":"failed"},formatDate(t){return new Date(t).toLocaleString("en-GB")}}},Da=$a,Oa=(a("df9d"),Object(u["a"])(Da,Sa,Ta,!1,null,"664654b1",null)),Ea=Oa.exports;m()(Oa,{VCard:g["a"],VCardTitle:y["c"],VChip:$t["a"],VCol:Pt["a"],VContainer:x["a"],VDivider:C["a"],VListItem:S["a"],VListItemContent:D["a"],VListItemSubtitle:D["b"],VListItemTitle:D["c"],VRow:Mt["a"],VSimpleTable:ut["a"]});var Ra=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",[a("v-col",{attrs:{sm:"12"}},[a("EventsTable")],1)],1)],1)},Aa=[],Fa=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-card",[a("v-card-title",[t._v("\n Events\n "),a("v-spacer"),a("v-text-field",{attrs:{"append-icon":"search",label:"Search","single-line":"","hide-details":""},model:{value:t.search,callback:function(e){t.search=e},expression:"search"}})],1),a("v-data-table",{staticClass:"elevation-1",attrs:{"sort-by":"alter_time","sort-desc":"",headers:t.headers,items:t.events,search:t.search,"show-expand":"",loading:t.loading},scopedSlots:t._u([{key:"item.alter_time",fn:function(e){var a=e.item;return[t._v("\n "+t._s(new Date(a.alter_time).toLocaleString("en-GB"))+"\n ")]}},{key:"expanded-item",fn:function(e){var s=e.headers,n=e.item;return[a("td",{attrs:{colspan:s.length}},[a("pre",[t._v(t._s(JSON.stringify(JSON.parse(n.data),null,2)))])])]}}])})],1)],1)},Ia=[];function Pa(t){return t.forEach(t=>{let e=JSON.parse(t.data);for(let a in e)"id"===a?t["minion_id"]=e[a]:t[a]=e[a]}),t}var Ma={name:"EventsTable",data(){return{search:"",headers:[{text:"Tag",value:"tag"},{text:"Jid",value:"jid"},{text:"Target",value:"minion_id"},{text:"Function",value:"fun"},{text:"Arguments",value:"fun_args"},{text:"Date",value:"alter_time"}],events:[],loading:!0}},mounted(){this.loadData()},methods:{loadData(){this.$http.get("api/events/").then(t=>{this.events=Pa(t.data),this.loading=!1})}}},La=Ma,Na=Object(u["a"])(La,Fa,Ia,!1,null,"e7265fc6",null),Ja=Na.exports;m()(Na,{VCard:g["a"],VCardTitle:y["c"],VContainer:x["a"],VDataTable:Ht["a"],VSpacer:R["a"],VTextField:A["a"]});var qa={name:"Events",components:{EventsTable:Ja}},Ua=qa,za=Object(u["a"])(Ua,Ra,Aa,!1,null,"7408d9dd",null),Ba=za.exports;m()(za,{VCol:Pt["a"],VContainer:x["a"],VRow:Mt["a"]});var Ha=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",[a("v-col",{attrs:{sm:"12"}},[a("RunCard")],1)],1)],1)},Ka=[],Ga=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-container",[a("v-row",{attrs:{"no-gutters":""}},[a("v-col",{attrs:{sm:"12"}},[a("v-card",{staticClass:"mb-8"},[a("v-card-title",[t._v("Run")]),a("v-tabs",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[a("v-tabs-slider"),a("v-tab",{attrs:{href:"#formatted"}},[t._v("\n Formatted\n ")]),a("v-tab",{attrs:{href:"#cli"}},[t._v("\n Cli\n ")])],1),a("v-tabs-items",{model:{value:t.tab,callback:function(e){t.tab=e},expression:"tab"}},[a("v-tab-item",{attrs:{id:"formatted",eager:""}},[a("v-card",[a("v-spacer"),a("v-card-text",[a("v-container",[a("v-row",[a("v-col",{staticClass:"text-right",attrs:{sm:"3",lg:"1","align-self":"center"}},[a("span",[t._v("Client Type:")])]),a("v-col",{attrs:{sm:"3",lg:"1"}},[a("v-select",{attrs:{items:t.client},model:{value:t.selected_client,callback:function(e){t.selected_client=e},expression:"selected_client"}})],1),t.client_batch||t.scheduleSwitch?t._e():a("v-col",{attrs:{sm:"3",lg:"1","offset-lg":"1"}},[a("v-checkbox",{attrs:{label:"Async",color:"primary"},model:{value:t.client_async,callback:function(e){t.client_async=e},expression:"client_async"}})],1),"local"!==t.selected_client||t.scheduleSwitch?t._e():a("v-col",{attrs:{sm:"3",lg:"1","offset-lg":t.client_batch?3:1}},[a("v-checkbox",{attrs:{label:"Batch",color:"primary"},model:{value:t.client_batch,callback:function(e){t.client_batch=e},expression:"client_batch"}})],1),"local"===t.selected_client&&t.client_batch&&!t.scheduleSwitch?a("v-col",{attrs:{sm:"3",lg:"1"}},[a("v-text-field",{attrs:{label:"Batch"},model:{value:t.batch,callback:function(e){t.batch=e},expression:"batch"}})],1):t._e(),"local"!==t.selected_client||t.scheduleSwitch?t._e():a("v-col",{attrs:{sm:"3",lg:"1","offset-lg":t.client_batch?0:1}},[a("v-text-field",{attrs:{label:"Timeout",type:"number"},model:{value:t.timeout,callback:function(e){t.timeout=e},expression:"timeout"}})],1)],1),a("v-row",[a("v-col",{attrs:{lg:"1"}},["local"===t.selected_client?a("v-select",{attrs:{items:t.target_type,label:"Target Type"},on:{change:function(e){t.target=null}},model:{value:t.selected_target_type,callback:function(e){t.selected_target_type=e},expression:"selected_target_type"}}):t._e()],1),a("v-col",{attrs:{lg:"2"}},["local"===t.selected_client?a("v-text-field",{attrs:{label:"Target"},model:{value:t.target,callback:function(e){t.target=e},expression:"target"}}):t._e()],1),a("v-col",{attrs:{lg:"2"}},[a("v-combobox",{attrs:{"item-value":"name","item-text":"name",items:t.filteredFunction,label:"Function","return-object":""},scopedSlots:t._u([t.selectedFunction?{key:"append-outer",fn:function(){return[a("v-menu",{attrs:{"offset-y":""},scopedSlots:t._u([{key:"activator",fn:function(e){var s=e.on;return[a("v-icon",t._g({attrs:{color:"black"}},s),[t._v("info\n ")])]}}],null,!1,1349456046)},[a("div",{staticClass:"desc"},[a("pre",[t._v(t._s(t.selectedFunction.description))])])])]},proxy:!0}:null],null,!0),model:{value:t.selectedFunction,callback:function(e){t.selectedFunction=e},expression:"selectedFunction"}})],1),a("v-col",{attrs:{lg:"3"}},[a("v-text-field",{attrs:{label:"Arguments"},model:{value:t.arg,callback:function(e){t.arg=e},expression:"arg"}})],1),a("v-col",{attrs:{lg:"4"}},[a("v-text-field",{attrs:{label:"Keyword Arguments"},model:{value:t.kwarg,callback:function(e){t.kwarg=e},expression:"kwarg"}})],1)],1),a("v-row",{attrs:{dense:""}},[a("v-col",{attrs:{sm:"12",lg:"3"}},[a("v-row",{attrs:{dense:""}},[a("v-col",{attrs:{sm:"12"}},[a("v-switch",{directives:[{name:"show",rawName:"v-show",value:"local"===t.selected_client,expression:"selected_client === 'local'"}],attrs:{label:"Schedule",color:"primary"},model:{value:t.scheduleSwitch,callback:function(e){t.scheduleSwitch=e},expression:"scheduleSwitch"}})],1),a("v-col",{directives:[{name:"show",rawName:"v-show",value:t.scheduleSwitch,expression:"scheduleSwitch"}],attrs:{sm:"12"}},[a("v-text-field",{staticStyle:{width:"350px"},attrs:{label:"Schedule Name"},model:{value:t.scheduleName,callback:function(e){t.scheduleName=e},expression:"scheduleName"}}),a("v-radio-group",{staticClass:"mt-0",model:{value:t.scheduleType,callback:function(e){t.scheduleType=e},expression:"scheduleType"}},[a("v-radio",{attrs:{value:"once",color:"primary"},scopedSlots:t._u([{key:"label",fn:function(){return[a("span",[a("strong",[t._v("Once: ")])]),a("v-row",[a("v-col",{staticClass:"ml-2",attrs:{sm:"4"}},[a("v-menu",{attrs:{"close-on-content-click":!1,transition:"scale-transition","offset-y":"","min-width":"290px"},scopedSlots:t._u([{key:"activator",fn:function(e){var s=e.on;return[a("v-text-field",t._g({attrs:{readonly:""},model:{value:t.scheduleDate,callback:function(e){t.scheduleDate=e},expression:"scheduleDate"}},s))]}}]),model:{value:t.dateMenu,callback:function(e){t.dateMenu=e},expression:"dateMenu"}},[a("v-date-picker",{attrs:{min:t.scheduleDate},on:{input:function(e){t.dateMenu=!1}},model:{value:t.scheduleDate,callback:function(e){t.scheduleDate=e},expression:"scheduleDate"}})],1)],1),a("v-col",{attrs:{sm:"4"}},[a("v-menu",{ref:"menu",attrs:{"close-on-content-click":!1,"nudge-right":40,transition:"scale-transition","offset-y":"","max-width":"290px","min-width":"290px"},scopedSlots:t._u([{key:"activator",fn:function(e){var s=e.on;return[a("v-text-field",t._g({attrs:{readonly:""},model:{value:t.scheduleTime,callback:function(e){t.scheduleTime=e},expression:"scheduleTime"}},s))]}}]),model:{value:t.timeMenu,callback:function(e){t.timeMenu=e},expression:"timeMenu"}},[t.timeMenu?a("v-time-picker",{attrs:{"full-width":""},model:{value:t.scheduleTime,callback:function(e){t.scheduleTime=e},expression:"scheduleTime"}}):t._e()],1)],1)],1)]},proxy:!0}])}),a("v-radio",{attrs:{value:"recurring",color:"primary"},scopedSlots:t._u([{key:"label",fn:function(){return[a("div",[a("strong",[t._v("Recurring: ")]),t._v(" Every "),a("span",{attrs:{id:"cron"}})])]},proxy:!0}])})],1)],1)],1)],1),a("v-col",{attrs:{sm:"12",lg:"6"}},[a("v-row",{attrs:{dense:""}},[a("v-col",{attrs:{sm:"12"}},[a("v-switch",{directives:[{name:"show",rawName:"v-show",value:"local"===t.selected_client,expression:"selected_client === 'local'"}],attrs:{label:"Pillar",color:"primary"},model:{value:t.pillarSwitch,callback:function(e){t.pillarSwitch=e},expression:"pillarSwitch"}})],1),a("v-col",{directives:[{name:"show",rawName:"v-show",value:t.pillarSwitch,expression:"pillarSwitch"}],attrs:{sm:"12"}},[a("codemirror",{attrs:{options:t.cmOptions},model:{value:t.code,callback:function(e){t.code=e},expression:"code"}})],1),a("v-col",{directives:[{name:"show",rawName:"v-show",value:t.pillarSwitch,expression:"pillarSwitch"}],attrs:{sm:"12"}},[a("span",{domProps:{innerHTML:t._s(t.pillarRendered)}})])],1)],1),a("v-col",{attrs:{sm:"12",lg:"3"}},[a("v-row",{attrs:{dense:""}},[a("v-col",{attrs:{sm:"12"}},[a("v-switch",{attrs:{label:"Save as template",color:"primary"},model:{value:t.saveJobSwitch,callback:function(e){t.saveJobSwitch=e},expression:"saveJobSwitch"}})],1),a("v-col",{directives:[{name:"show",rawName:"v-show",value:t.saveJobSwitch,expression:"saveJobSwitch"}],attrs:{sm:"12"}},[a("v-text-field",{staticStyle:{width:"350px"},attrs:{label:"Job Template Name"},model:{value:t.jobTemplateName,callback:function(e){t.jobTemplateName=e},expression:"jobTemplateName"}})],1)],1)],1)],1)],1)],1),a("v-card-actions",[a("v-spacer"),a("v-btn",{directives:[{name:"show",rawName:"v-show",value:!t.saveJobSwitch,expression:"!saveJobSwitch"}],attrs:{color:"orange",large:"",dark:""},on:{click:function(e){return t.runJob(t.test=!0)}}},[t._v("Test")]),a("v-btn",{directives:[{name:"show",rawName:"v-show",value:!t.saveJobSwitch,expression:"!saveJobSwitch"}],attrs:{color:"info",large:"",dark:""},on:{click:t.runJob}},[t._v("Run")]),a("v-btn",{directives:[{name:"show",rawName:"v-show",value:t.saveJobSwitch,expression:"saveJobSwitch"}],attrs:{color:"green",large:"",dark:""},on:{click:t.saveJob}},[t._v("Save")])],1)],1)],1),a("v-tab-item",{attrs:{id:"cli"}},[null!==t.functions?a("TerminalCard",{attrs:{minions:t.minions,functions:t.functions}}):t._e()],1)],1)],1)],1)],1),a("v-row",[a("v-col",{attrs:{sm:"12"}},[t.results?a("v-card",[a("v-card-title",[t._v("Results")]),a("v-card-text",{staticClass:"ansiStyle",domProps:{innerHTML:t._s(t.results)}})],1):t._e()],1)],1)],1)},Wa=[],Ya=function(){var t=this,e=t.$createElement,a=t._self._c||e;return a("v-row",{directives:[{name:"resize",rawName:"v-resize",value:t.onResize,expression:"onResize"}]},[a("v-col",{attrs:{sm:"12"}},[a("div",{staticClass:"console",attrs:{id:"terminal"}})])],1)},Qa=[],Xa=a("fcf3"),Za=a("47d0");a("abb2");class ts{constructor(t){this.size=t,this.entries=[],this.cursor=0}push(t){if(""===t.trim())return;const e=this.entries[this.entries.length-1];t!=e&&(this.entries.push(t),this.entries.length>this.size&&this.entries.pop(0),this.cursor=this.entries.length)}rewind(){this.cursor=this.entries.length}getPrevious(){const t=Math.max(0,this.cursor-1);return this.cursor=t,this.entries[t]}getNext(){const t=Math.min(this.entries.length,this.cursor+1);return this.cursor=t,this.entries[t]}}var es=a("8e33");function as(t,e=!0){let a;const s=[],n=/\w+/g;while(a=n.exec(t))e?s.push(a.index):s.push(a.index+a[0].length);return s}function ss(t,e){const a=as(t,!0).reverse().find(t=>tt>e);return null==a?t.length:a}function is(t,e,a){let s=0,n=0;for(let i=0;ia&&(n=0,s+=1))}return{row:s,col:n}}function rs(t,e){return is(t,t.length,e).row+1}function os(t){return""!=t.trim()&&((t.match(/'/g)||[]).length%2!==0||((t.match(/"/g)||[]).length%2!==0||(""==t.split(/(\|\||\||&&)/g).pop().trim()||!(!t.endsWith("\\")||t.endsWith("\\\\")))))}function ls(t){return null!=t.match(/[^\\][ \t]$/m)}function cs(t){if(""===t.trim())return"";if(ls(t))return"";const e=Object(es["parse"])(t);return e.pop()||""}function ds(t,e){const a=Object(es["parse"])(e);let s=a.length-1,n=a[s]||"";""===e.trim()?(s=0,n=""):ls(e)&&(s+=1,n="");const i=t.reduce((t,{fn:e,args:n})=>{try{return t.concat(e(s,a,...n))}catch(i){return console.error("Auto-complete error:",i),t}},[]);return i.filter(t=>t.startsWith(n))}class us{constructor(t,e={}){this.term=t,this._handleTermData=this.handleTermData.bind(this),this._handleTermResize=this.handleTermResize.bind(this),this.history=new ts(e.historySize||100),this.maxAutocompleteEntries=e.maxAutocompleteEntries||100,this._autocompleteHandlers=[],this._active=!1,this._input="",this._cursor=0,this._activePrompt=null,this._activeCharPrompt=null,this._termSize={cols:this.term.cols,rows:this.term.rows},this.attach()}detach(){this.term.off("data",this._handleTermData),this.term.off("resize",this._handleTermResize)}attach(){this.term.onData(this._handleTermData),this.term.onResize(this._handleTermResize)}addAutocompleteHandler(t,...e){this._autocompleteHandlers.push({fn:t,args:e})}removeAutocompleteHandler(t){const e=this._autocompleteHandlers.findIndex(e=>e.fn===t);-1!==e&&this._autocompleteHandlers.splice(e,1)}read(t,e="> "){return new Promise((a,s)=>{this.term.write(t),this._activePrompt={prompt:t,continuationPrompt:e,resolve:a,reject:s},this._input="",this._cursor=0,this._active=!0})}readChar(t){return new Promise((e,a)=>{this.term.write(t),this._activeCharPrompt={prompt:t,resolve:e,reject:a}})}abortRead(t="aborted"){null==this._activePrompt&&null==this._activeCharPrompt||this.term.write("\r\n"),null!=this._activePrompt&&(this._activePrompt.reject(t),this._activePrompt=null),null!=this._activeCharPrompt&&(this._activeCharPrompt.reject(t),this._activeCharPrompt=null),this._active=!1}println(t){this.print(t+"\n")}print(t){const e=t.replace(/[\r\n]+/g,"\n");this.term.write(e.replace(/\n/g,"\r\n"))}printWide(t,e=2){if(0==t.length)return println("");const a=t.reduce((t,e)=>Math.max(t,e.length),0)+e,s=Math.floor(this._termSize.cols/a),n=Math.ceil(t.length/s);let i=0;for(let r=0;rt.length&&(this._cursor=t.length);const s=this.applyPromptOffset(t,this._cursor),n=rs(a,this._termSize.cols),{col:i,row:r}=is(a,s,this._termSize.cols),o=n-r-1;this.term.write("\r");for(var l=0;l{this._cursor=e,this.setInput(this._input)},s=t();null==s?a():s.then(a)}setCursor(t){t<0&&(t=0),t>this._input.length&&(t=this._input.length);const e=this.applyPrompts(this._input),a=(rs(e,this._termSize.cols),this.applyPromptOffset(this._input,this._cursor)),{col:s,row:n}=is(e,a,this._termSize.cols),i=this.applyPromptOffset(this._input,t),{col:r,row:o}=is(e,i,this._termSize.cols);if(o>n)for(let l=n;ls)for(let l=s;l0){const e=Math.min(t,this._input.length-this._cursor);this.setCursor(this._cursor+e)}else if(t<0){const e=Math.max(t,-this._cursor);this.setCursor(this._cursor+e)}}handleCursorErase(t){const{_cursor:e,_input:a}=this;if(t){if(e<=0)return;const t=a.substr(0,e-1)+a.substr(e);this.clearInput(),this._cursor-=1,this.setInput(t,!1)}else{const t=a.substr(0,e)+a.substr(e+1);this.setInput(t)}}handleCursorInsert(t){const{_cursor:e,_input:a}=this,s=a.substr(0,e)+t+a.substr(e);this._cursor+=t.length,this.setInput(s)}handleReadComplete(){this.history&&this.history.push(this._input),this._activePrompt&&(this._activePrompt.resolve(this._input),this._activePrompt=null),this.term.write("\r\n"),this._active=!1}handleTermResize(t){const{rows:e,cols:a}=t;this.clearInput(),this._termSize={cols:a,rows:e},this.setInput(this._input,!1)}handleTermData(t){if(this._active){if(null!=this._activeCharPrompt)return this._activeCharPrompt.resolve(t),this._activeCharPrompt=null,void this.term.write("\r\n");if(t.length>3&&27!==t.charCodeAt(0)){const e=t.replace(/[\r\n]+/g,"\r");Array.from(e).forEach(t=>this.handleData(t))}else this.handleData(t)}}handleData(t){if(!this._active)return;const e=t.charCodeAt(0);let a;if(27==e)switch(t.substr(1)){case"[A":if(this.history){let t=this.history.getPrevious();t&&(this.setInput(t),this.setCursor(t.length))}break;case"[B":if(this.history){let t=this.history.getNext();t||(t=""),this.setInput(t),this.setCursor(t.length)}break;case"[D":this.handleCursorMove(-1);break;case"[C":this.handleCursorMove(1);break;case"[3~":this.handleCursorErase(!1);break;case"[F":this.setCursor(this._input.length);break;case"[H":this.setCursor(0);break;case"b":a=ss(this._input,this._cursor),null!=a&&this.setCursor(a);break;case"f":a=ns(this._input,this._cursor),null!=a&&this.setCursor(a);break;case"":a=ss(this._input,this._cursor),null!=a&&(this.setInput(this._input.substr(0,a)+this._input.substr(this._cursor)),this.setCursor(a));break}else if(e<32||127===e)switch(t){case"\r":os(this._input)?this.handleCursorInsert("\n"):this.handleReadComplete();break;case"":this.handleCursorErase(!0);break;case"\t":if(this._autocompleteHandlers.length>0){const t=this._input.substr(0,this._cursor),e=ls(t),a=ds(this._autocompleteHandlers,t);if(a.sort(),0===a.length)e||this.handleCursorInsert(" ");else if(1===a.length){const e=cs(t);this.handleCursorInsert(a[0].substr(e.length)+" ")}else a.length<=this.maxAutocompleteEntries?this.printAndRestartPrompt(()=>{this.printWide(a)}):this.printAndRestartPrompt(()=>this.readChar(`Display all ${a.length} possibilities? (y or n)`).then(t=>{"y"!=t&&"Y"!=t||this.printWide(a)}))}else this.handleCursorInsert(" ");break;case"":this.setCursor(this._input.length),this.term.write("^C\r\n"+((this._activePrompt||{}).prompt||"")),this._input="",this._cursor=0,this.history&&this.history.rewind();break}else this.handleCursorInsert(t)}}var hs={name:"TerminalCard",props:["minions","functions"],data(){return{term:null,fitter:null,functions_name:null}},methods:{initTerm(){let t=document.getElementById("terminal");this.term=new Xa["Terminal"]({cursorBlink:!0,fontSize:20,fontFamily:"'Roboto Mono', monospace"});const e=new Za["FitAddon"];this.term.loadAddon(e),this.term.open(t),e.fit(),this.fitter=e;const a=new us(this.term);a.addAutocompleteHandler(t=>{return 0!==t?[]:["salt","clear"]}),a.addAutocompleteHandler(t=>{return 1!==t?[]:this.minions}),a.addAutocompleteHandler(t=>{return 2!==t?[]:this.functions.map(t=>t.name)});const s="Usage: salt [options] '' [arguments]",n=()=>{a.read(" ~$ ").then(t=>{let e=t.split(" ").filter(t=>{return""!==t});if(0===e.length)n();else if(1===e.length&&"clear"===e[0])this.term.clear(),n();else if(e.length<=2)a.println(s),n();else if(t.split(" ").length>=3&&"salt"===e[0]){let e=new FormData;e.set("raw",!0),e.set("cli",!0),e.set("command",t),this.$toast("Running "+t),this.$http.post("api/run/",e).then(t=>{a.println(t.data.results)}).then(()=>n())}else a.println(s),n()})};n()},onResize(){null!==this.term&&this.fitter.fit()}},mounted(){setTimeout(()=>{this.initTerm()},100)},beforeDestroy(){null!==this.term&&this.term.dispose()}},ms=hs,vs=a("269a"),ps=a.n(vs),fs=a("dc22"),bs=Object(u["a"])(ms,Ya,Qa,!1,null,"cc052c0c",null),_s=bs.exports;function gs(t,e){if(t instanceof HTMLElement)this.el=t;else{if("string"!==typeof t)throw"CronUI: container parameter in initialization must be an html element or a string selector.";this.el=document.querySelector(t)}this.options=e||{},this.render(),"string"!==typeof this.options.initial&&(this.options.initial="* * * * *"),this.setCronString(this.options.initial),this.currentValue=this.options.initial}m()(bs,{VCol:Pt["a"],VRow:Mt["a"]}),ps()(bs,{Resize:fs["a"]}),gs.prototype.render=function(){let t,e,a,s=this.el,n="";for(a=0;a<60;a++)e=a<10?"0":"",n+="\n";let i="";for(a=0;a<24;a++)e=a<10?"0":"",i+="\n";let r="";for(a=1;a<32;a++)t=1==a||21==a||31==a?"st":2==a||22==a?"nd":3==a||23==a?"rd":"th",r+="\n";let o="";const l=["January","February","March","April","May","June","July","August","September","October","November","December"];for(a=0;a"+l[a]+"\n";let c="";const d=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];for(a=0;a"+d[a]+"\n";let u="";const h=["minute","hour","day","week","month","year"];for(a=0;a"+h[a]+"\n";let m={};s.insertAdjacentHTML("beforeend","");let v=s.querySelector(".cron-period select");v.addEventListener("change",this.periodChanged.bind(this)),v.addEventListener("change",this.changeEvent.bind(this)),s.insertAdjacentHTML("beforeend"," on the "),m["dom"]=s.querySelector(".cron-block-dom"),s.insertAdjacentHTML("beforeend"," of "),m["month"]=s.querySelector(".cron-block-month"),s.insertAdjacentHTML("beforeend"," at minutes past the hour "),m["mins"]=s.querySelector(".cron-block-mins"),s.insertAdjacentHTML("beforeend"," on "),m["dow"]=s.querySelector(".cron-block-dow"),s.insertAdjacentHTML("beforeend"," at :\" + str_opt_period + \"\")\n let periodEl = el.querySelector(\".cron-period select\")\n periodEl.addEventListener(\"change\", this.periodChanged.bind(this))\n periodEl.addEventListener(\"change\", this.changeEvent.bind(this))\n\n // Day of month\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" on the \")\n blocks[\"dom\"] = el.querySelector(\".cron-block-dom\")\n\n // Month\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" of \")\n blocks[\"month\"] = el.querySelector(\".cron-block-month\")\n\n // Minutes\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" at minutes past the hour \")\n blocks[\"mins\"] = el.querySelector(\".cron-block-mins\")\n\n // Day of week\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" on \")\n blocks[\"dow\"] = el.querySelector(\".cron-block-dow\")\n\n // Time\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" at :"+u+"");let v=s.querySelector(".cron-period select");v.addEventListener("change",this.periodChanged.bind(this)),v.addEventListener("change",this.changeEvent.bind(this)),s.insertAdjacentHTML("beforeend"," on the "),m["dom"]=s.querySelector(".cron-block-dom"),s.insertAdjacentHTML("beforeend"," of "),m["month"]=s.querySelector(".cron-block-month"),s.insertAdjacentHTML("beforeend"," at minutes past the hour "),m["mins"]=s.querySelector(".cron-block-mins"),s.insertAdjacentHTML("beforeend"," on "),m["dow"]=s.querySelector(".cron-block-dow"),s.insertAdjacentHTML("beforeend"," at :\" + str_opt_period + \"\")\n let periodEl = el.querySelector(\".cron-period select\")\n periodEl.addEventListener(\"change\", this.periodChanged.bind(this))\n periodEl.addEventListener(\"change\", this.changeEvent.bind(this))\n\n // Day of month\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" on the \")\n blocks[\"dom\"] = el.querySelector(\".cron-block-dom\")\n\n // Month\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" of \")\n blocks[\"month\"] = el.querySelector(\".cron-block-month\")\n\n // Minutes\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" at minutes past the hour \")\n blocks[\"mins\"] = el.querySelector(\".cron-block-mins\")\n\n // Day of week\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" on \")\n blocks[\"dow\"] = el.querySelector(\".cron-block-dow\")\n\n // Time\n el.insertAdjacentHTML(\"beforeend\", \"\"\n + \" at :