| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| define(['require', |
| 'backbone', |
| 'hbs!tmpl/audit/AdminAuditTableLayoutView_tmpl', |
| 'collection/VEntityList', |
| 'utils/Utils', |
| 'utils/UrlLinks', |
| 'utils/CommonViewFunction', |
| 'utils/Enums', |
| 'moment' |
| ], function(require, Backbone, AdminAuditTableLayoutView_tmpl, VEntityList, Utils, UrlLinks, CommonViewFunction, Enums, moment) { |
| 'use strict'; |
| |
| var AdminAuditTableLayoutView = Backbone.Marionette.LayoutView.extend( |
| /** @lends AuditTableLayoutView */ |
| { |
| _viewName: 'AdminAuditTableLayoutView', |
| |
| template: AdminAuditTableLayoutView_tmpl, |
| |
| /** Layout sub regions */ |
| regions: { |
| RAuditTableLayoutView: "#r_adminAuditTableLayoutView", |
| RQueryBuilderAdmin: "#r_attributeQueryBuilderAdmin" |
| }, |
| |
| /** ui selector cache */ |
| ui: { |
| adminPurgedEntityClick: "[data-id='adminPurgedEntity']", |
| adminAuditEntityDetails: "[data-id='adminAuditEntityDetails']", |
| attrFilter: "[data-id='adminAttrFilter']", |
| adminRegion: "[data-id='adminRegion']", |
| attrApply: "[data-id='attrApply']", |
| showDefault: "[data-id='showDefault']", |
| attrClose: "[data-id='attrClose']" |
| |
| }, |
| /** ui events hash */ |
| events: function() { |
| var events = {}, |
| that = this; |
| events["click " + this.ui.adminPurgedEntityClick] = "onClickAdminPurgedEntity"; |
| events["click " + this.ui.adminAuditEntityDetails] = "showAdminAuditEntity"; |
| events["click " + this.ui.attrFilter] = function(e) { |
| this.ui.attrFilter.find('.fa-angle-right').toggleClass('fa-angle-down'); |
| this.$('.attributeResultContainer').addClass("overlay"); |
| this.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide'); |
| this.onClickAttrFilter(); |
| }; |
| events["click " + this.ui.attrClose] = function(e) { |
| that.closeAttributeModel(); |
| }; |
| events["click " + this.ui.attrApply] = function(e) { |
| that.okAttrFilterButton(e); |
| }; |
| return events; |
| }, |
| /** |
| * intialize a new AdminTableLayoutView Layout |
| * @constructs |
| */ |
| initialize: function(options) { |
| _.extend(this, _.pick(options, 'searchTableFilters', 'entityDefCollection', 'enumDefCollection')); |
| this.entityCollection = new VEntityList(); |
| this.limit = 25; |
| this.offset = 0; |
| this.entityCollection.url = UrlLinks.adminApiUrl(); |
| this.entityCollection.modelAttrName = "events"; |
| this.commonTableOptions = { |
| collection: this.entityCollection, |
| includePagination: false, |
| includeAtlasPagination: true, |
| includeFooterRecords: false, |
| includeColumnManager: true, |
| includeOrderAbleColumns: false, |
| includeSizeAbleColumns: false, |
| includeTableLoader: true, |
| includeAtlasPageSize: true, |
| includeAtlasTableSorting: true, |
| columnOpts: { |
| opts: { |
| initialColumnsVisible: null, |
| saveState: false |
| }, |
| visibilityControlOpts: { |
| buttonTemplate: _.template("<button class='btn btn-action btn-sm pull-right'>Columns <i class='fa fa-caret-down'></i></button>") |
| }, |
| el: this.ui.colManager |
| }, |
| atlasPaginationOpts: { |
| limit: this.limit, |
| offset: this.offset, |
| fetchCollection: this.getAdminCollection.bind(this), |
| }, |
| gridOpts: { |
| emptyText: 'No Record found!', |
| className: 'table table-hover backgrid table-quickMenu colSort' |
| }, |
| filterOpts: {}, |
| paginatorOpts: {} |
| }; |
| this.isFilters = null; |
| this.adminAuditEntityData = {}; |
| }, |
| onRender: function() { |
| this.ui.adminRegion.hide(); |
| this.getAdminCollection(); |
| this.entityCollection.comparator = function(model) { |
| return -model.get('timestamp'); |
| } |
| this.renderTableLayoutView(); |
| }, |
| onShow: function() { |
| this.$('.fontLoader').show(); |
| this.$('.tableOverlay').show(); |
| }, |
| bindEvents: function() {}, |
| closeAttributeModel: function() { |
| var that = this; |
| that.$('.attributeResultContainer').removeClass("overlay"); |
| that.ui.attrFilter.find('.fa-angle-right').toggleClass('fa-angle-down'); |
| that.$('.attribute-filter-container, .attr-filter-overlay').toggleClass('hide'); |
| }, |
| onClickAttrFilter: function() { |
| var that = this; |
| this.ui.adminRegion.show(); |
| require(['views/search/QueryBuilderView'], function(QueryBuilderView) { |
| that.RQueryBuilderAdmin.show(new QueryBuilderView({ adminAttrFilters: true, searchTableFilters: that.searchTableFilters, entityDefCollection: that.entityDefCollection, enumDefCollection: that.enumDefCollection })); |
| }); |
| }, |
| okAttrFilterButton: function(options) { |
| var that = this, |
| isFilterValidate = true, |
| queryBuilderRef = that.RQueryBuilderAdmin.currentView.ui.builder; |
| if (queryBuilderRef.data("queryBuilder")) { |
| var queryBuilder = queryBuilderRef.queryBuilder("getRules"); |
| if (queryBuilder) { |
| that.ruleUrl = that.searchTableFilters["adminAttrFilters"] = CommonViewFunction.attributeFilter.generateUrl({ value: queryBuilder, formatedDateToLong: true }); |
| that.isFilters = queryBuilder.rules.length ? queryBuilder.rules : null; |
| } else { |
| isFilterValidate = false |
| } |
| } |
| if (isFilterValidate) { |
| that.closeAttributeModel(); |
| that.defaultPagination(); |
| that.getAdminCollection(); |
| } |
| }, |
| getAdminCollection: function(option) { |
| var that = this, |
| auditFilters = CommonViewFunction.attributeFilter.generateAPIObj(that.ruleUrl); |
| $.extend(that.entityCollection.queryParams, { auditFilters: that.isFilters ? auditFilters : null, limit: that.entityCollection.queryParams.limit || that.limit, offset: that.entityCollection.queryParams.offset || that.offset, sortBy: "startTime", sortOrder: "DESCENDING" }); |
| var apiObj = { |
| sort: false, |
| data: _.pick(that.entityCollection.queryParams, 'auditFilters', 'limit', 'offset', 'sortBy', 'sortOrder'), |
| success: function(dataOrCollection, response) { |
| that.entityCollection.state.pageSize = that.entityCollection.queryParams.limit || 25; |
| that.entityCollection.fullCollection.reset(dataOrCollection, option); |
| }, |
| complete: function() { |
| that.$('.fontLoader').hide(); |
| that.$('.tableOverlay').hide(); |
| that.$('.auditTable').show(); |
| }, |
| reset: true |
| } |
| this.entityCollection.getAdminData(apiObj); |
| }, |
| renderTableLayoutView: function() { |
| var that = this; |
| this.ui.showDefault.hide(); |
| require(['utils/TableLayout'], function(TableLayout) { |
| var cols = new Backgrid.Columns(that.getAuditTableColumns()); |
| that.RAuditTableLayoutView.show(new TableLayout(_.extend({}, that.commonTableOptions, { |
| columns: cols |
| }))); |
| }); |
| }, |
| createTableWithValues: function(tableDetails, isAdminAudit) { |
| var attrTable = CommonViewFunction.propertyTable({ |
| scope: this, |
| getValue: function(val, key) { |
| if (key && key.toLowerCase().indexOf("time") > 0) { |
| return Utils.formatDate({ date: val }); |
| } else { |
| return val; |
| } |
| }, |
| valueObject: tableDetails, |
| guidHyperLink: !isAdminAudit |
| }); |
| return attrTable; |
| }, |
| getAuditTableColumns: function() { |
| var that = this; |
| return this.entityCollection.constructor.getTableCols({ |
| result: { |
| label: "", |
| cell: "html", |
| editable: false, |
| sortable: false, |
| cell: Backgrid.ExpandableCell, |
| fixWidth: "20", |
| accordion: false, |
| alwaysVisible: true, |
| renderable: true, |
| isExpandVisible: function(el, model) { |
| if (Enums.serverAudits[model.get('operation')]) { |
| return false; |
| } else { |
| return true; |
| } |
| }, |
| expand: function(el, model) { |
| var operation = model.get('operation'), |
| results = model.get('result') || null, |
| adminText = 'No records found', |
| adminTypDetails = null, |
| auditData = { |
| operation: operation, |
| model: model, |
| results: results, |
| adminText: adminText, |
| adminTypDetails: adminTypDetails |
| }; |
| el.attr('colspan', '8'); |
| if (results) { |
| var adminValues = null; |
| if (operation == "PURGE") { |
| adminText = that.displayPurgeAndImportAudits(auditData); |
| } else if (operation == "EXPORT" || operation == "IMPORT") { |
| adminText = that.displayExportAudits(auditData); |
| } else { |
| adminText = that.displayCreateUpdateAudits(auditData); |
| } |
| } |
| $(el).append($('<div>').html(adminText)); |
| } |
| }, |
| userName: { |
| label: "Users", |
| cell: "html", |
| renderable: true, |
| editable: false |
| }, |
| operation: { |
| label: "Operation", |
| cell: "String", |
| renderable: true, |
| editable: false |
| }, |
| clientId: { |
| label: "Client ID", |
| cell: "String", |
| renderable: true, |
| editable: false |
| }, |
| resultCount: { |
| label: "Result Count", |
| cell: "String", |
| renderable: true, |
| editable: false, |
| formatter: _.extend({}, Backgrid.CellFormatter.prototype, { |
| fromRaw: function(rawValue, model) { |
| if (Enums.serverAudits[model.get('operation')]) { |
| return "N/A" |
| } else { |
| return rawValue; |
| } |
| } |
| }) |
| }, |
| startTime: { |
| label: "Start Time", |
| cell: "html", |
| renderable: true, |
| editable: false, |
| formatter: _.extend({}, Backgrid.CellFormatter.prototype, { |
| fromRaw: function(rawValue, model) { |
| return Utils.formatDate({ date: rawValue }); |
| } |
| }) |
| }, |
| endTime: { |
| label: "End Time", |
| cell: "html", |
| renderable: true, |
| editable: false, |
| formatter: _.extend({}, Backgrid.CellFormatter.prototype, { |
| fromRaw: function(rawValue, model) { |
| return Utils.formatDate({ date: rawValue }); |
| } |
| }) |
| }, |
| duration: { |
| label: "Duration", |
| cell: "html", |
| renderable: false, |
| editable: false, |
| sortable: false, |
| formatter: _.extend({}, Backgrid.CellFormatter.prototype, { |
| fromRaw: function(rawValue, model) { |
| var startTime = model.get('startTime') ? parseInt(model.get('startTime')) : null, |
| endTime = model.get('endTime') ? parseInt(model.get('endTime')) : null; |
| if (_.isNumber(startTime) && _.isNumber(endTime)) { |
| var duration = moment.duration(moment(endTime).diff(moment(startTime))); |
| return Utils.millisecondsToTime(duration); |
| } else { |
| return "N/A"; |
| } |
| } |
| }) |
| } |
| }, this.entityCollection); |
| }, |
| defaultPagination: function() { |
| $.extend(this.entityCollection.queryParams, { limit: this.limit, offset: this.offset }); |
| this.renderTableLayoutView(); |
| }, |
| showAdminAuditEntity: function(e) { |
| var typeDefObj = this.adminAuditEntityData[e.target.dataset.auditentityid], |
| typeDetails = this.createTableWithValues(typeDefObj, true), |
| view = '<table class="table admin-audit-details bold-key" ><tbody >' + typeDetails + '</tbody></table>', |
| modalData = { |
| title: Enums.category[typeDefObj.category] + " Type Details: " + typeDefObj.name, |
| htmlContent: view, |
| mainClass: "modal-full-screen", |
| okCloses: true, |
| showFooter: false, |
| width: "40%" |
| }; |
| this.showModal(modalData); |
| }, |
| displayPurgeAndImportAudits: function(obj) { |
| var adminValues = '<ul class="col-sm-6">', |
| guids = null, |
| adminTypDetails = Enums.category[obj.operation]; |
| if (obj.operation == "PURGE") { |
| guids = obj.results ? obj.results.replace('[', '').replace(']', '').split(',') : guids; |
| } else { |
| guids = obj.model.get('params') ? obj.model.get('params').split(',') : guids; |
| } |
| _.each(guids, function(adminGuid, index) { |
| if (index % 5 == 0 && index != 0) { |
| adminValues += '</ul><ul class="col-sm-6">'; |
| } |
| adminValues += '<li class="blue-link" data-id="adminPurgedEntity" data-operation=' + obj.operation + '>' + adminGuid.trim() + '</li>'; |
| }) |
| adminValues += '</ul>'; |
| return '<div class="row"><div class="attr-details"><h4 style="word-break: break-word;">' + adminTypDetails + '</h4>' + adminValues + '</div></div>'; |
| }, |
| displayExportAudits: function(obj) { |
| var adminValues = "", |
| adminTypDetails = (obj.operation === 'IMPORT') ? Enums.category[obj.operation] : Enums.category[obj.operation] + " And Options", |
| resultData = obj.results ? JSON.parse(obj.results) : null, |
| paramsData = (obj.model && obj.model.get('params') && obj.model.get('params').length) ? { params: [obj.model.get('params')] } : null; |
| |
| if (resultData) { |
| adminValues += this.showImportExportTable(resultData, obj.operation); |
| } |
| if (paramsData) { |
| adminValues += this.showImportExportTable(_.extend(paramsData, { "paramsCount": obj.model.get('paramsCount') })); |
| } |
| adminValues = adminValues ? adminValues : obj.adminText; |
| return '<div class="row"><div class="attr-details"><h4 style="word-break: break-word;">' + adminTypDetails + '</h4>' + adminValues + '</div></div>'; |
| }, |
| showImportExportTable: function(obj, operations) { |
| var that = this, |
| typeDetails = "", |
| view = '<ul class="col-sm-5 import-export"><table class="table admin-audit-details bold-key" ><tbody >'; |
| if (operations && operations === "IMPORT") { |
| var importKeys = Object.keys(obj); |
| _.each(importKeys, function(key, index) { |
| var newObj = {}; |
| newObj[key] = obj[key]; |
| if (index % 5 === 0 && index != 0) { |
| view += '</tbody></table></ul><ul class="col-sm-5 import-export"><table class="table admin-audit-details bold-key" ><tbody >'; |
| } |
| view += that.createTableWithValues(newObj, true); |
| }) |
| } else { |
| view += this.createTableWithValues(obj, true); |
| } |
| return view += '</tbody></table></ul>';; |
| }, |
| displayCreateUpdateAudits: function(obj) { |
| var that = this, |
| resultData = JSON.parse(obj.results), |
| typeName = obj.model ? obj.model.get('params').split(',') : null, |
| typeContainer = ''; |
| _.each(typeName, function(name) { |
| var typeData = resultData[name], |
| adminValues = (typeName.length == 1) ? '<ul class="col-sm-4">' : '<ul>', |
| adminTypDetails = Enums.category[name] + " " + Enums.auditAction[obj.operation]; |
| typeContainer += '<div class="attr-type-container"><h4 style="word-break: break-word;">' + adminTypDetails + '</h4>'; |
| _.each(typeData, function(typeDefObj, index) { |
| if (index % 5 == 0 && index != 0 && typeName.length == 1) { |
| adminValues += '</ul><ul class="col-sm-4">'; |
| } |
| var panelId = typeDefObj.name.split(" ").join("") + obj.model.get('startTime'); |
| that.adminAuditEntityData[panelId] = typeDefObj; |
| adminValues += '<li class="blue-link" data-id="adminAuditEntityDetails" data-auditEntityId=' + panelId + '>' + typeDefObj.name + '</li>'; |
| }); |
| adminValues += '</ul>'; |
| typeContainer += adminValues + '</div>'; |
| }) |
| var typeClass = (typeName.length == 1) ? null : "admin-audit-details"; |
| return '<div class="row"><div class="attr-details ' + typeClass + '">' + typeContainer + '</div></div>'; |
| }, |
| onClickAdminPurgedEntity: function(e) { |
| var that = this; |
| require(['views/audit/AuditTableLayoutView'], function(AuditTableLayoutView) { |
| var obj = { |
| guid: $(e.target).text(), |
| titleText: (e.target.dataset.operation == "PURGE") ? "Purged Entity Details: " : "Import Details: " |
| }, |
| modalData = { |
| title: obj.titleText + obj.guid, |
| content: new AuditTableLayoutView(obj), |
| mainClass: "modal-full-screen", |
| okCloses: true, |
| showFooter: false, |
| }; |
| that.showModal(modalData); |
| }); |
| }, |
| showModal: function(modalObj, title) { |
| var that = this; |
| require([ |
| 'modules/Modal' |
| ], function(Modal) { |
| var modal = new Modal(modalObj).open(); |
| modal.on('closeModal', function() { |
| $('.modal').css({ 'padding-right': '0px !important' }); |
| modal.trigger('cancel'); |
| }); |
| modal.$el.on('click', 'td a', function() { |
| modal.trigger('cancel'); |
| }); |
| }); |
| } |
| }); |
| return AdminAuditTableLayoutView; |
| }); |