sermoni

"Service monitor" / cronjob status service
Log | Files | Refs

Services.vue (5799B)


      1 <template>
      2     <div class="services-wrapper">
      3 
      4         <button @click="showTokens = !showTokens">
      5             {{showTokens ? 'Hide' : 'Show'}} tokens
      6         </button>
      7 
      8         <div class="service" v-for="service in services" :key="service.id">
      9             <span>Service ID:</span>
     10             <input type="text" :value="service.id"> <br/>
     11 
     12             <span>Token:</span>
     13             <input :type="showTokens ? 'text' : 'password'" :value="service.token"/> <br/>
     14 
     15             <span>Name:</span>
     16             <input type="text" :value="service.name"/> <br/>
     17 
     18             <span>Description:</span>
     19             <input type="text" :value="service.description"/> <br/>
     20 
     21             <span>Max number of events:</span>
     22             <input type="number" :value="service.maxevents"/> <br/>
     23 
     24             <span>Expectation period:</span>
     25             <time-picker :value="service.period"/> <br/>
     26 
     27             <button @click="deletionID = service.id">Delete</button>
     28             <button @click="updateService(service.id)">Update</button>
     29         </div>
     30 
     31         <div class="service">
     32             <span>Add service</span>
     33             <input :type="showTokens ? 'text' : 'password'" v-model="newService.token" placeholder="Token"> <br/>
     34             <input type="text" v-model="newService.name" placeholder="Name"> <br/>
     35             <input type="text" v-model="newService.description" placeholder="Description"> <br/>
     36             <input type="number" v-model.number="newService.maxevents" placeholder="Max number of events"> <br/>
     37             <time-picker v-model="newService.period" placeholder="Expectation Period"/> <br/>
     38 
     39             <button @click="addService">Add service</button>
     40         </div>
     41         <div v-show="deletionID" style="position: fixed; bottom: 15px; right: 15px;">
     42             <button @click="deletionID = 0">Cancel</button>
     43             <button @click="deleteService()">Confirm</button>
     44         </div>
     45     </div>
     46 </template>
     47 
     48 <script>
     49     import api from "./requests.js";
     50     import TimePicker from "./TimePicker.vue";
     51     export default {
     52         name: "Services",
     53         components: {TimePicker},
     54         data() {
     55             return {
     56                 services: [],
     57                 newService: {
     58                     token: "",
     59                     name: "",
     60                     description: "",
     61                     period: {"number": 0, "scalar": 0},
     62                     maxevents: 0
     63                 },
     64                 showTokens: false,
     65                 deletionID: 0,
     66             }
     67         },
     68         methods: {
     69             addService() {
     70                 // Make unix milli time formatted period before sending
     71                 const formattedService = {
     72                     ...this.newService,
     73                 };
     74                 formattedService.period = this.newService.period.scalar * this.newService.period.number;
     75                 console.log(formattedService);
     76                 api.postService(formattedService,
     77                     success => {
     78                         this.services.push(this.newService);
     79                         this.newService = {
     80                             token: "", name: "", description: "",
     81                             period: {"number": 0, "scalar": 0}, maxevents: 0
     82                         };
     83                     },
     84                     error => {
     85                         this.$emit("error");
     86                     }
     87                 );
     88             },
     89             updateService(id) {
     90                 alert("Not implemented!");
     91             },
     92             deleteService() {
     93                 api.deleteService(this.deletionID,
     94                     success => {
     95                         this.services = this.services.filter(
     96                             s => s.id !== this.deletionID
     97                         );
     98                         this.deletionID = 0;
     99                     },
    100                     error => {
    101                         console.error(error);
    102                         this.$emit("error");
    103                     }
    104                 );
    105             },
    106             getExpectations(unixMilliTime) {
    107                 const units = [
    108                     { "unit": "weeks", "scalar": 604800000 },
    109                     { "unit": "days", "scalar": 86400000 },
    110                     { "unit": "hours", "scalar": 3600000 },
    111                     { "unit": "minutes", "scalar": 60000 },
    112                     { "unit": "seconds", "scalar": 1000 },
    113                     { "unit": "none", "scalar": 0 }
    114                 ];
    115                 if (unixMilliTime === 0) {
    116                     return { "number": 0, "scalar": 0 };
    117                 }
    118                 for (let i = 0; i < units.length; i++) {
    119                     let u = units[i];
    120                     if (unixMilliTime % u.scalar === 0) {
    121                         return {
    122                             "scalar": u.scalar,
    123                             "number": unixMilliTime / u.scalar
    124                         };
    125                     }
    126                 }
    127             }
    128         },
    129         mounted() {
    130             api.getServices(
    131                 services => {
    132                     this.services = services.map(s => {
    133                         s.period = this.getExpectations(s.period);
    134                         return s;
    135                     });
    136                 },
    137                 error => {
    138                     console.log(error);
    139                     this.$emit("error");
    140                 }
    141             );
    142         }
    143     }
    144 </script>
    145 
    146 <style >
    147 span {
    148     font-weight: bold;
    149 }
    150 input {
    151     border-width: 0 0 1px;
    152     border-color: #bbf;
    153     background-color: inherit;
    154     outline-width: 0;
    155     flex: 1;
    156     margin-bottom: 3px;
    157     width: 100%;
    158 }
    159 input:focus {
    160     outline-width: 0;
    161 }
    162 input::placeholder {
    163     color: #bbf;
    164 }
    165 div .service {
    166     border: 1px solid blueviolet;
    167     border-radius: 3px;
    168     margin-bottom: 1em;
    169     padding: 1em;
    170 }
    171 </style>