blob: ea4dc9cc0a79493e7b41b76dd8012c81067a27eb [file] [log] [blame]
<template>
<div>
<div class="w-100 mb-5">
<h2>Access Logs</h2>
</div>
<div v-if="activateLogEnabling">
<b-form-checkbox v-model="checked" :disabled=isCheckedBtnDisabled v-on:change="enableLogging"
name="check-button" switch>
Enable Logging
</b-form-checkbox>
</div>
<div v-if="isLoggingEnabled">
<div>
<b-input-group>
<template v-slot:prepend>
<b-form-input size="sm" disabled v-model="defaultSearchText">Search By</b-form-input>
<b-dropdown size="sm" :text="selectedService" v-model="selectedService">
<b-dropdown-item v-for="option in options"
:key="option.value"
:value="option.value"
@click=searchLogsWithFilter(option)>
{{option.text}}
</b-dropdown-item>
</b-dropdown>
</template>
</b-input-group>
</div>
<div class="mt-3">
<b-table small striped hover responsive :items="logItems" :fields="fields" selectable
ref="selectableTable"
select-mode="single"
:per-page="perPage"
:current-page="currentPage"
caption-top>
</b-table>
<div class="pgClass">
<b-pagination size="sm" v-model="currentPage" :total-rows="rows" :per-page="perPage"
aria-controls="my-table" class="float-right">
</b-pagination>
</div>
</div>
</div>
</div>
</template>
<script>
import config from "@/config";
export default {
name: "Logs",
data: function () {
return {
defaultSearchText: 'Search By',
fields: ['service_name', 'event_type', 'accessed_time'],
logItems: [],
options: [
{
value: 0,
text: "UserManagementService",
service_name: "org.apache.custos.user.management.service.UserManagementService"
},
{
value: 1,
text: "TenantManagementService",
service_name: "org.apache.custos.tenant.management.service.TenantManagementService"
},
{
value: 2,
text: "SharingManagementService",
service_name: "org.apache.custos.sharing.management.service.SharingManagementService"
},
{
value: 3,
text: "ResourceSecretManagementService",
service_name: "org.apache.custos.resource.secret.management.service.ResourceSecretManagementService"
},
{
value: 4,
text: "IdentityManagementService",
service_name: "org.apache.custos.identity.management.service.IdentityManagementService"
},
{
value: 5,
text: "GroupManagementService",
service_name: "org.apache.custos.group.management.service.GroupManagementService"
},
{
value: 6,
text: "AgentManagementService",
service_name: "org.apache.custos.agent.management.service.AgentManagementService"
},
{
value: 7,
text: "All"
}
],
perPage: 10,
currentPage: 0,
selectedService: null,
custosSec: null,
custosId: null,
isLoggingEnabled: false,
activateLogEnabling: false,
checked: false,
isCheckedBtnDisabled: false
}
},
methods: {
async searchLogsWithFilter(data) {
this.selectedService = data.text
let dat = {}
if (data.text === "All") {
dat = {
client_id: this.custosId,
client_sec: this.custosSec,
params: {
offset: 0,
limit: 200,
}
}
} else {
dat = {
client_id: this.custosId,
client_sec: this.custosSec,
params: {
offset: 0,
limit: 200,
service_name: data.service_name
}
}
}
let response = await this.$store.dispatch('log/getLogEvents', dat)
response.forEach(res => {
let date = new Date(0)
date.setUTCSeconds(res.created_time/1000)
res.accessed_time = date.toUTCString()
})
this.logItems = response
},
async enableLogging() {
let accessToken = await this.$store.getters['identity/getAccessToken']
let data = {
user_token: accessToken
}
let response = await this.$store.dispatch('log/enableLogging', data)
if (response) {
this.checked = true
this.isCheckedBtnDisabled = true
this.isLoggingEnabled = true
}
},
async goToWorkspace() {
await this.$router.push('/workspace')
},
},
computed: {
rows() {
return this.logItems.length
}
},
async mounted() {
this.custosId = config.value('clientId')
this.custosSec = config.value('clientSec')
this.isAdminUser = await this.$store.dispatch('identity/isLoggedUserHasAdminAccess')
let data = {
client_id: this.custosId,
client_sec: this.custosSec
}
this.isLoggingEnabled = await this.$store.dispatch('log/isLoggingEnabled', data)
this.activateLogEnabling = this.isAdminUser && !this.isLoggingEnabled
this.isCheckedBtnDisabled = this.isLoggingEnabled
this.checked = this.isLoggingEnabled
if (this.isLoggingEnabled) {
let data = {
client_id: this.custosId,
client_sec: this.custosSec,
params: {
offset: 0,
limit: 200
}
}
let response = await this.$store.dispatch('log/getLogEvents', data)
response.forEach(res => {
let date = new Date(0)
date.setUTCSeconds(res.created_time/1000)
res.accessed_time = date.toUTCString()
})
this.logItems = response
}
}
}
</script>
<style scoped>
h2 {
font-family: Avenir;
font-size: 20px;
font-weight: 600;
text-align: left;
color: #203a43;
}
</style>