def create_dashboard(drop=False): from crits.dashboards.dashboard import SavedSearch, Dashboard if drop: Dashboard.drop_collection() SavedSearch.drop_collection() defaultDashboard = Dashboard.objects(name="Default", analystId__not__exists=1 , isPublic=True).first() if not defaultDashboard: defaultDashboard = Dashboard() defaultDashboard.name = "Default" defaultDashboard.isPublic = True defaultDashboard.save() for title in ["Counts", "Top Campaigns","Recent Indicators", "Recent Emails", "Recent Samples"]: savedSearch = SavedSearch() savedSearch.name = title savedSearch.dashboard = defaultDashboard.id savedSearch.isDefaultOnDashboard = True savedSearch.tableColumns = getColumnsForTable(title) if title == "Counts": savedSearch.sizex = 10 elif title == "Top Campaigns": savedSearch.sizex = 25 elif title == "Counts": savedSearch.sizey = 13 elif title == "Recent Indicators": savedSearch.row = 15 elif title == "Recent Emails": savedSearch.row = 23 elif title == "Recent Samples": savedSearch.row = 31 savedSearch.save() print "Default Dashboard Created." else: print "Default Dashboard already exists."
def generate_search_for_saved_table(user, id=None, request=None): """ Called by edit_save_search in views.py. This is for editing a previously saved table or one of the default dashboard tables """ from crits.core.handlers import data_query response = {} savedSearch = None try: savedSearch = SavedSearch.objects(id=id).first() if not savedSearch: response['Result'] = "ERROR" response[ 'Message'] = "Error finding table, please try again later." return response except: savedSearch = SavedSearch() savedSearch.isDefaultOnDashboard = True savedSearch.name = id.replace("_", " ") id = None results = [] records = [] term = "" url = "" if not savedSearch.isDefaultOnDashboard: objType = get_obj_type_from_string(savedSearch.objType) resp = get_query_without_request(objType, user, savedSearch.searchTerm, "global") if resp['Result'] == "ERROR": return resp formatted_query = resp['query'] term = resp['term'] resp = data_query(objType, user, query=formatted_query, count=True) results.append({'count': resp['count'], 'name': savedSearch.objType}) else: results = { "name": savedSearch.name, "count": str(len(records)), "type": get_obj_name_from_title(savedSearch.name) } #special url to get the records of a default dashboard since their queries are different url = reverse( "crits.dashboards.views.get_dashboard_table_data", kwargs={"tableName": str(savedSearch.name.replace(" ", "_"))}) args = {'term': term, 'results': results, 'dataUrl': url, 'Result': "OK"} if savedSearch: args.update({ 'tableId': id, 'tableName': savedSearch.name, 'columns': savedSearch.tableColumns, 'sortBy': savedSearch.sortBy, 'sizex': savedSearch.sizex, 'maxRows': savedSearch.maxRows, 'isDefaultOnDashboard': savedSearch.isDefaultOnDashboard, }) if savedSearch.dashboard: args["currentDash"] = str(savedSearch.dashboard) args["dashtheme"] = Dashboard.objects( id=savedSearch.dashboard).first().theme return args
def generate_search_for_saved_table(user, id=None,request=None): """ Called by edit_save_search in views.py. This is for editing a previously saved table or one of the default dashboard tables """ from crits.core.handlers import data_query response = {} savedSearch = None try: savedSearch = SavedSearch.objects(id=id).first() if not savedSearch: response['Result'] = "ERROR" response['Message'] = "Error finding table, please try again later." return response except: savedSearch = SavedSearch() savedSearch.isDefaultOnDashboard = True savedSearch.name = id.replace("_", " ") id = None results = [] records = [] term = "" url = "" if not savedSearch.isDefaultOnDashboard: objType = get_obj_type_from_string(savedSearch.objType) resp = get_query_without_request(objType, user, savedSearch.searchTerm, "global") if resp['Result'] == "ERROR": return resp formatted_query = resp['query'] term = resp['term'] resp = data_query(objType, user, query=formatted_query, count=True) results.append({'count': resp['count'], 'name': savedSearch.objType}) else: results = {"name":savedSearch.name, "count":str(len(records)), "type":get_obj_name_from_title(savedSearch.name)} #special url to get the records of a default dashboard since their queries are different url = reverse("crits-dashboards-views-get_dashboard_table_data", kwargs={"tableName":str(savedSearch.name.replace(" ", "_"))}) args = {'term': term, 'results': results, 'dataUrl':url, 'Result': "OK" } if savedSearch: args.update({'tableId':id, 'tableName': savedSearch.name, 'columns': savedSearch.tableColumns, 'sortBy': savedSearch.sortBy, 'sizex' : savedSearch.sizex, 'maxRows': savedSearch.maxRows, 'isDefaultOnDashboard': savedSearch.isDefaultOnDashboard, }) if savedSearch.dashboard: args["currentDash"] = str(savedSearch.dashboard) args["dashtheme"] = Dashboard.objects(id=savedSearch.dashboard).first().theme return args
def save_data(userId, columns, tableName, searchTerm="", objType="", sortBy=None, tableId=None, isDefaultOnDashboard=False, maxRows=0, dashboard=None, clone=False, row=0, grid_col=0, sizex=0, sizey=0): """ Saves the customized table in the dashboard. Called by save_search and save_new_dashboard via ajax in views.py. """ try: if searchTerm: searchTerm = HTMLParser.HTMLParser().unescape(searchTerm) #if user is editing a table if tableId : newSavedSearch = SavedSearch.objects(id=tableId).first() if not newSavedSearch: raise Exception("Cannot find Table") elif clone: clonedSavedSearch = cloneSavedSearch(newSavedSearch, dashboard.id) else: newSavedSearch = SavedSearch() cols = [] for col in columns: if "field" not in col or "caption" not in col: continue cols.append(col) if not cols: raise("There are no columns to save") newSavedSearch.tableColumns = cols newSavedSearch.name = tableName oldDashId = None if dashboard and newSavedSearch.dashboard != dashboard.id: newSavedSearch.dashboard= dashboard.id #if it is not a deault dashboard table, it must have a searchterm and objtype if searchTerm: newSavedSearch.searchTerm = searchTerm if objType: newSavedSearch.objType = objType #this is to identify the default tables on every user dashboard newSavedSearch.isDefaultOnDashboard = isDefaultOnDashboard if sortBy: newSavedSearch.sortBy = sortBy if sizex: newSavedSearch.sizex = sizex elif not newSavedSearch.sizex: newSavedSearch.sizex = 50 if sizey: newSavedSearch.sizey = sizey elif maxRows and maxRows != newSavedSearch.maxRows: newSavedSearch.sizey = int(maxRows)+1 elif not newSavedSearch.sizey: newSavedSearch.sizey = 7 if row: newSavedSearch.row = row elif not newSavedSearch.row: newSavedSearch.row = 1 if grid_col: newSavedSearch.col = grid_col elif not newSavedSearch.col: newSavedSearch.col = 1 if maxRows: newSavedSearch.maxRows = maxRows; newSavedSearch.save() #if the old dashboard is empty, delete it if oldDashId: deleteDashboardIfEmpty(oldDashId) except Exception as e: print "ERROR: " print e return {'success': False, 'message': "An unexpected error occurred while saving table. Please refresh and try again"} return {'success': True,'message': tableName+" Saved Successfully!"}
def save_data(userId, columns, tableName, searchTerm="", objType="", sortBy=None, tableId=None, isDefaultOnDashboard=False, maxRows=0, dashboard=None, clone=False, row=0, grid_col=0, sizex=0, sizey=0): """ Saves the customized table in the dashboard. Called by save_search and save_new_dashboard via ajax in views.py. """ try: if searchTerm: searchTerm = HTMLParser.HTMLParser().unescape(searchTerm) #if user is editing a table if tableId: newSavedSearch = SavedSearch.objects(id=tableId).first() if not newSavedSearch: raise Exception("Cannot find Table") elif clone: clonedSavedSearch = cloneSavedSearch(newSavedSearch, dashboard.id) else: newSavedSearch = SavedSearch() cols = [] for col in columns: if "field" not in col or "caption" not in col: continue cols.append(col) if not cols: raise ("There are no columns to save") newSavedSearch.tableColumns = cols newSavedSearch.name = tableName oldDashId = None if dashboard and newSavedSearch.dashboard != dashboard.id: newSavedSearch.dashboard = dashboard.id #if it is not a deault dashboard table, it must have a searchterm and objtype if searchTerm: newSavedSearch.searchTerm = searchTerm if objType: newSavedSearch.objType = objType #this is to identify the default tables on every user dashboard newSavedSearch.isDefaultOnDashboard = isDefaultOnDashboard if sortBy: newSavedSearch.sortBy = sortBy if sizex: newSavedSearch.sizex = sizex elif not newSavedSearch.sizex: newSavedSearch.sizex = 50 if sizey: newSavedSearch.sizey = sizey elif maxRows and maxRows != newSavedSearch.maxRows: newSavedSearch.sizey = int(maxRows) + 1 elif not newSavedSearch.sizey: newSavedSearch.sizey = 7 if row: newSavedSearch.row = row elif not newSavedSearch.row: newSavedSearch.row = 1 if grid_col: newSavedSearch.col = grid_col elif not newSavedSearch.col: newSavedSearch.col = 1 if maxRows: newSavedSearch.maxRows = maxRows newSavedSearch.save() #if the old dashboard is empty, delete it if oldDashId: deleteDashboardIfEmpty(oldDashId) except Exception as e: print "ERROR: " print e return { 'success': False, 'message': "An unexpected error occurred while saving table. Please refresh and try again" } return {'success': True, 'message': tableName + " Saved Successfully!"}
def save_data(userId, columns, tableName, searchTerm="", objType="", sortBy=None, tableId=None, top=None, left=None, width=0, isDefaultOnDashboard=False, maxRows=0, dashboardWidth=0, dashboard=None, clone=False): """ Saves the customized table in the dashboard. Called by save_search and save_new_dashboard via ajax in views.py. width - css style used on dashboard tableWidth - width of table on edit page in order to calculate percentage width of columns """ try: if searchTerm: searchTerm = HTMLParser.HTMLParser().unescape(searchTerm) #if user is editing a table if tableId : newSavedSearch = SavedSearch.objects(id=tableId).first() if not newSavedSearch: raise Exception("Cannot find Table") elif clone: clonedSavedSearch = cloneSavedSearch(newSavedSearch, dashboard.id) else: newSavedSearch = SavedSearch() cols = [] for col in columns: if "field" not in col or "caption" not in col: continue cols.append(col) if not cols: raise("There are no columns to save") newSavedSearch.tableColumns = cols newSavedSearch.name = tableName oldDashId = None if dashboard: if newSavedSearch.dashboard != dashboard.id: newSavedSearch.left = -1 newSavedSearch.top = -1 newSavedSearch.dashboard= dashboard.id #if it is not a deault dashboard table, it must have a searchterm and objtype if searchTerm: newSavedSearch.searchTerm = searchTerm if objType: newSavedSearch.objType = objType #this is to identify the default tables on every user dashboard newSavedSearch.isDefaultOnDashboard = isDefaultOnDashboard if sortBy: newSavedSearch.sortBy = sortBy if (top or left) and dashboardWidth: newSavedSearch.top = top leftAsPercent = float(left)/float(dashboardWidth)*100 #if the new left value is within 2 of previous, dont change. #This is because rounding issues in the HTML were constantly #shifting the tables over by 1% every save if newSavedSearch.left==-1 or not (leftAsPercent >= newSavedSearch.left-2 and leftAsPercent <= newSavedSearch.left+2): newSavedSearch.left = leftAsPercent if maxRows: #if the table is growing in height, reset it's position so it doesnt #overlap with other tables if int(maxRows) > newSavedSearch.maxRows: newSavedSearch.top=-1 newSavedSearch.maxRows = maxRows; if width: width = float(width) if not dashboardWidth and newSavedSearch.width and (width > newSavedSearch.width+2 or width < newSavedSearch.width-2): newSavedSearch.top=-1 newSavedSearch.width = float(width) newSavedSearch.save() #if the old dashboard is empty, delete it if oldDashId: deleteDashboardIfEmpty(oldDashId) except Exception as e: print e return {'success': False, 'message': "An unexpected error occurred while saving table. Please refresh and try again"} return {'success': True,'message': tableName+" Saved Successfully!"}
def save_data(userId, columns, tableName, searchTerm="", objType="", sortBy=None, tableId=None, top=None, left=None, width=0, isDefaultOnDashboard=False, maxRows=0, dashboardWidth=0, dashboard=None, clone=False): """ Saves the customized table in the dashboard. Called by save_search and save_new_dashboard via ajax in views.py. width - css style used on dashboard tableWidth - width of table on edit page in order to calculate percentage width of columns """ try: if searchTerm: searchTerm = HTMLParser.HTMLParser().unescape(searchTerm) #if user is editing a table if tableId: newSavedSearch = SavedSearch.objects(id=tableId).first() if not newSavedSearch: raise Exception("Cannot find Table") elif clone: clonedSavedSearch = cloneSavedSearch(newSavedSearch, dashboard.id) else: newSavedSearch = SavedSearch() cols = [] for col in columns: if "field" not in col or "caption" not in col: continue cols.append(col) if not cols: raise ("There are no columns to save") newSavedSearch.tableColumns = cols newSavedSearch.name = tableName oldDashId = None if dashboard: if newSavedSearch.dashboard != dashboard.id: newSavedSearch.left = -1 newSavedSearch.top = -1 newSavedSearch.dashboard = dashboard.id #if it is not a deault dashboard table, it must have a searchterm and objtype if searchTerm: newSavedSearch.searchTerm = searchTerm if objType: newSavedSearch.objType = objType #this is to identify the default tables on every user dashboard newSavedSearch.isDefaultOnDashboard = isDefaultOnDashboard if sortBy: newSavedSearch.sortBy = sortBy if (top or left) and dashboardWidth: newSavedSearch.top = top leftAsPercent = float(left) / float(dashboardWidth) * 100 #if the new left value is within 2 of previous, dont change. #This is because rounding issues in the HTML were constantly #shifting the tables over by 1% every save if newSavedSearch.left == -1 or not ( leftAsPercent >= newSavedSearch.left - 2 and leftAsPercent <= newSavedSearch.left + 2): newSavedSearch.left = leftAsPercent if maxRows: #if the table is growing in height, reset it's position so it doesnt #overlap with other tables if int(maxRows) > newSavedSearch.maxRows: newSavedSearch.top = -1 newSavedSearch.maxRows = maxRows if width: width = float(width) if not dashboardWidth and newSavedSearch.width and ( width > newSavedSearch.width + 2 or width < newSavedSearch.width - 2): newSavedSearch.top = -1 newSavedSearch.width = float(width) newSavedSearch.save() #if the old dashboard is empty, delete it if oldDashId: deleteDashboardIfEmpty(oldDashId) except Exception as e: print e return { 'success': False, 'message': "An unexpected error occurred while saving table. Please refresh and try again" } return {'success': True, 'message': tableName + " Saved Successfully!"}