Sisense Community logo
    • Community Feedback
    • Chapters
    • Events
    • Forums
      • Help and How To
      • Product Feedback Forum
      • Strategy & Use Cases
    • Blogs
    • KB Docs
      • KB Docs
      • Add-Ons & Plug-Ins
      • APIs
      • Best Practices
      • Blox
      • CDT
      • Cloud Managed Service
      • Data Models
      • Data Sources
      • Embedding Analytics
      • How-Tos & FAQs
      • Onboarding
      • PySisense
      • Security
      • Sisense Administration
      • Sisense Intelligence & AI
      • Troubleshooting
      • Widget & Dashboard Scripts
    • Support
    • Learning
      • Sisense Academy: Free Courses and Certifications
      • Official Developer Documentation
      • Official Product Documentation
      • Official Sisense Youtube Channel
      • Sisense Compose SDK Playground
      • Official Sisense Discord
    • Use Case Gallery
    Discussions
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
    •                    
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   
    Discussions
    • TagsChevronRightIcon
    Best Practice
    • Blog banner
      • APIsChevronRightIcon

      Connection Tool - Programmatically Remove Unused Datasource Connections, and List All Connections

                                                                                                                                                                       

      Connection Tool - A Tool to Programmatically Remove Unused Datasource Connections, and List All Connections     Managing connections within your Sisense server can become complex over time, if there are a large number of connections, and connections are often added, and replace earlier datasource connections. In some scenarios unused connections can accumulate, potentially cluttering the Connection Manager UI with no longer relevant connections. Although unused connections typically represent minimal direct security risk, it's considered best practice to maintain a clean, organized list of connections, and in some scenarios it can be desired to remove all unused connections. Sisense prevents the deletion of connections actively used in datasources, safeguarding your dashboards and datasources from disruptions. However, inactive or "orphaned" connections remain after datasources are deleted or a connection is replaced, potentially contributing to unnecessary UI complexity in the connection manager UI. Connections can be of any type Sisense supports, common types include various SQL connections, Excel files, and CSV files, as well as many data providers, such as Big Panda. This tool can also be used to list all connections, with no automatic deletion of unused connections. Introducing the Sisense Connection Prune Tool The Sisense Connection Prune Tool is a Python-based Sisense API based tool designed to programmatically identify and delete unused connections. It generates a CSV report listing all connections and their associated datasources, streamlining your connection management process. If desired, it can automatically remove all unused connections automatically from a Sisense server.   Using the Tool, sourcing the Virtual Environment, generating the Connection CSV   CSV Output of Used Connections and Associated Datasources   CSV opened visually to view as Table, Excel and other programs and text editors can open CSV files   Sisense Connection Prune Tool README Here's the full README included with the tool: # Sisense Connection Prune Tool A command-line tool to list used data connections and prune unused Sisense connections via CSV. It allows you to generate a CSV file of all connections and their dependencies, then delete those connections if needed, after removing the connections to keep from the CSV. ## Features - **Dry Run Mode**: Simulate deletions without making any changes. - **CSV-Based Flow**: Easily inspect and list connections to remove before deletion. - **Logging**: Extensive logs if needed. - **Error Handling**: Clear and descriptive messages for issues encountered during execution. ## Usage 1. **Activate the Virtual Environment** After downloading this project folder, activate the Python virtual environment bundled with it that includes all Python dependencies. - **Windows**: `venv\Scripts\activate` - **macOS/Linux**: `source venv/bin/activate` 2. **Configure the Tool** Open the `config.yaml` file and set your Sisense server URL, bearer token, CSV file path, and log file path. For example: ```yaml server_url: "https://your.sisense.server" bearer_token: "your_bearer_token_here" dry_run: true csv_file_path: "connections.csv" log_file_path: "connection_tool.log" ``` - **server_url**: The URL of your Sisense instance. - **bearer_token**: Your Sisense API token for authentication. - **dry_run**: If set to `true`, deletions will be simulated (no real deletions). - **csv_file_path**: Where the CSV file should be created and read from. - **log_file_path**: Where log file will be stored. 3. **Run the Tool** ```bash python3 ConnectionPruneTool.py ``` You will be prompted to choose an option: 1. **Generate connection CSV** - Fetches all Sisense connections. - Immediately removes (or simulates removing, if `dry_run` is `true`) any connection with no dependencies. - Writes all remaining connections and their dependencies to the CSV file. - **Important**: Inspect the CSV file and remove lines for any connections you want to **keep**. 2. **Delete connections from CSV list** - Reads the CSV file. - Removes or simulates removing each connection still listed. - Provides a summary report of which connections were deleted or bypassed. 4. **Review the Logs** Check the file specified in `log_file_path` for a record of all actions taken or simulated if needed. This is helpful for understanding what happened during each run and diagnosing any issues. ## Example Workflow 1. **Generate CSV** ```bash python3 ConnectionPruneTool.py # Choose option 1 when prompted ``` After generation, open the CSV file and **delete rows** corresponding to any connections you want to **keep**. 2. **Delete Connections** ```bash python3 ConnectionPruneTool.py # Choose option 2 when prompted ``` The tool will read the CSV and delete the remaining listed connections (or simulate deletion, if `dry_run` is enabled). ## Notes - Unused connections are removed automatically in step 1, without a CSV step - To keep a connection, remove its line from the CSV before proceeding with deletion. - If `dry_run` is set to `true`, no actual deletions will occur, only simulated logs and printed messages. - The log file will be cleared at the start of each run, so be sure to review or archive logs (or change log file name in config), if needed. ​ This is a command-line tool to list used data connections and prune unused Sisense connections, in general and via a CSV list. It allows a user with a data admin or higher bearer token to generate a CSV file of all connections and their dependencies, then delete those connections if needed, from the remaining connections in the CSV. Example Output: Deleted unused connection: Old_DB_Connection (ID: 123abc) CSV file generated at connections.csv. It contains 25 row(s) of active connections. Please review and remove lines for connections you want to keep before running deletion step by running tool again. Remaining lines will be deleted in deletion mode. Summary Report: Total lines in CSV (active used connections): 25 Deleted Unused Connections: - Old_DB_Connection No connections were bypassed.   API Endpoints Used Retrieve connections: GET /api/v2/connections Retrieve dependencies: GET /api/v2/connections/{connection_id}/getAllDependencies Delete connection: DELETE /api/v2/connections/{connection_id} Full Code connections.py - Uses Sisense API endpoints to: Fetch all connections (GET /api/v2/connections). Retrieve datasource dependencies for a specific connection (GET /api/v2/connections/{connection_id}/getAllDependencies). Delete a specific connection (DELETE /api/v2/connections/{connection_id}).     from helperFunctions import load_config, api_get, api_delete config = load_config() headers = {"Authorization": f"Bearer {config['bearer_token']}"} base_url = config["server_url"] # Retrieve all connections from Sisense def get_all_connections(): endpoint = f"{base_url}/api/v2/connections" return api_get(endpoint, headers) # Retrieve dependencies of a specific connection def get_connection_dependencies(connection_id): endpoint = f"{base_url}/api/v2/connections/{connection_id}/getAllDependencies" return api_get(endpoint, headers) # Delete a specific connection def delete_connection(connection_id): endpoint = f"{base_url}/api/v2/connections/{connection_id}" return api_delete(endpoint, headers) helperFunctions.py - Uses the Requests library to handle API requests (GET/DELETE). Catches and logs API errors. Uses PyYAML to read the config.yaml file for configuration.     import yaml import requests import logging # Load configuration from YAML file def load_config(): with open("config.yaml", "r") as file: return yaml.safe_load(file) # Configure logging settings def setup_logging(log_file): logging.basicConfig( filename=log_file, level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s", ) # Perform a GET request with error handling def api_get(endpoint, headers): try: response = requests.get(endpoint, headers=headers, verify=False) response.raise_for_status() return response.json() except requests.RequestException as e: logging.error(f"GET request failed: {e}") print(f"Error during GET request: {e}") return None # Perform a DELETE request with error handling def api_delete(endpoint, headers): try: response = requests.delete(endpoint, headers=headers, verify=False) response.raise_for_status() return response except requests.RequestException as e: logging.error(f"DELETE request failed: {e}") print(f"Error during DELETE request: {e}") return None ConnectionPruneTool.py - Serves as the entry point for the entire tool. Implements a CLI for user interaction. Invokes connections.py and helperFunctions.py to retrieve, analyze, and optionally delete Sisense connections. Uses Pandas to build a DataFrame of connection details and writes the results to a CSV file. Reads back the CSV file to remove selected connections after manual edits. Manages logs and prints summary reports to the terminal. import pandas as pd import logging import os from connections import ( get_all_connections, get_connection_dependencies, delete_connection, ) from helperFunctions import load_config, setup_logging # Load config yaml config = load_config() setup_logging(config["log_file_path"]) # Clear log file at start open(config["log_file_path"], "w").close() dry_run = config["dry_run"] csv_path = config["csv_file_path"] def generate_connections_csv(): """ Retrieves all connections from Sisense, deletes any that have no dependencies (unless in dry_run mode), and writes the remaining used connections and their dependent data models to a CSV file. """ # Create or clear existing CSV open(csv_path, "w").close() connections = get_all_connections() if connections is None: logging.error("Failed to retrieve connections.") print("Failed to retrieve connections.") return data = [] deleted = [] bypassed = [] # Go through each connection returned from the API for conn in connections: dependencies = get_connection_dependencies(conn["oid"]) if dependencies is None: logging.warning( f"Failed to retrieve dependencies for: {conn['name']} ({conn['oid']})" ) print( f"Failed to retrieve dependencies for: {conn['name']} ({conn['oid']})" ) bypassed.append(conn["name"]) continue # If no dependencies, optionally delete the connection (not in dry-run) if not dependencies: action_msg = "[Dry Run] Would delete" if dry_run else "Deleted" log_str = ( f"{action_msg} unused connection: {conn['name']} (ID: {conn['oid']})" ) print(log_str) logging.info(log_str) if not dry_run: try: response = delete_connection(conn["oid"]) # If response is None, treat it as a failed deletion if response is None: logging.error( f"Failed to delete unused connection: {conn['name']} ({conn['oid']})." ) print( f"Error deleting unused connection: {conn['name']} ({conn['oid']})" ) bypassed.append(conn["name"]) else: deleted.append(conn["name"]) except Exception as e: logging.error( f"Exception while deleting unused connection: {conn['name']} ({conn['oid']}) - {e}" ) print( f"Error deleting unused connection: {conn['name']} ({conn['oid']})" ) bypassed.append(conn["name"]) else: # If the connection is used, add each dependency row to CSV. # Use a fallback value if 'title' or 'oid' is missing. for dep in dependencies: dep_title = dep.get( "title", "NULL TITLE Share Datasource with associated Bearer Token user to include in CSV", ) dep_oid = dep.get("oid", "NULL OID") data.append( { "Connection Name": conn["name"], "Connection ID": conn["oid"], "Elasticube/Data Model Name": dep_title, "Elasticube/Data Model ID": dep_oid, } ) # Create a DataFrame of only the used connections (with datasource dependencies) df = pd.DataFrame(data) df.to_csv(csv_path, index=False) row_count = len(df) logging.info(f"Generated CSV at {csv_path}") print( f"CSV file generated at {csv_path}. " f"It contains {row_count} row(s) of used connections.\n" "Please review and remove lines for connections you want to keep " "before running deletion step by running tool again. Remaining lines will be deleted in deletion mode." ) # Summaries for auto-deleted (unused) connections print("\nSummary Report:") print(f"Total lines in CSV (active used connections): {row_count}") if deleted: print("\nDeleted Unused Connections:") for d in deleted: print(f" - {d}") else: print("\nNo connections were deleted in this step.") if bypassed: print("\nBypassed Connections:") for b in bypassed: print(f" - {b}") else: print("\nNo connections were bypassed in this step.") def delete_connections_from_csv(): """ Reads the CSV (remaining lines after user review, removing lines for connections to keep), then deletes each connection listed. If a delete fails or returns None, the connection is logged and added to 'bypassed'. """ if not os.path.exists(csv_path): print( "CSV file does not exist. Please generate it first or fix the config path." ) return df = pd.read_csv(csv_path) deleted = [] bypassed = [] for _, row in df.iterrows(): conn_id = row["Connection ID"] conn_name = row["Connection Name"] action_msg = "[Dry Run] Would delete" if dry_run else "Deleted" log_str = f"{action_msg} connection: {conn_name} ({conn_id})" print(log_str) logging.info(log_str) if not dry_run: try: response = delete_connection(conn_id) if response is None: logging.error( f"Failed to delete connection: {conn_name} ({conn_id})" ) print(f"Error deleting connection: {conn_name} ({conn_id})") bypassed.append(conn_name) else: deleted.append(conn_name) except Exception as e: logging.error( f"Exception while deleting connection: {conn_name} ({conn_id}) - {e}" ) print(f"Error deleting connection: {conn_name} ({conn_id})") bypassed.append(conn_name) # Print summary report print("\nSummary Report:") if deleted: print("Deleted Connections:") for d in deleted: print(f" - {d}") else: print("No connections were deleted.") if bypassed: print("\nBypassed:") for b in bypassed: print(f" - {b}") else: print("No connections were bypassed.") if __name__ == "__main__": # If there is no CSV file found, select step 1 automatically if not os.path.exists(csv_path): print( "No CSV file found; defaulting to generating connections CSV. " "Correct config if CSV file name has changed." ) generate_connections_csv() else: choice = input( "Choose an option:\n" "1 - Generate connection CSV\n" "2 - Delete connections from CSV list\n" "Enter your choice (1 or 2): " ) if choice == "1": generate_connections_csv() elif choice == "2": delete_connections_from_csv() else: print("Invalid option. Please enter '1' or '2'.") Conclusion By automating the detection of inactive connections and simplifying their removal, the Sisense Connection Prune Tool reduces clutter in the Sisense server Connection Manager UI while minimizing the risk of unintentionally impacting active datasources. Whether you opt for a dry-run mode to review potential deletions in a generated CSV file, or to simply list connections, or proceed with the full removal of unused connections, this tool offers a clear, flexible, and reliable approach to keeping your connections organized. A full copy of the tool, is attached below.        

      Jeremy Friedel
      Jeremy FriedelPosted 1 year ago • Last reply 4 months ago
      4
               
      • TroubleshootingChevronRightIcon

      How to update style sheets in the branding folder for dashboards

                                                               

      How to update style sheets in the branding folder for dashboards Introduction In this article, we will address the issue of updates made to style sheets within a branding folder not reflecting on dashboards. Users often encounter this problem due to browser caching, which prevents the most updated CSS files from loading. This guide provides solutions to ensure your dashboard reflects the latest version of your style sheets. Step-by-Step Guide To resolve the issue of style changes not appearing on your dashboard, follow these steps: Clear Browser Cache: Sometimes, the browser might cache old versions of files, causing it to display outdated data. To fix this: Perform a hard refresh by pressing Ctrl + F5 (on Windows) or Cmd + Shift + R (on Mac). Additionally, manually clear your browser's cache through the browser settings to ensure that it loads the latest version of your CSS file. Rename the CSS File: If clearing the cache does not work, consider renaming your CSS file. By changing the file name (e.g., from base.css to base_v2.css ) and updating the reference in your dashboard, the browser will treat it as a new resource and fetch the latest version. Implement Cache-Busting Techniques: Another effective method is to append a query parameter to your CSS file URL. This technique forces the browser to load the latest version of the file. For instance, modify the link to: https://paragoninsgroup.sisense.com/branding/LossRuns/base.css?v=123456789 . Generate some random string each time to ensure the browser always fetches the latest file.  If you want to handle changes manually, you might want to modify the link to: https://paragoninsgroup.sisense.com/branding/LossRuns/base.css?v=2 . Increment the version number each time you make changes to ensure the browser fetches the updated file. Conclusion By following the above steps, you can ensure that changes made to style sheets in your branding folder are accurately reflected on your dashboards. Utilizing these techniques will help to overcome issues caused by browser caching and ensure your dashboard's appearance stays up-to-date. References/ Related Content How to Clear Browser Cache in Different Browsers For further assistance, please refer to the above resources or contact our support team for personalized help.

      Vicki786
      Vicki786Posted 1 year ago
      0
               
      • How-Tos & FAQsChevronRightIcon

      How to create a list of users with a current role based on the usage analytics elasticube

                               

      How to create a list of users with a current role based on the usage analytics elasticube Step-by-step guide:  To get a list of the users with their roles, you can use table usage from the Usage analytics elasticube. We will need the next fields from it - email and userRole . Add these columns to your widget. In this table, you can find all the roles that these users had previously:   [ALT Text: A table displays two columns: email and userRole. User roles vary as Viewer, Data Designer, datadesigner, and Designer. Emails are redacted with red lines.] To minimize the response to the last userRole, let's go to the Data - elasticube Usage Analytics , open the table usage table, and create a Custom Column .   [ALT Text: Interface with a list of data fields on the left and a drop-down menu on the right. Arrows highlight "trackingId" and "Add Custom Column."]   Name it - rank_date_ids We will use the function RankCompetitionDesc ( https://docs.sisense.com/main/SisenseLinux/mathematical-functions.htm ) Our query for this column will look like this: RankCompetitionDesc( email, [timeStamp] ) Press the Save button and Build the Elasticube. [ALT Text: Screenshot showing a code editor with a function titled "RankCompetitionDesc" using parameters like email and timestamp. A blue "Save" button is highlighted.] Go to the dashboard and edit our widget. Add a filter for a column rank_date_ids = 1 [ALT Text:  "Screenshot of a filter menu in a usage analytics model interface. A drop-down list is open, displaying numbers 1 to 6. The number 1 is selected. Options to select all or clear all are visible. The interface displays 'Apply' and 'Cancel' buttons below."] As a result, we will get the current user roles for every user.   [ALT Text: A table with two columns, "email" and "userRole." Emails are redacted. Roles listed are "Viewer" and "Data Designer," alternating between rows.] Disclaimer: This post outlines a potential custom workaround for a specific use case or provides instructions regarding a specific task. The solution may not work in all scenarios or Sisense versions, so we strongly recommend testing it in your environment before deployment. If you need further assistance with this, please let us know.  

      OleksandrB
      OleksandrBPosted 1 year ago
      0
               
      • Sisense AdministrationChevronRightIcon

      How to make a dashboard as the first page of the analytics tab

                                       

      Introduction:  How to add the dashboard/site as the first page of the Analytics tab with the help of the Branding. Step-by-step guide:  Create a dashboard based on the BLOX, for example Share this dashboard with the group Everyone Press 3 dots on the top right of the dashboard, select Embed code, and select the following checkboxes on the float window [ALT Text: The image shows the "Embed Dashboard" settings for a Sisense dashboard. It includes options to customize the embed settings, such as toggling the right panel, left panel, toolbar, and header. The URL code at the bottom updates based on the selected options. The unchecked options suggest that the embed link is being customized to hide specific UI elements in the embedded dashboard.] Copy the URL Code Paste it to the Admin - App configuration - White labeling - Analytics & Data Main pages  -  Analytics Home Page or  Admin - Server & Hardware - Management - Configuration - Branding - Home Page  (Be sure that toggle Enable Branding is enabled) Press the Save button to save the changes Check with a user who has Viewer permission To add the site, you should just paste the URL of the site into the Home Page field. Just remember that, based on the security, that site should allow use if with Iframe from other domains - X-Frame-Options: ALLOW-FROM origin ( https://developer.mozilla.org/en-US/docs/Web/HTTP/Reference/Headers/X-Frame-Options ) To check this, you can use the  https://example.com site Refrences Sisense Docs 

      OleksandrB
      OleksandrBPosted 1 year ago
      0
               
      • TroubleshootingChevronRightIcon

      Resolving Build Failures Due to Memory Issues [Safe-Mode]

                               

      Resolving Build Failures Due to Memory Issues [Safe-Mode] This is the guide of which settings should be checked and adjusted to resolve the problem and prevent future occurrences, in cases when cubes fail with the error ‘Safe-mode’. Please follow the steps below, and after that try to re-build the failed cubes. Steps to Address the Issue 1. Review the Failed Cube Check the Failed Elasticubes : Please review recently failed cubes to understand which build was affected by the safe mode. If you made any recent changes that might affect the RAM consumption, you can try to revert them and re-trigger the build. 2. Adjust Build Parameters To reduce memory usage during builds, consider modifying the following settings: a. Reduce Max Concurrent Builds Why? Lowering the number of builds that run simultaneously decreases the strain on server memory. How to Do It: Navigate to your Build Settings (Admin → Server&Hardware → Sytem Management → Configuration → 5 clicks on Sisense logo → Build) . Locate the MaxNumberOfConcurrentBuilds option. Decrease the number to a lower value (e.g., from 20 to 3). [ALT Text: The settings menu within the app is highlighted, drawing attention to the selected feature for easy access.] b. Decrease Base Table Max Threads Why? Using fewer threads reduces memory consumption per build, though builds may take longer. How to Do It: Go to the  Build Settings (Admin → Server&Hardware → Sytem Management → Configuration → Build ) Find the Base Table Max Threads setting. Adjust it to a lower number (e.g., from 4 to 1). [ALT Text:  Cloudflare dashboard settings page displaying various configuration options and features for user management and security.] c. Verify Max RAM Setting in the Data Group Why? Ensuring the Max RAM is set correctly prevents the server from overusing memory or entering Safe Mode by mistake. How to Do It: Go to Admin → Server&Hardware → Data Groups. Edit the Data Group settings that correspond to the problematic build. Check the Max RAM value under the  Build Node section. Adjust it if necessary to align with your server's capacity.   [ALT Text:  Settings page displaying configuration options for the RAM module, including speed, capacity, and voltage settings.] d. Enable "Stop When Idle" in the Data Group Why? Automatically stopping unused cubes frees up memory for active processes. How to Do It: Go to Admin → Server&Hardware → Data Groups. In the Data Group settings, find the Stop When Idle option. Enable this feature to stop cubes when they're not in use. [ALT Text:  Edit data group option displayed in the data group wizard interface, allowing users to modify existing data groups.] 3. Consider Scaling Server Resources If the above adjustments don't resolve the issue, it might be time to enhance your server resources. Next Steps: Reach out to your Customer Success Manager (CSM) to discuss options. Need Assistance? If you have questions or need help with any of these steps, please don't hesitate to contact our support team through the ticket. We're here to support you!  

      nataliia_kh
      nataliia_khPosted 1 year ago
      0
               
      • TroubleshootingChevronRightIcon

      Resolving Missing Parse Option in SQL DB Connection

                               

      Resolving Missing Parse Option in SQL DB Connection This article addresses the issue of the missing "Parse" option when connecting to an SQL database in Sisense. Users may encounter this problem when attempting to parse data from SQL DB connections. This guide will explain why the "Parse" option might be unavailable and provide steps to resolve the issue. Instructions The "Parse" option is unavailable when all selected tables in your SQL DB connection are base tables. This option becomes accessible only when custom import queries are used. 1. To enable the "Parse" option, ensure that you are using custom import queries rather than selecting only base tables. Review your SQL queries and modify them to include custom queries if necessary. 2. Ensure that your SQL user permissions are correctly configured to allow for custom queries 3. After making changes to your queries and permissions, test the connection again to verify that the "Parse" option is now available. Conclusion The "Parse" option in Sisense is only available when custom import queries are used. By ensuring that your SQL connection utilizes custom queries and that your user permissions are correctly configured, you can resolve the issue the missing "Parse" option.

      nataliia_kh
      nataliia_khPosted 1 year ago
      0
               
      • TroubleshootingChevronRightIcon

      403 error in UI when trying to change Excel connection to upload a new file

                                       

      403 error in UI when trying to change the Excel connection to upload a new file This article describes what you should check when encountering a 403 error when trying to change an Excel connection to a new source file. Possible root cause The error can be linked to the use of an Excel sheet containing clickable fields and macros. When an Excel file containing clickable fields or macro that increase the file's OWASP score, leading to it is rejected by the system Resolution The best approach is not to use files with buttons/macroses as data sources. Therefore, remove all the sheets that contain any clickable fields or macros from the Excel file and try to upload them again.

      nataliia_kh
      nataliia_khPosted 1 year ago
      0
               
      • TroubleshootingChevronRightIcon

      How to Troubleshoot UI Issues Using DevTools (HAR File & Console Logs)

                                                                                               

      How to Troubleshoot UI Issues Using DevTools (HAR File & Console Logs) Step 1: Open Developer Tools (DevTools)  Open Google Chrome, Microsoft Edge, or Mozilla Firefox.  Press F12 or Ctrl + Shift + I (Cmd + Option + I on Mac) to open DevTools. 3. A panel will appear on the side or bottom of your browser.  Step 2: Check Network Requests  The Network tab shows all requests your browser makes when loading a page. If a request fails, the webpage may not display correctly. How to check failed requests?  Click the Network tab.  Reload the page (F5 or Ctrl + R).  Look for requests marked red – these are failed requests.  [ ALT text: A computer screen displaying a dashboard with a message indicating an error or failed request. On the left side, there is a section labeled "Dashboard" with various options, while the right side shows a network activity log with a list of requests, highlighting a failed request in red. Below the image, there are instructions to click on a failed request for more details.] 4. Click on a failed request to see more details.  What to look for?   - Red requests – These are errors that may cause the page to break. - Slow requests – If a request takes too long, it could slow down the page. - Blocked requests – Some files may be blocked due to browser settings, firewalls, or extensions.  Step 3: Check Details in Preview and Response Tabs  If a request has failed, click on it and check:  - Preview Tab – Shows what the request should have loaded. If it’s empty or has an error message, there may be a problem with the server. [ ALT text: "Screenshot of a web browser displaying a 'Sample Not Found' error message within a dashboard context. The left panel shows the message along with a graphic of a computer with a sad face, while the right panel displays developer tools including a network tab, with details of an API request highlighted."]    - Response Tab – Shows the actual response from the server. If you see an error like 403 (Forbidden) or 500 (Internal Server Error), this might indicate a server-side issue.   [ ALT Text: A computer screen displaying an error message that says "Could not load data!" on the left, next to a web browser's developer tools showing a network request with an error highlighted in red on the right.]   Step 4: Check the Console Tab for Other Errors  The Console tab shows extra error messages that might explain why something isn’t working.  How to check for errors? - Click the Console tab.  - Look for messages in red – these are errors.  - If you see an error, take a screenshot or copy the message.   [ ALT text: A screenshot of a web development environment showing a "Sample" document with a "Could not load" error message. The interface displays various errors in a red-highlighted section of the console, indicating multiple problems related to content loading and resource access. The left side features a visual element of a computer graphic with a face, and the bottom includes a message stating "Could not load".] Common Console Errors:  - 404 Not Found – The file or resource is missing.  - 403 Forbidden – You might not have permission to access something. - 500 Internal Server Error – A problem on the server side.  Step 5: Save a HAR File to Share with Support  If you need help, save a HAR file with all network details:  Click the Network tab.  Click the Record button if it is not already active.  Reload the page (F5 or Ctrl + R).  Click the Download (Export) button or right-click inside the Network panel and select Save as HAR with content. Save the file and attach it when contacting support. [ ALT Text: Screenshot of a browser's developer tools, specifically the Network tab. Two buttons labeled "Record" and "Experiment" are highlighted in red. Below, a table includes various columns for details such as "Time," "Initiator," "Type," and "Size," with different entries listed for each column. The interface displays data related to web requests.]  Step 6: What to Send to Support?  If you need help, send the following details:  - A short description of the issue.  - Screenshots of errors from the Console tab.  - The HAR file (from the Network tab).  - The exact time and date when the issue happened.  5. Conclusion: A summary of key takeaways or final points.  By using DevTools, you can quickly find and report UI issues, helping the support team fix them faster. If you have any questions, feel free to contact support with your findings.  Need more guidance? Let us know! We’re happy to assist. References/Related Content: Links and resources for further reading. https://community.sisense.com/t5/knowledge-base/generating-a-har-file-for-trou bleshooting-sisense/ta-p/9523   Disclaimer: This post outlines a potential custom workaround for a specific use case or provides instructions regarding a specific task. The solution may not work in all scenarios or Sisense versions, so we strongly recommend testing it in your environment before deployment. If you need further assistance with this please let us know.

      Alina Malynovska
      Alina MalynovskaPosted 1 year ago
      0
               
      • TroubleshootingChevronRightIcon

      Steps to do before contacting support regarding build failures

                                                       

      Steps to do before contacting support regarding build failures  What to do and which information about errors to gather before contacting support team to ensure faster resolution of the issue.   1st step for any build error:  -Check error logs in UI. Carefully read the error message. It will help you to have an idea of what is wrong: is there not enough memory to build a cube or something with a connection to one of the data sources? Usually, the table that caused the issue is specific.  In case you understand the error message and suggested actions (which can be like adjusting several simultaneous builds, creating a duplicated cube and trying to perform a sample build, adjusting specific timeouts, etc) - please proceed with suggested adjustments and see if it fixes the issue. Note all changes that you make, so they can be reverted if necessary.   In case, you have never encountered errors specified in an error message, and do not know how to perform suggested changes or no changes are suggested, please gather the information specified below to share it with the support team in a tick you will create.    [ ALT Text: A screenshot of a user interface showing a dropdown menu with options like "Schedule Build," "Model Statistics," "Data Security," and others. Below, a build process indicator shows "0.67 Tasks Completed" along with a message detailing a "Table query schema error" and a timestamp.] Make screenshots of all the information listed below. Screenshots should be done in a way, so the same information as in the example is visible:  Screenshot of error from the UI. You can see it when choosing the 'View latest logs' option in the cube (check the screenshots from the section above).  Check Grafana to see how much memory is consumed. Here is the link to an article on how to check specific PO consumption in Grafana : Check these pods:  query  build ec-bld (affected cube and all cubes) ec-qry (affected cube and all cubes) Check Data Group settings. Specifically ‘Stop when idle' options and memory limits       [ ALT text: A screenshot of a software interface showing the "Admin" section. The left sidebar includes options like "Home," "User Management," "App Configuration," and "Data Groups." The main area displays a table titled "Data Groups" with columns for "Group Name," "Built Role," "Query Details," "Number of Instances," and "Email Jobs." The row contains an example entry labeled "Default Checklist."]   [ ALT text: A screenshot of an "Edit Data Group" interface. It displays fields for "Group Name," "Build Node," "Query Nodes," "ExistCubes," and "Instances," along with a slider labeled "Stop when idle" and a dropdown for "Idle Time (Minutes)." The values "Default," "node1," "node1," "Sample ECommerce, Sample Healthcare, Sample Leads," and "1" are filled in certain fields.]    [ ALT Text: A screenshot displaying configuration settings for an ElastCube. It includes two sections: "Query Nodes" with fields for Reserved Cores, Max Cores, Reserved RAM, and Max RAM, all listed as -1 for cores and RAM. The "Build Node" section shows Reserved Cores as -1, Max Cores as -1, Reserved RAM as 512 MB, and Max RAM as 8192 MB. There is also a field labeled "User label" at the bottom.] 4. Check memory limits of build and query pods in Configuration      [ ALT Text: A screenshot of the "Admin" panel from a software interface. The left sidebar shows various menu options including "Search," "User Management," "App Configuration," and "System Management." The main section displays the "Configuration" tab under "System Management," listing attributes like "Server," "Application Node," "Cluster Node," "Build Node," "Status," and "Description" with a specific server named "node1" showing a status of "Up." The interface has a clean, modern design with a white background and light accents.]  Make 5 fast clicks on the Sisense logo [ ALT Text: Screenshot of the Sisense service configuration interface, showing fields for 'MaxResultCachePrecision', 'MaxNumberOfExecutionBlocks', 'Message_init', and 'Memory Limit' within a 'Build' section. The interface has a light background and a navigation menu at the top.]    [ ALT Text: A screenshot of the Sisense application displaying the "Service Configuration" menu, specifically focusing on the "Query" section. The settings shown include "LiveResultsCacheTimeout," "MaxStreamingThreads," "Memory_limit," "Memory_area," and "NumberOfReadersForQueryCube," with some values highlighted in yellow.]      Run the following commands from the Sisense server (Only for on-premise customers:): kubectl -n sisense get deployments.apps build -o yaml | grep -A2 limits  kubectl -n sisense get deployments.apps query -o yaml | grep -A2 limits    5. Are there any EC2EC data sources in any of the affected cubes? Specify this when creating a ticket 6. If in UI error any table name is mentioned use this table. If so, choose any table from the cube. Try to re-connect to this table using the ‘Change Connection’ or ‘Switch Connection’ option (depending on which one you have)   [ ALT text: Screenshot of a data visualization software interface showing a menu on the left with CSV data sources listed, including "DimEmployees." The right side displays a diagram with yellow nodes and connections. A context menu is open, highlighting options like "Change Provider" and "Change Connection."]      [ ALT text: "Screenshot of a data management software interface displaying a menu on the left for 'Sample ECommerce' with options for 'Brand,' 'Category,' 'Commerce,' and 'Directories.' A highlighted menu item shows 'Connection Settings' with options including 'Preview,' 'Duplicate,' 'Delete,' and 'Switch Connection,' among others. A yellow circle labeled 'Commerce' is shown on the right."]  7. Go through all steps of changing a connection and check if the review of the table is available. In case you receive any error during this process, repeat the process while recording the .har file ( here is the link to the article on how to record the .har file ) . Also, take a screenshot of the error you receive. Let us know in a ticket if an error appears during the step.  8. In case any error appears in step 7, check your database and make sure the user you are using in Sisense has proper credentials and permissions, your database can accept connections.  9. Login the to Sisense server and download the log files specified below. Make sure to proceed with this step right a performing all the steps above. This way, if you record a .har file the information about it will be included in logs, as well the information about the errors will be still present (Only for on-premise customers) .  - build.log  - query.log  - combined.log  - ec-bld.log (of affected cube)  You may check how to download and identify necessary logs here.    10. Include information about any recent changes you have made to the cube or environment. Like adding/removing tables, more data is uploaded from the database, new relations are created between tables, etc. 11. Please raise a ticket with the Sisense support team and add all gathered information to the ticket.

      nataliia_kh
      nataliia_khPosted 1 year ago
      0
               
      • TroubleshootingChevronRightIcon

      How to identify and download logs from the Sisense server

                                       

      How to identify and download logs from the Sisense server  Usually, you are provided with the list of logs needed for the investigation of your issue by the Sisense support team. They may include names of the file and, if you are experiencing build failures, ec-bld log of affected c    How to identify ec-bld log name for a particular cube  Login to Sisense server  While the cube is building, run the command: › 1 kubectl -n sisense get pods | grep bld  You will see all bld pods for all active builds. You can identify the necessary bld pod since it will contain the cubes name in its name  For example:   Cubes name - Sample Healthcare  Possible bld pod name - ec-sample-healthcare-bld-c766573f-cd22-2     [ ALT Text: A terminal window displaying command line input and output. The input command shows "bucket -n s3:aws get prob" followed by a command that includes "grep yfi". The output indicates a number "2.7" and additional status information, including "Running" and "0" with a time of "3s".]   3. Note the name of the pod. Log file will be named the same, with .log extensio  For example ec-sample-healthcare-bld-c766573f-cd22-2.log  4. Wait for the build to finish before proceeding with downloading the l  How to download logs  You will follow different processes depending on whether you have a single-node or multi-node environment If you have a single-node:  Login to the Sisense server  Go to the folder with logs:  1 cd /var/log/sisense/sisense    [ ALT Text: The image displays a partially obscured text with a blue and gray box, surrounded by green-highlighted text on a dark background. The text layout suggests a digital or programming context, possibly displaying code or output from a software application. The overall tone is technical and modern.]   3. Here look for log files, which were specified by support t  We will use query.log and ec-bld log of the particular cube as an example (we will use ec-sample-healthcare-bld c766573f-cd22-2.log, which we have identified in a section above). You need to substitute their names to the logs y need in this and all future steps.  1 ls -l | grep query.log  2 ls -l | grep ec-sample-healthcare-bld-c766573f-cd22-2      [ ALT text: A terminal window displaying command line entries. The highlighted lines show a user performing `ls -l` to list files and using the `grep` command to search through log files. The output includes file names with timestamps and sizes. The overall appearance is dark-themed with green and blue text on a black background.]   4. After you make sure that all requested logs exist, copy these files to your file manager. We will copy them into folder, which is usually used for this purpose.   1 cp query.log /opt/sisense/storage/data/query.log 2 cp ec-sample-healthcare-bld-c766573f-cd22-2.log /opt/sisense/storage/data/ec-sample-healthcare-bld-c766573f cd22-2.log  After these commands, there should be no output in the console    [ ALT Text: A screenshot of a command line interface displaying a series of text lines, predominantly in green on a black background, indicating some kind of terminal activity or output. The visible text appears to include file names and potentially command outputs but is mostly obscured or unclear due to formatting.] 5. In Admin tab open File Manager. There in ‘Data’ folder you will find log files and will be able to download it from [ ALT text: A screenshot of a file management interface from Sisense. The top section displays a search bar and a list of files, including "example-file-name" and "canny.log," with details on their size and last modified date. The bottom section shows a similar layout, featuring a highlighted file named "example-file-name" with its size and a recent modification time. The color scheme includes a light background with blue and yellow accents.] If you have a multi-node:  Login to the Sisense server  Find out the current directory (usually it's /home/ec2-user/) and copy it  1 pwd    [ ALT Text: A blurred close-up of a computer terminal screen displaying a command line input in green text on a dark background. The command includes parameters such as "ec2-user" and file paths, suggesting interaction with an EC2 instance.]  3. Run the command  1 kubectl -n sisense get pods | grep -E 'fluentd|management' You will receive the names of your fluentd and management pods. Copy the    [ ALT Text: Text-based terminal output showing two processes running: "Sabotage-1: Cider" with a PID of 272 and a status of "running," and "management: AttackProxy:Meta" with a PID of 171 and a status of "running." The text has a green font on a dark background.]   4. Form the commands to copy log files, 2 commands for each f  We will use query.log as an example. You need to substitute their names for  the logs you need in this and all future steps.  4.1  1 kubectl -n sisense cp  <your_fluentd_pod_name>:/var/log/sisense/sisense/<log_file_name> <current directory_name>/<log_file_name>  2 If namespace is other than 'sisense' the command will be:  3 kubectl -n sisense cp  <your_fluentd_pod_name>:/var/log/<your_namespace>/sisense/<log_file_name> <current directory_name>/<log_file_name>  4 For example:  5 kubectl -n sisense cp fluentd-5b565b7b7c-462dr:/var/log/sisense/sisense/query.log /home/ec2-user/query.log      [ ALT Text: A blurred image of a computer screen displaying code or text, with green characters on a dark background. The content appears to be technical in nature, possibly related to programming or data processing.] 4.2  1 kubectl -n sisense  cp <log_file_name> <your_management_pod_name>:/opt/sisense/storage/data/<log_file_name> 2 For example:  3 kubectl -n sisense cp query.log management-765cbcf7bb-qr9mx:/opt/sisense/storage/data/query_00782680.log    [ ALT Text:  The image displays an abstract representation of text or code with a glowing green effect on a dark background, creating a digital or matrix-like appearance. The text appears to be distorted or scrambled, adding to the overall aesthetic.] 5. In Admin tab open File Manager. There is ‘Data’ folder you will find log files and will be able to download them from    [ ALT text: A screenshot of the Sisense dashboard displaying the File Management section. There are options on the left sidebar including "User Management," "App Configuration," and "File Management." The main area lists two files: "e-sample-whiteboard-0d16-7057-4E29-6B.jpg" and "query.bq," with their respective sizes and last modified time. A search bar is also visible at the top.]  6. Go back to the server and remove copied files from the local folder (usually it's /home/ec2-user/  1 rm <log_file_name>  2 For example:   3 rm query.log

      nataliia_kh
      nataliia_khPosted 1 year ago
      0