blob: 8827297c8933351e745235cc944e34c6a49bf588 [file] [log] [blame]
<template>
<div>
<div class="rk-trace-search-box container">
<div class="item">
<div class="mb5 label">Service</div>
<select class="app" style="color:#fff;background: 0; border: 0; outline: none;" v-model="option.data.applicationId">
<option style="background-color: #25292f;" value="ALL">All</option>
<option style="background-color: #25292f;" :value="i.key" v-for="i in stateOptions.applications" :key="i.key">{{i.label}}</option>
</select>
</div>
<div class="item">
<div class="mb5 label">Endpoint</div>
<input class="rk-trace-input" type="text" v-model="option.operationName">
</div>
<div class="item">
<div class="mb5 label">TraceID</div>
<input class="rk-trace-input" type="text" v-model="option.traceId">
</div>
<RkDate class="mr10" position="bottom" v-model="option.time" format="YYYY-MM-DD HH:mm:ss"/>
<button class="trace-search-btn" @click="handleChanged">Search</button>
</div>
<div class="rk-trace-search-subbox container mb10">
<div class="label">Max:</div>
<input style="width:50px;" class="rk-trace-input mr15" type="number" v-model="option.maxTraceDuration">
<div class="label">Min:</div>
<input style="width:50px;" class="rk-trace-input mr15" type="number" v-model="option.minTraceDuration">
<div class="label">Status:</div>
<select class="app mr10" style="background: 0; border: 0; outline: none;" v-model="option.traceState">
<option value="ALL">All</option>
<option value="SUCCESS">Success</option>
<option value="ERROR">Error</option>
</select>
<div class="label">Sort:</div>
<select class="app" style="background: 0; border: 0; outline: none;" v-model="option.queryOrder">
<option value="BY_START_TIME">Start Time</option>
<option value="BY_DURATION">Duration</option>
</select>
</div>
<div class="container clear">
<RkPage class="r" :total="stateTrace.tracesTotal" :currentSize="15" :currentPage="option.page" @changePage="changePage"/>
</div>
</div>
</template>
<script lang="ts">
import Vue from 'vue';
import { State } from 'vuex-class';
import { Component } from 'vue-property-decorator';
import { getTraces } from '@/store/dispatch/trace.ts';
@Component({
components: {},
})
export default class SearchBox extends Vue {
@State('global') stateGlobal;
@State('options') stateOptions;
@State('trace') stateTrace;
option = {
time: [],
data: {
applicationId: 'ALL',
},
maxTraceDuration: '',
minTraceDuration: '',
operationName: '',
traceId: '',
traceState: 'ALL',
queryOrder: 'BY_START_TIME',
page: 1,
};
mounted() {
if (window.sessionStorage.getItem('traceOption')) {
const temp = JSON.parse(window.sessionStorage.getItem('traceOption'));
this.option = temp;
} else {
this.option.time = [this.stateGlobal.duration.start, this.stateGlobal.duration.end];
}
getTraces(this.option);
}
// @Watch('option', { deep: true })
handleChanged() {
getTraces(this.option);
window.sessionStorage.setItem('traceOption', JSON.stringify(this.option));
}
changePage(page) {
this.option.page = page;
}
}
</script>
<style lang="scss">
.trace-search-btn{
cursor: pointer;
display: inline-block;
border-radius: 4px;
background-color: #4477dd;
border: 0;
color: #fff;
outline: none;
padding: 6.5px .7em;
}
.rk-trace-search-subbox{
display: flex;
flex-shrink: 0;
align-items: center;
padding-top: 10px;
padding-bottom: 10px;
background-color: #f6f7fb;
border-bottom:1px solid rgba(0,0,0,.03);
.item{
margin-right: 30px;
}
.label{
font-weight: 600;
margin-right: 5px;
}
.rk-trace-input{
background: 0;
border: 0;
outline: none;
padding-bottom: 3px;
border-bottom: 1px solid rgba(34, 34, 34, 0.2);
transition: border-color .3s;
&:focus{
border-color: #6fa4ff;
}
}
}
.rk-trace-search-box{
display: flex;
flex-shrink: 0;
align-items: center;
padding-top: 15px;
padding-bottom: 15px;
background-color: #333840;
color: #fff;
border-bottom:1px solid rgba(0,0,0,.05);
.item{
margin-right: 30px;
}
.label{
font-weight: 600;
}
.rk-trace-input{
color: #e8e8e8;
background: 0;
border: 0;
outline: none;
padding-bottom: 3px;
border-bottom: 1px solid rgba(235,235,245,.3);
transition: border-color .3s;
&:focus{
border-color: #5487ed;
}
}
}
</style>