├── test.txt
├── New Text Document.txt
├── example.txt
├── SWQL
├── readme.md
├── GrafanaDashboards
│ └── readme.md
├── Vm Connected Media
├── Failing UNDP Pollers
├── Node Log Events
├── Alerts per Day Chart
├── LE Tags
├── Intervals - Alerts List
├── Alert History
├── Intervals - Alerts
├── Appinsight IIS SSL Expiration
├── Widget Finder
├── Volumes w Polling issues
├── Node Last Poll Details
├── UDT User Search
├── Interfaces w Polling Issues
├── VMAN Search
├── Unknown SAM Apps Chart
├── VM w Large Snapshot
├── Down Nodes w Duration
├── Interface Down w Duration
├── Down Applications w Duration
├── Node Details NCM Backups
├── VM Tools
├── Alert Failures
├── VM Inactive
├── Polling Engine Utilization Chart
├── Node NCM Backup
├── NCM Backups Summary
├── NCM Violations
├── DB maintenance
├── Custom Thresholds - Memory
├── Intervals - Volumes List
├── Intervals - Interfaces List
├── VM w Phantom Snapshot
├── Custom Thresholds - CPU
├── Intervals - Nodes List
├── Intervals - Applications
├── Custom Thresholds - Volumes
├── Intervals - Applications List
├── Intervals - Volumes
├── Intervals - Interfaces
├── Custom Threshold - Interfaces
├── Intervals - Nodes
├── undp
├── Node Pollers
├── Nodes w Polling Issues
├── Interface Errors
├── Pollers Summary
├── Alert SLA
├── Node Volumes
├── Alert Counts
├── Pollers
├── Nodes and Children
├── Improved Active Alerts
├── Storage Pool Stats
├── Unmanaged or Muted Nodes
├── Switch Stack Summary
├── Node Downtime History
├── Outage History
├── Component Alert History
├── Application Alert History
├── Node Alert History
├── Interface Alert History
├── Volume Alert History
├── IPAM Correlation
├── LUN Performance Stats
└── Node IPAM
├── Thwack.pptx
├── ViewsToShare
├── NoViewGroup
│ ├── readme.txt
│ ├── NetFlow Domain
│ │ ├── ViewData.xml
│ │ ├── Top XX Receivers_1720.xml
│ │ ├── Domain Details IPv4_1714.xml
│ │ ├── Top XX Applications_1716.xml
│ │ ├── Top XX Conversations_1723.xml
│ │ ├── Top XX Transmitters_1719.xml
│ │ ├── Total Bytes Transferred_1717.xml
│ │ └── Total Packets Transferred_1718.xml
│ ├── NetFlow Country
│ │ ├── ViewData.xml
│ │ ├── Top XX Receivers_1711.xml
│ │ ├── Country Details IPv4_1706.xml
│ │ ├── Top XX Applications_1708.xml
│ │ ├── Top XX Conversations_1713.xml
│ │ ├── Top XX Transmitters_1710.xml
│ │ ├── Total Bytes Transferred_1712.xml
│ │ └── Total Packets Transferred_1709.xml
│ ├── NetFlow Endpoint
│ │ ├── ViewData.xml
│ │ ├── Endpoint Details_1724.xml
│ │ ├── Top XX Protocols_1728.xml
│ │ ├── Top XX Receivers_7176.xml
│ │ ├── Top XX Applications_1729.xml
│ │ ├── Top XX Transmitters_7177.xml
│ │ ├── Top XX Conversations_7178.xml
│ │ ├── Top XX Types of Service_1732.xml
│ │ ├── Total Bytes Transferred_1726.xml
│ │ ├── Total Packets Transferred_1727.xml
│ │ └── Top XX Conversation Endpoints_1725.xml
│ ├── NetFlow Protocol
│ │ ├── ViewData.xml
│ │ ├── Protocol Details_1773.xml
│ │ ├── Top XX Receivers_1779.xml
│ │ ├── Top XX Applications_1774.xml
│ │ ├── Top XX Transmitters_1778.xml
│ │ ├── Top XX Conversations_1783.xml
│ │ ├── Top XX Types of Service_1782.xml
│ │ ├── Total Bytes Transferred_1775.xml
│ │ └── Total Packets Transferred_1776.xml
│ ├── NetFlow Application
│ │ ├── ViewData.xml
│ │ ├── Top XX Protocols_1694.xml
│ │ ├── Top XX Receivers_1700.xml
│ │ ├── Application Details_1692.xml
│ │ ├── Top XX Applications_7192.xml
│ │ ├── Top XX Conversations_1703.xml
│ │ ├── Top XX Transmitters_1699.xml
│ │ ├── Top XX Types of Service_1695.xml
│ │ ├── Total Bytes Transferred_1696.xml
│ │ └── Total Packets Transferred_1697.xml
│ ├── NetFlow Conversation
│ │ ├── ViewData.xml
│ │ ├── Conversation Traffic History_1705.xml
│ │ └── Conversation Total Bytes Transferred_1704.xml
│ ├── NetFlow IP Address Group
│ │ ├── ViewData.xml
│ │ ├── Top XX Protocols_1756.xml
│ │ ├── Top XX Receivers_1762.xml
│ │ ├── Top XX Applications_1757.xml
│ │ ├── Top XX Conversations_1765.xml
│ │ ├── Top XX Transmitters_1761.xml
│ │ ├── Total Bytes Transferred_1758.xml
│ │ ├── IP Address Group Details_1755.xml
│ │ ├── Total Packets Transferred_1759.xml
│ │ ├── Top XX Source IP Address Groups_1760.xml
│ │ └── Top XX Destination IP Address Groups_1766.xml
│ ├── NetFlow Type of Service
│ │ ├── ViewData.xml
│ │ ├── Top XX Protocols_1798.xml
│ │ ├── Top XX Receivers_7189.xml
│ │ ├── Top XX Applications_1799.xml
│ │ ├── Top XX Transmitters_7188.xml
│ │ ├── Top XX Conversations_1805.xml
│ │ ├── Total Bytes Transferred_1800.xml
│ │ ├── Type of Service Details_1796.xml
│ │ └── Total Packets Transferred_1801.xml
│ ├── NetFlow Countries Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX IPv4 Countries_1838.xml
│ │ └── Top XX IPv4 Countries_7166.xml
│ ├── NetFlow Endpoints Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX Endpoints_1842.xml
│ │ └── Top XX Endpoints_7171.xml
│ ├── NetFlow Protocols Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX Protocols_1852.xml
│ │ └── Top XX Protocols_7184.xml
│ ├── NetFlow Receivers Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX Receivers_1856.xml
│ │ └── Top XX Receivers_7179.xml
│ ├── NetFlow Applications Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX Applications_1830.xml
│ │ └── Top XX Applications_7162.xml
│ ├── NetFlow Conversations Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX Conversations_1834.xml
│ │ ├── Top XX Conversations_7165.xml
│ │ └── 2020-02-24 17_46_06-NetFlow Conversations Summary.png
│ ├── NetFlow Transmitters Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX Transmitters_1864.xml
│ │ └── Top XX Transmitters_7180.xml
│ ├── NetFlow Traffic Analyzer Summary
│ │ ├── ViewData.xml
│ │ ├── NTA Flow Sources_6541.xml
│ │ ├── Top XX Endpoints_1788.xml
│ │ ├── Top XX Endpoints_7193.xml
│ │ ├── Top XX Applications_1787.xml
│ │ ├── Top XX Applications_7195.xml
│ │ ├── Top XX Conversations_1792.xml
│ │ ├── Top XX Conversations_7194.xml
│ │ ├── NetFlow Collector Services_1789.xml
│ │ ├── Last 25 Traffic Analyzer Events_7196.xml
│ │ └── Top XX NetFlow Sources by % Utilization_1786.xml
│ ├── NetFlow Types of Service Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX Types of Service_1860.xml
│ │ └── Top XX Types of Service_7185.xml
│ └── NetFlow IP Address Groups Summary
│ │ ├── ViewData.xml
│ │ ├── Top XX IP Address Groups_1846.xml
│ │ ├── Top XX IP Address Groups_7183.xml
│ │ ├── Top XX Source IP Address Groups_1847.xml
│ │ ├── Top XX Source IP Address Groups_7182.xml
│ │ ├── Top XX Destination IP Address Groups_1848.xml
│ │ └── Top XX Destination IP Address Groups_7181.xml
├── SingleWidgets
│ ├── readme.txt
│ ├── AppManager_6941.xml
│ ├── NCM Job Timeline_6947.xml
│ ├── Netpath Summary_6935.xml
│ ├── Perfstack Project List_6938.xml
│ └── Historical Alerts Calendar_6946.xml
├── Views Manager
│ ├── Summary
│ │ ├── ViewData.xml
│ │ ├── User Links_2202.xml
│ │ ├── Views_Manager_JS_2207.xml
│ │ ├── ViewGroupName Counts_2203.xml
│ │ └── Custom SWQL Views Manager_2201.xml
│ ├── Resources
│ │ ├── ViewData.xml
│ │ └── Type In a ViewID To See The Resource Properties_2200.xml
│ ├── Views_Manager_JS
│ │ ├── ViewData.xml
│ │ └── Views_Manager_JS_Preview_2208.xml
│ ├── PREview_Manager_JS
│ │ ├── ViewData.xml
│ │ └── PRE-Views Manager Hover-Over_2197.xml
│ ├── PREview_Manager_JS_test2
│ │ ├── ViewData.xml
│ │ └── Custom HTML_2198.xml
│ └── readme.txt
├── GoogleChartExamples
│ ├── BarCharts
│ │ ├── ViewData.xml
│ │ ├── Custom HTML_2517.xml
│ │ ├── Custom HTML_2518.xml
│ │ └── Stacked Bar Chart_2649.xml
│ ├── PieCharts
│ │ ├── ViewData.xml
│ │ ├── Top 5 Alerts Triggered Today_2516.xml
│ │ └── Top 10 Alerts Triggered Today_2542.xml
│ ├── _Summary
│ │ ├── ViewData.xml
│ │ ├── Custom HTML_2514.xml
│ │ └── Custom Query_2513.xml
│ ├── TableCharts
│ │ ├── ViewData.xml
│ │ ├── Custom HTML_2519.xml
│ │ └── Custom HTML_2520.xml
│ ├── CalendarCharts
│ │ ├── ViewData.xml
│ │ └── Custom HTML_2529.xml
│ ├── VariousCharts
│ │ ├── ViewData.xml
│ │ ├── Custom HTML_2521.xml
│ │ ├── Custom HTML_2522.xml
│ │ ├── Custom HTML_2523.xml
│ │ ├── Custom HTML_2524.xml
│ │ ├── Custom HTML_2525.xml
│ │ └── Custom HTML_2526.xml
│ ├── BarCharts_Stacked
│ │ ├── ViewData.xml
│ │ └── Stacked Column Chart_2650.xml
│ ├── PieChartsWithOptions
│ │ ├── ViewData.xml
│ │ └── Custom HTML_2543.xml
│ └── CalendarCharts_AltLayout-001
│ │ ├── ViewData.xml
│ │ ├── Events By Area_2532.xml
│ │ ├── Events By Vendor_2535.xml
│ │ ├── Calendar of Events_2534.xml
│ │ ├── Recent Event Logs_2536.xml
│ │ ├── Events By Department_2533.xml
│ │ └── Events By MachineType_2531.xml
├── SolarWinds Admin
│ ├── Alerts
│ │ ├── ResourceTitle Emails _ 5003.xml
│ │ ├── ResourceTitle Alert SLA _ 5006.xml
│ │ ├── ResourceTitle Alert History _ 5010.xml
│ │ ├── ResourceTitle Alerts Counts _ 5002.xml
│ │ ├── ResourceTitle Alert Failures _ 4998.xml
│ │ ├── ResourceTitle Alerts per Day _ 4991.xml
│ │ ├── ResourceTitle Active Alert Counts _ 5008.xml
│ │ ├── ResourceTitle Alert Emails per day chart _ 4992.xml
│ │ └── Viewdata.xml
│ ├── Intervals
│ │ ├── ResourceTitle Nodes _ 5189.xml
│ │ ├── ResourceTitle Alerts _ 5181.xml
│ │ ├── ResourceTitle Groups _ 5183.xml
│ │ ├── ResourceTitle Volumes _ 5193.xml
│ │ ├── ResourceTitle Interfaces _ 5191.xml
│ │ ├── ResourceTitle Applications _ 5185.xml
│ │ ├── ResourceTitle Alert Intervals _ 5180.xml
│ │ ├── ResourceTitle Group Intervals _ 5182.xml
│ │ ├── ResourceTitle Nodes Intervals _ 5188.xml
│ │ ├── ResourceTitle Volume Intervals _ 5192.xml
│ │ ├── ResourceTitle Interface Intervals _ 5190.xml
│ │ ├── ResourceTitle Application Intervals _ 5184.xml
│ │ └── ViewData.xml
│ ├── Polling
│ │ ├── ResourceTitle Pollers _ 4973.xml
│ │ ├── ResourceTitle Credential Lookup _ 4985.xml
│ │ ├── ResourceTitle Credential Details _ 4979.xml
│ │ ├── ResourceTitle Failing UNDP pollers _ 4972.xml
│ │ ├── ResourceTitle Orion Node Performance _ 4974.xml
│ │ ├── ResourceTitle Nodes with Polling Issues _ 4975.xml
│ │ ├── ResourceTitle Polling Engine Utilization _ 4961.xml
│ │ ├── ResourceTitle Unknown SAM Apps per Poller _ 4962.xml
│ │ ├── ResourceTitle Volumes with Polling Issues _ 4977.xml
│ │ ├── ResourceTitle Interfaces with Polling Issues _ 4976.xml
│ │ └── ViewData.xml
│ └── Thresholds
│ │ ├── ResourceTitle Volumes with Custom Thresholds _ 5113.xml
│ │ ├── ResourceTitle Interfaces with Custom Thresholds _ 5112.xml
│ │ ├── ResourceTitle Nodes with Custom CPU Thresholds _ 5110.xml
│ │ ├── ResourceTitle Nodes with Custom Memory Thresholds _ 5111.xml
│ │ └── ViewData.xml
└── readme.txt
├── CustomResources
└── readme.txt
├── SQLBackupRestoreProgress.sql
├── readme.txt
├── SQL_to_update_NodePropertiesOnTooltip.sql
├── RemoveApplications.ps1
├── SwugPropertyExample.ps1
├── RemoveNodes.ps1
├── SupressAlerts.ps1
├── CreateNodeCustomProperties.p1s
├── MigrateAlerts.ps1
├── AddRemoveUNDP.ps1
├── NCMFunctions.ps1
├── AutomaticProperties.ps1
├── AlertArchiveImporter.ps1
├── AddCustomMenusInteractively.ps1
├── AlertArchiver.ps1
├── AddMapTabToDetails.ps1
├── IISLogParser.ps1
├── CredentialManagement.ps1
└── ResourceImporter.ps1
/test.txt:
--------------------------------------------------------------------------------
1 | readme file
--------------------------------------------------------------------------------
/New Text Document.txt:
--------------------------------------------------------------------------------
1 | Testing to verify it works correctly
--------------------------------------------------------------------------------
/example.txt:
--------------------------------------------------------------------------------
1 | Space for example code
2 | Testing from JM
3 |
--------------------------------------------------------------------------------
/SWQL/readme.md:
--------------------------------------------------------------------------------
1 | Just examples of useful SWQL I have used
2 |
--------------------------------------------------------------------------------
/Thwack.pptx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/Thwack.pptx
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/readme.txt:
--------------------------------------------------------------------------------
1 | This folder contains standalone views that have no tabs and are not members of any groups.
2 |
--------------------------------------------------------------------------------
/ViewsToShare/SingleWidgets/readme.txt:
--------------------------------------------------------------------------------
1 | Just a place where I'll make copies of single widget/resources that I see posted to thwack or make.
2 |
--------------------------------------------------------------------------------
/ViewsToShare/SingleWidgets/AppManager_6941.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SingleWidgets/AppManager_6941.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Resources/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Resources/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Domain/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Domain/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/SingleWidgets/NCM Job Timeline_6947.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SingleWidgets/NCM Job Timeline_6947.xml
--------------------------------------------------------------------------------
/ViewsToShare/SingleWidgets/Netpath Summary_6935.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SingleWidgets/Netpath Summary_6935.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/BarCharts/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/BarCharts/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/PieCharts/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/PieCharts/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/_Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/_Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Country/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Country/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Summary/User Links_2202.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Summary/User Links_2202.xml
--------------------------------------------------------------------------------
/SWQL/GrafanaDashboards/readme.md:
--------------------------------------------------------------------------------
1 | This folder will hold a collection of Grafana Dashboards intended to cover the majority of the native SolarWinds Entity Details views.
2 |
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/TableCharts/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/TableCharts/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Views_Manager_JS/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Views_Manager_JS/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/VariousCharts/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/VariousCharts/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Conversation/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Conversation/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/SingleWidgets/Perfstack Project List_6938.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SingleWidgets/Perfstack Project List_6938.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/PREview_Manager_JS/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/PREview_Manager_JS/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Summary/Views_Manager_JS_2207.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Summary/Views_Manager_JS_2207.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/_Summary/Custom HTML_2514.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/_Summary/Custom HTML_2514.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/SingleWidgets/Historical Alerts Calendar_6946.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SingleWidgets/Historical Alerts Calendar_6946.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/BarCharts/Custom HTML_2517.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/BarCharts/Custom HTML_2517.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/BarCharts/Custom HTML_2518.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/BarCharts/Custom HTML_2518.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/BarCharts_Stacked/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/BarCharts_Stacked/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/TableCharts/Custom HTML_2519.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/TableCharts/Custom HTML_2519.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/TableCharts/Custom HTML_2520.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/TableCharts/Custom HTML_2520.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/_Summary/Custom Query_2513.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/_Summary/Custom Query_2513.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Countries Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Countries Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Domain/Top XX Receivers_1720.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Domain/Top XX Receivers_1720.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoints Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoints Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocols Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocols Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Receivers Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Receivers Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/PREview_Manager_JS_test2/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/PREview_Manager_JS_test2/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Summary/ViewGroupName Counts_2203.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Summary/ViewGroupName Counts_2203.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/PieChartsWithOptions/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/PieChartsWithOptions/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2521.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2521.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2522.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2522.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2523.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2523.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2524.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2524.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2525.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2525.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2526.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/VariousCharts/Custom HTML_2526.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Applications Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Applications Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Conversations Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Conversations Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Country/Top XX Receivers_1711.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Country/Top XX Receivers_1711.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Endpoint Details_1724.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Endpoint Details_1724.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Protocols_1728.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Protocols_1728.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Receivers_7176.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Receivers_7176.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/Protocol Details_1773.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/Protocol Details_1773.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Receivers_1779.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Receivers_1779.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Transmitters Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Transmitters Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/BarCharts/Stacked Bar Chart_2649.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/BarCharts/Stacked Bar Chart_2649.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts/Custom HTML_2529.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts/Custom HTML_2529.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Protocols_1694.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Protocols_1694.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Receivers_1700.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Receivers_1700.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Country/Country Details IPv4_1706.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Country/Country Details IPv4_1706.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Country/Top XX Applications_1708.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Country/Top XX Applications_1708.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Country/Top XX Conversations_1713.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Country/Top XX Conversations_1713.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Country/Top XX Transmitters_1710.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Country/Top XX Transmitters_1710.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Domain/Domain Details IPv4_1714.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Domain/Domain Details IPv4_1714.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Domain/Top XX Applications_1716.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Domain/Top XX Applications_1716.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Domain/Top XX Conversations_1723.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Domain/Top XX Conversations_1723.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Domain/Top XX Transmitters_1719.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Domain/Top XX Transmitters_1719.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Applications_1729.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Applications_1729.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Transmitters_7177.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Transmitters_7177.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Applications_1774.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Applications_1774.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Transmitters_1778.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Transmitters_1778.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Types of Service Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Types of Service Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Emails _ 5003.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Emails _ 5003.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Nodes _ 5189.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Nodes _ 5189.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Pollers _ 4973.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Pollers _ 4973.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Summary/Custom SWQL Views Manager_2201.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Summary/Custom SWQL Views Manager_2201.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Domain/Total Bytes Transferred_1717.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Domain/Total Bytes Transferred_1717.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Conversations_7178.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Conversations_7178.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Conversations_1783.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Conversations_1783.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alert SLA _ 5006.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alert SLA _ 5006.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Alerts _ 5181.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Alerts _ 5181.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Groups _ 5183.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Groups _ 5183.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Volumes _ 5193.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Volumes _ 5193.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/PREview_Manager_JS_test2/Custom HTML_2198.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/PREview_Manager_JS_test2/Custom HTML_2198.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/ViewData.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/ViewData.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/PieChartsWithOptions/Custom HTML_2543.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/PieChartsWithOptions/Custom HTML_2543.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Application Details_1692.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Application Details_1692.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Applications_7192.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Applications_7192.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Conversations_1703.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Conversations_1703.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Transmitters_1699.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Transmitters_1699.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Country/Total Bytes Transferred_1712.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Country/Total Bytes Transferred_1712.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Country/Total Packets Transferred_1709.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Country/Total Packets Transferred_1709.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Domain/Total Packets Transferred_1718.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Domain/Total Packets Transferred_1718.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Types of Service_1732.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Types of Service_1732.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Total Bytes Transferred_1726.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Total Bytes Transferred_1726.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Protocols_1756.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Protocols_1756.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Receivers_1762.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Receivers_1762.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Types of Service_1782.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/Top XX Types of Service_1782.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/Total Bytes Transferred_1775.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/Total Bytes Transferred_1775.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Protocols_1798.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Protocols_1798.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Receivers_7189.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Receivers_7189.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alert History _ 5010.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alert History _ 5010.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alerts Counts _ 5002.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alerts Counts _ 5002.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Interfaces _ 5191.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Interfaces _ 5191.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Types of Service_1695.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Top XX Types of Service_1695.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Total Bytes Transferred_1696.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Total Bytes Transferred_1696.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Total Packets Transferred_1727.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Total Packets Transferred_1727.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoints Summary/Top XX Endpoints_1842.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoints Summary/Top XX Endpoints_1842.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoints Summary/Top XX Endpoints_7171.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoints Summary/Top XX Endpoints_7171.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocol/Total Packets Transferred_1776.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocol/Total Packets Transferred_1776.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocols Summary/Top XX Protocols_1852.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocols Summary/Top XX Protocols_1852.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Protocols Summary/Top XX Protocols_7184.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Protocols Summary/Top XX Protocols_7184.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Receivers Summary/Top XX Receivers_1856.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Receivers Summary/Top XX Receivers_1856.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Receivers Summary/Top XX Receivers_7179.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Receivers Summary/Top XX Receivers_7179.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Applications_1799.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Applications_1799.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Transmitters_7188.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Transmitters_7188.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alert Failures _ 4998.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alert Failures _ 4998.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alerts per Day _ 4991.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alerts per Day _ 4991.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Applications _ 5185.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Applications _ 5185.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Views_Manager_JS/Views_Manager_JS_Preview_2208.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Views_Manager_JS/Views_Manager_JS_Preview_2208.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/BarCharts_Stacked/Stacked Column Chart_2650.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/BarCharts_Stacked/Stacked Column Chart_2650.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/PieCharts/Top 5 Alerts Triggered Today_2516.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/PieCharts/Top 5 Alerts Triggered Today_2516.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Application/Total Packets Transferred_1697.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Application/Total Packets Transferred_1697.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Conversation Endpoints_1725.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Endpoint/Top XX Conversation Endpoints_1725.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Applications_1757.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Applications_1757.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Conversations_1765.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Conversations_1765.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Transmitters_1761.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Transmitters_1761.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Conversations_1805.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/Top XX Conversations_1805.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Alert Intervals _ 5180.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Alert Intervals _ 5180.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Group Intervals _ 5182.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Group Intervals _ 5182.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Nodes Intervals _ 5188.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Nodes Intervals _ 5188.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Credential Lookup _ 4985.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Credential Lookup _ 4985.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/PieCharts/Top 10 Alerts Triggered Today_2542.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/PieCharts/Top 10 Alerts Triggered Today_2542.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Applications Summary/Top XX Applications_1830.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Applications Summary/Top XX Applications_1830.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Applications Summary/Top XX Applications_7162.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Applications Summary/Top XX Applications_7162.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Countries Summary/Top XX IPv4 Countries_1838.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Countries Summary/Top XX IPv4 Countries_1838.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Countries Summary/Top XX IPv4 Countries_7166.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Countries Summary/Top XX IPv4 Countries_7166.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Total Bytes Transferred_1758.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Total Bytes Transferred_1758.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Transmitters Summary/Top XX Transmitters_1864.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Transmitters Summary/Top XX Transmitters_1864.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Transmitters Summary/Top XX Transmitters_7180.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Transmitters Summary/Top XX Transmitters_7180.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/Total Bytes Transferred_1800.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/Total Bytes Transferred_1800.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/Type of Service Details_1796.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/Type of Service Details_1796.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Active Alert Counts _ 5008.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Active Alert Counts _ 5008.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Volume Intervals _ 5192.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Volume Intervals _ 5192.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Credential Details _ 4979.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Credential Details _ 4979.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Events By Area_2532.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Events By Area_2532.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Conversation/Conversation Traffic History_1705.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Conversation/Conversation Traffic History_1705.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Conversations Summary/Top XX Conversations_1834.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Conversations Summary/Top XX Conversations_1834.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Conversations Summary/Top XX Conversations_7165.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Conversations Summary/Top XX Conversations_7165.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/IP Address Group Details_1755.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/IP Address Group Details_1755.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Total Packets Transferred_1759.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Total Packets Transferred_1759.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/NTA Flow Sources_6541.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/NTA Flow Sources_6541.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Endpoints_1788.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Endpoints_1788.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Endpoints_7193.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Endpoints_7193.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Type of Service/Total Packets Transferred_1801.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Type of Service/Total Packets Transferred_1801.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Interface Intervals _ 5190.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Interface Intervals _ 5190.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Failing UNDP pollers _ 4972.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Failing UNDP pollers _ 4972.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Orion Node Performance _ 4974.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Orion Node Performance _ 4974.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/PREview_Manager_JS/PRE-Views Manager Hover-Over_2197.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/PREview_Manager_JS/PRE-Views Manager Hover-Over_2197.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Events By Vendor_2535.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Events By Vendor_2535.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Applications_1787.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Applications_1787.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Applications_7195.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Applications_7195.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Conversations_1792.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Conversations_1792.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Conversations_7194.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX Conversations_7194.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Application Intervals _ 5184.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Intervals/ResourceTitle Application Intervals _ 5184.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Calendar of Events_2534.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Calendar of Events_2534.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Recent Event Logs_2536.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Recent Event Logs_2536.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Source IP Address Groups_1760.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Source IP Address Groups_1760.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Types of Service Summary/Top XX Types of Service_1860.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Types of Service Summary/Top XX Types of Service_1860.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Types of Service Summary/Top XX Types of Service_7185.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Types of Service Summary/Top XX Types of Service_7185.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alert Emails per day chart _ 4992.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Alerts/ResourceTitle Alert Emails per day chart _ 4992.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Nodes with Polling Issues _ 4975.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Nodes with Polling Issues _ 4975.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Polling Engine Utilization _ 4961.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Polling Engine Utilization _ 4961.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Unknown SAM Apps per Poller _ 4962.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Unknown SAM Apps per Poller _ 4962.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Volumes with Polling Issues _ 4977.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Volumes with Polling Issues _ 4977.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Events By Department_2533.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Events By Department_2533.xml
--------------------------------------------------------------------------------
/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Events By MachineType_2531.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/GoogleChartExamples/CalendarCharts_AltLayout-001/Events By MachineType_2531.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Conversation/Conversation Total Bytes Transferred_1704.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Conversation/Conversation Total Bytes Transferred_1704.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX IP Address Groups_1846.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX IP Address Groups_1846.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX IP Address Groups_7183.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX IP Address Groups_7183.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Destination IP Address Groups_1766.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Group/Top XX Destination IP Address Groups_1766.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/NetFlow Collector Services_1789.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/NetFlow Collector Services_1789.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Interfaces with Polling Issues _ 4976.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Polling/ResourceTitle Interfaces with Polling Issues _ 4976.xml
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/Resources/Type In a ViewID To See The Resource Properties_2200.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/Views Manager/Resources/Type In a ViewID To See The Resource Properties_2200.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Thresholds/ResourceTitle Volumes with Custom Thresholds _ 5113.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Thresholds/ResourceTitle Volumes with Custom Thresholds _ 5113.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX Source IP Address Groups_1847.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX Source IP Address Groups_1847.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX Source IP Address Groups_7182.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX Source IP Address Groups_7182.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Last 25 Traffic Analyzer Events_7196.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Last 25 Traffic Analyzer Events_7196.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Thresholds/ResourceTitle Interfaces with Custom Thresholds _ 5112.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Thresholds/ResourceTitle Interfaces with Custom Thresholds _ 5112.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Thresholds/ResourceTitle Nodes with Custom CPU Thresholds _ 5110.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Thresholds/ResourceTitle Nodes with Custom CPU Thresholds _ 5110.xml
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Thresholds/ResourceTitle Nodes with Custom Memory Thresholds _ 5111.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/SolarWinds Admin/Thresholds/ResourceTitle Nodes with Custom Memory Thresholds _ 5111.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX Destination IP Address Groups_1848.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX Destination IP Address Groups_1848.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX Destination IP Address Groups_7181.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow IP Address Groups Summary/Top XX Destination IP Address Groups_7181.xml
--------------------------------------------------------------------------------
/SWQL/Vm Connected Media:
--------------------------------------------------------------------------------
1 | SELECT displayname as Name, DetailsUrl as [_linkfor_Name]
2 |
3 | FROM Orion.VIM.VirtualMachines
4 |
5 | where PowerState='poweredOn' and VirtualMachines.VirtualMediaDevices.Connected=true
6 | and displayname like '%${SEARCH_STRING}%'
7 |
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX NetFlow Sources by % Utilization_1786.xml:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Traffic Analyzer Summary/Top XX NetFlow Sources by % Utilization_1786.xml
--------------------------------------------------------------------------------
/ViewsToShare/NoViewGroup/NetFlow Conversations Summary/2020-02-24 17_46_06-NetFlow Conversations Summary.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Mesverrum/MyPublicWork/HEAD/ViewsToShare/NoViewGroup/NetFlow Conversations Summary/2020-02-24 17_46_06-NetFlow Conversations Summary.png
--------------------------------------------------------------------------------
/CustomResources/readme.txt:
--------------------------------------------------------------------------------
1 | Intended to hold actual widgets that would need to be saved to the server itself, such as the modified version of the Custom Query widget discussed here
2 | https://thwack.solarwinds.com/t5/NPM-Documents/Custom-Query-resource-with-colors-and-styles/ta-p/528052
3 |
--------------------------------------------------------------------------------
/SWQL/Failing UNDP Pollers:
--------------------------------------------------------------------------------
1 | SELECT cpa.AssignmentName
2 | ,cpa.CustomPollerOid, cpa.CustomPollerDescription
3 |
4 | FROM Orion.NPM.CustomPollerAssignment cpa
5 | join orion.nodes n on n.nodeid=cpa.nodeid
6 | where cpa.status=0
7 | and n.nodeid=${nodeid}
8 |
9 | order by n.caption
10 |
--------------------------------------------------------------------------------
/SQLBackupRestoreProgress.sql:
--------------------------------------------------------------------------------
1 | SELECT
2 | session_id as SPID, command, a.text AS Query, start_time, percent_complete,
3 | dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
4 | FROM sys.dm_exec_requests r
5 | CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
6 | WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
7 |
--------------------------------------------------------------------------------
/SWQL/Node Log Events:
--------------------------------------------------------------------------------
1 | SELECT MessageDateTime, isnull(ms.Caption, ms.IPAddress) as Source, Level, Message
2 | FROM Orion.OLM.LogEntry le
3 | join orion.olm.MessageSources ms on ms.MessageSourceID = le.MessageSourceID
4 | where le.nodeid=${nodeid}
5 | and messagedatetime > addday(-8, getdate())
6 | and message like '%${SEARCH_STRING}%'
7 |
8 | order by MessageDateTime desc
9 |
--------------------------------------------------------------------------------
/SWQL/Alerts per Day Chart:
--------------------------------------------------------------------------------
1 | select
2 | count(message) as [Alerts]
3 | ,toutc(datetrunc('day',timestamp)) as [date]
4 | ,ac.name
5 | FROM Orion.AlertHistory ah
6 | left join orion.alertobjects ao on ah.alertobjectid=ao.alertobjectid
7 | left join orion.AlertConfigurations ac on ac.alertid=ao.alertid
8 |
9 |
10 | where daydiff(timestamp,getdate())<30
11 |
12 | group by datetrunc('day',timestamp), ac.name
13 |
14 | order by [date]
15 |
--------------------------------------------------------------------------------
/readme.txt:
--------------------------------------------------------------------------------
1 | This is where I keep all my SolarWinds related code that is fit to be seen by the world. For the last few years I had been working as a consultant so a lot of this stuff was kept relatively low key since it was my bread and butter, but I am no longer in that game so I'll be cleaning up some of my collection and releasing it into the wild for the benefit of overburdened SW admins everywhere.
2 |
3 | Feel free to contribute if you see any places where improvements should be made.
4 |
--------------------------------------------------------------------------------
/SWQL/LE Tags:
--------------------------------------------------------------------------------
1 | select le.tags.name
2 | , count(*) as [Count]
3 |
4 | from orion.olm.logentry le
5 | where le.logentrytypeid = 2
6 | and datetime > addday(-1,getdate())
7 |
8 | group by le.tags.name
9 | order by [Count] Desc
10 |
11 |
12 | --SELECT top 100
13 | -- n.caption as Node
14 | --, MessageDateTime as Timestamp
15 | --, Message
16 | --, Level
17 | --FROM Orion.OLM.LogEntry le
18 | --join orion.nodes n on n.nodeid=le.NodeID
19 | --where le.Tags.Name like '%${SEARCH_STRING}%'
20 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Alerts List:
--------------------------------------------------------------------------------
1 | SELECT name, tostring(Frequency) + ' Seconds' as [Frequency]
2 | ,case when ac.frequency < 60 then 'High frequency alerts can negatively impact performance'
3 | else ''
4 | end as [Recommendation]
5 | ,case when ac.frequency < 60 then '/Orion/images/StatusIcons/Small-Critical.gif'
6 | else '/Orion/images/StatusIcons/Small-Up.gif'
7 | end as [_iconfor_Recommendation]
8 | FROM Orion.AlertConfigurations ac
9 | where enabled=1
10 |
11 | order by ac.frequency asc
12 |
--------------------------------------------------------------------------------
/SWQL/Alert History:
--------------------------------------------------------------------------------
1 | SELECT count(AlertHistoryID) as [Total Alerts in History]
2 | ,daydiff(min(timestamp),getdate()) as [Days Since Oldest Alert]
3 | ,(select count(alerthistoryid) as [Old Alerts] from orion.AlertHistory where daydiff(timestamp,GETDATE())>30) as [Old Active Alerts]
4 | ,(select count(alerthistoryid)/30 as [Recent Alerts] from orion.AlertHistory where daydiff(timestamp,GETDATE())<30 and eventtype=0) as [Alerts per day this month]
5 |
6 | FROM Orion.AlertHistory
7 |
8 | where eventtype=0
9 |
10 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Alerts:
--------------------------------------------------------------------------------
1 | SELECT count(name) as [Alerts], tostring(Frequency) + ' Seconds' as [Frequency]
2 | ,case when ac.frequency < 60 then 'High frequency alerts can negatively impact performance'
3 | else ''
4 | end as [Recommendation]
5 | ,case when ac.frequency < 60 then '/Orion/images/StatusIcons/Small-Critical.gif'
6 | else '/Orion/images/StatusIcons/Small-Up.gif'
7 | end as [_iconfor_Recommendation]
8 | FROM Orion.AlertConfigurations ac
9 | where enabled=1
10 | group by frequency
11 | order by ac.frequency asc
12 |
--------------------------------------------------------------------------------
/ViewsToShare/Views Manager/readme.txt:
--------------------------------------------------------------------------------
1 | Files sent over by wluther
2 |
3 | This is the main view, which has a little JS box to help navigate through all my view groups. Once you click on one of those view groups on the left side...
4 | It should populate all the tabs, and as well as links, for you to jump to.
5 |
6 | 2nd tab should just be a SWQL query widget to list which files/options are being used on a view.
7 |
8 | The other 3 tabs have been "Work In Progress" for a long time, and will likely never see their time to shine. I left them in case someone else wanted to see how to not do something.
9 |
--------------------------------------------------------------------------------
/SWQL/Appinsight IIS SSL Expiration:
--------------------------------------------------------------------------------
1 | SELECT n.Caption as Node
2 | , n.DetailsUrl
3 | , n.Status
4 | , s.DisplayName as Site
5 | , sb.BindingInformation as Binding
6 | , sb.SslSubject
7 | , sb.SslDaysRemaining
8 | , ss.latestPoll
9 |
10 | from orion.nodes n
11 | join orion.apm.IIS.Application a on a.NodeID = n.NodeID
12 | join Orion.APM.IIS.Site s on s.ApplicationID = a.ApplicationID
13 | join orion.apm.iis.SiteBinding sb on sb.SiteID=s.ItemID
14 | join (SELECT max(ss.ObservationTimestamp) as latestPoll, siteID
15 | FROM Orion.APM.IIS.SiteStatus ss
16 | group by siteid) ss on ss.SiteID = s.ItemID
17 |
18 | where sb.SslDaysRemaining is not null
19 |
--------------------------------------------------------------------------------
/SWQL/Widget Finder:
--------------------------------------------------------------------------------
1 | select case when v.ViewGroupName is not null then (v.ViewGroupName+' - '+v.ViewTitle) else v.viewtitle end as View, v.ViewID
2 | , r.ResourceID, r.ResourceName, r.ResourceTitle
3 | , '/Orion/SummaryView.aspx?ViewID='+tostring(v.viewid) as [_linkfor_View]
4 | , '/Orion/DetachResource.aspx?ViewID='+tostring(v.viewid)+'&ResourceID='+tostring(r.resourceid)+'&NetObject=' as [_linkfor_ResourceTitle]
5 | from orion.views v
6 | join orion.Resources r on r.viewid=v.ViewID
7 | --join orion.ResourceProperties rp on r.ResourceID=rp.ResourceID
8 |
9 | where r.resourcetitle like '%${SEARCH_STRING}%'
10 |
11 | order by v.viewid
12 |
--------------------------------------------------------------------------------
/SWQL/Volumes w Polling issues:
--------------------------------------------------------------------------------
1 | SELECT v.node.Caption as [Node], v.node.detailsurl as [_linkfor_Node]
2 | ,'/Orion/images/StatusIcons/Small-' + v.node.StatusIcon AS [_IconFor_Node]
3 | ,Caption
4 | ,'/Orion/images/StatusIcons/Small-' + v.StatusIcon AS [_IconFor_Caption]
5 | , PollInterval, StatCollection, Type, Size, Responding, LastSync, MinutesSinceLastSync, DetailsUrl as [_linkfor_Caption]
6 | FROM Orion.Volumes v
7 | where --MinutesSinceLastSync>60 and
8 | status not in (1,9)
9 | and v.node.status not in (2,9)
10 | and ( v.node.Caption like '%${SEARCH_STRING}%' OR Caption like '%${SEARCH_STRING}%')
11 |
12 | order by v.node.caption, caption
13 |
--------------------------------------------------------------------------------
/SWQL/Node Last Poll Details:
--------------------------------------------------------------------------------
1 | Select
2 | minutediff(lastsystemuptimepollUTC,getutcdate()) as [Minutes Since Stats Collected]
3 | ,case
4 | when minutediff(lastsystemuptimepollUTC,getutcdate()) > (2*(n.statcollection)) then '/Orion/images/StatusIcons/Small-Critical.gif'
5 | when minutediff(lastsystemuptimepollUTC,getutcdate()) > n.statcollection then '/Orion/images/StatusIcons/Small-Warning.gif'
6 | else '/Orion/images/StatusIcons/Small-Up.gif'
7 | end as [_iconfor_Minutes Since Stats Collected]
8 | ,tolocal(n.lastsystemuptimepollutc) as [Last Stat Collection]
9 | ,minutediff(lastsystemuptimepollUTC,getutcdate()) / statcollection as [Missed Polls]
10 |
11 | from orion.nodes n
12 | where n.nodeid=${nodeid}
13 | order by nodeid
14 |
--------------------------------------------------------------------------------
/SWQL/UDT User Search:
--------------------------------------------------------------------------------
1 | SELECT distinct UserName, IPAddress, DNSName, MACAddress, LastSeenByUdt, LastConnectedTo
2 | , concat('/Orion/UDT/UserDetails.aspx?NetObject=UU:', userid) as [_linkfor_UserName]
3 | , concat('/Orion/UDT/EndpointDetails.aspx?NetObject=UE-IP:VAL=', IPAddress) as [_linkfor_IPAddress]
4 | , concat('/Orion/UDT/EndpointDetails.aspx?NetObject=UE-MAC:VAL=', replace(MACAddress,':','%3a')) as [_linkfor_MACAddress]
5 | , concat('/Orion/UDT/EndpointDetails.aspx?NetObject=UE-DNS:VAL=', DNSName) as [_linkfor_DNSName]
6 | FROM Orion.UDT.UserInventory.Results
7 |
8 | where UserName like '%${SEARCH_STRING}%'
9 | or IPAddress like '%${SEARCH_STRING}%'
10 | or DNSName like '%${SEARCH_STRING}%'
11 | or MACAddress like '%${SEARCH_STRING}%'
12 |
--------------------------------------------------------------------------------
/SWQL/Interfaces w Polling Issues:
--------------------------------------------------------------------------------
1 | SELECT i.node.caption as [Caption], i.node.detailsurl as [_linkfor_Caption]
2 | ,'/Orion/images/StatusIcons/Small-' + i.node.StatusIcon AS [_IconFor_Caption]
3 | ,Name
4 | ,'/Orion/images/StatusIcons/Small-' + i.StatusIcon AS [_IconFor_Name]
5 | , TypeName, TypeDescription, MinutesSinceLastSync
6 | , CASE
7 | WHEN MinutesSinceLastSync > 30 THEN '/Orion/images/ActiveAlerts/Serious.png'
8 | WHEN MinutesSinceLastSync < 30 THEN '/Orion/images/ActiveAlerts/Check.png'
9 | END AS [_IconFor_MinutesSinceLastSync]
10 | , DetailsUrl as [_linkfor_Name]
11 | FROM Orion.NPM.Interfaces i
12 | where MinutesSinceLastSync>30
13 | and i.node.status=1
14 | and (i.node.caption like '%${SEARCH_STRING}%' or name like '%${SEARCH_STRING}%')
15 | order by skippedpollingcycles desc
16 |
--------------------------------------------------------------------------------
/SQL_to_update_NodePropertiesOnTooltip.sql:
--------------------------------------------------------------------------------
1 | --ensures all node properties have been added to the table
2 | insert into [CustomPropertyUsage]
3 | select targettable, name, 'IsForEntityDetail', 1
4 | from [CustomPropertyMetadata]
5 | where targettable = 'NodesCustomProperties'
6 | and name not in (select distinct name from [CustomPropertyUsage] where targettable = 'NodesCustomProperties' and usage = 'IsForEntityDetail' )
7 |
8 | --ensures only the 5 or fewer properties I want show on the tooltip
9 | update [CustomPropertyUsage]
10 | set allowed = 0
11 | where targettable = 'NodesCustomProperties'
12 | and usage = 'IsForEntityDetail'
13 | and allowed = 1
14 | --below should be your list of property names you want to keep
15 | and name not in ('MyCustomProperty1','MyCustomProperty2','MyCustomProperty3','MyCustomProperty4','MyCustomProperty5')
16 |
--------------------------------------------------------------------------------
/SWQL/VMAN Search:
--------------------------------------------------------------------------------
1 |
2 | select vm.displayname AS vSphereName, vm.detailsurl as [_LinkFor_vSphereName], vm.ipaddress AS IP, vm.detailsurl as [_LinkFor_IP], h.hostname as ESXiHost, h.detailsurl as [_LinkFor_ESXiHost], vm.processorcount AS CPUCount, vm.memoryconfigured / 1048576 as Memory_MB ,vm.powerstate as PowerState
3 | ,case
4 | when vm.powerstate = 'poweredon' then '/orion/vim/images/statusicons/small-VMware-vm-up.gif'
5 | when vm.powerstate = 'poweredoff' then '/orion/vim/images/statusicons/small-VMware-vm-shutdown.png'
6 | end as [_iconfor_PowerState]
7 |
8 |
9 | from orion.vim.virtualmachines vm
10 | join orion.vim.hosts h on h.hostid=vm.hostid
11 |
12 | where vSphereName like '%${SEARCH_STRING}%'
13 | or
14 | IP like '%${SEARCH_STRING}%'
15 | or
16 | ESXiHost like '%${SEARCH_STRING}%'
17 | or
18 | vm.guestdnsname like '%${SEARCH_STRING}%'
19 |
--------------------------------------------------------------------------------
/SWQL/Unknown SAM Apps Chart:
--------------------------------------------------------------------------------
1 | SELECT concat(a.node.Engine.ServerName, ' - ', total.total,' total apps') as Poller, unk.Hour, count(unk.Unknowns) as UnknownApps
2 |
3 | from orion.apm.Application a
4 |
5 | left join (
6 | SELECT ApplicationID, datetrunc('hour',TimeStamp) as Hour, count(Availability) as Unknowns
7 | FROM Orion.APM.ApplicationStatus apps
8 | where apps.availability = 0
9 | and apps.TimeStamp > addday(-7,GETUTCDATE())
10 | group by applicationid, datetrunc('hour',TimeStamp)
11 | ) unk on unk.applicationid=a.ApplicationID
12 | join (select a.node.engine.servername, count(applicationid) as total from orion.apm.Application a group by a.node.engine.servername ) Total on total.servername=a.node.Engine.ServerName
13 | where unk.hour is not null
14 |
15 | --and a.node.Engine.ServerName = 'abc123'
16 | group by a.node.Engine.ServerName, unk.Hour, total.total
17 |
--------------------------------------------------------------------------------
/SWQL/VM w Large Snapshot:
--------------------------------------------------------------------------------
1 | select vm.displayname AS vSphereName, vm.detailsurl as [_LinkFor_vSphereName], vm.ipaddress AS IP, vm.detailsurl as [_LinkFor_IP], h.hostname as ESXiHost, h.detailsurl as [_LinkFor_ESXiHost],vm.powerstate as PowerState
2 | ,case
3 | when vm.powerstate = 'poweredon' then '/orion/vim/images/statusicons/small-VMware-vm-up.gif'
4 | when vm.powerstate = 'poweredoff' then '/orion/vim/images/statusicons/small-VMware-vm-shutdown.png'
5 | end as [_iconfor_PowerState]
6 | , SnapshotStorageSize/1073741824as [Snapshot GB]
7 |
8 | from orion.vim.virtualmachines vm
9 | join orion.vim.hosts h on h.hostid=vm.hostid
10 |
11 |
12 | where SnapshotStorageSize>2147483648
13 |
14 | and (vm.displayname like '%${SEARCH_STRING}%' OR vm.ipaddress like '%${SEARCH_STRING}%' OR h.hostname like '%${SEARCH_STRING}%')
15 |
16 | order by SnapshotStorageSize desc
17 |
--------------------------------------------------------------------------------
/SWQL/Down Nodes w Duration:
--------------------------------------------------------------------------------
1 | SELECT
2 | n.Caption AS [Device]
3 | ,'/Orion/images/StatusIcons/Small-' + n.StatusIcon AS [_IconFor_Device]
4 | ,n.DetailsUrl AS [_LinkFor_Device]
5 | ,CONCAT(SUBSTRING(tostring(MAX(e.EVENTTIME)),1,4),SUBSTRING(tostring(MAX(e.EVENTTIME)),5,2),
6 | SUBSTRING(tostring(tolocal(MAX(e.EVENTTIME))),12,8)) as Downtime,
7 | CONCAT(HOURDIFF(tolocal(max(e.eventtime)),getdate())/24,' Day(s) ',
8 | HOURDIFF(tolocal(max(e.eventtime)),getdate())-(HOURDIFF(tolocal(max(e.eventtime)),getdate())/24)*24,'h ',
9 | MINUTEDIFF(tolocal(max(e.eventtime)),getdate()) - (MINUTEDIFF(tolocal(max(e.eventtime)),getdate())/60)*60,'m') AS Duration
10 | FROM Orion.Nodes n
11 | INNER JOIN Orion.Events e ON n.NodeID = e.NetworkNode
12 | WHERE STATUS = 2 and E.Eventtype=1
13 | GROUP BY NodeName, StatusIcon, DetailsUrl
14 | ORDER BY MINUTEDIFF(tolocal(MAX(E.EventTime)),getdate()) desc
15 |
--------------------------------------------------------------------------------
/SWQL/Interface Down w Duration:
--------------------------------------------------------------------------------
1 | select i.Node.Caption as [Node], i.Node.DetailsUrl as [_LinkFor_Node]
2 | , '/Orion/images/StatusIcons/Small-' + i.node.Statusicon as [_IconFor_Node]
3 | ,i.Caption as [Interface], i.DetailsUrl as [_LinkFor_Interface]
4 | , '/Orion/images/StatusIcons/Small-'+i.Statusicon as [_IconFor_Interface]
5 | , tolocal(i.LastChange) as [Last Change]
6 | ,CONCAT(HOURDIFF(tolocal(i.LastChange),getdate())/24,' Day(s) ',
7 | HOURDIFF(tolocal(i.LastChange),getdate())-(HOURDIFF(tolocal(i.LastChange),getdate())/24)*24,'h ',
8 | MINUTEDIFF(tolocal(i.LastChange),getdate()) - (MINUTEDIFF(tolocal(i.LastChange),getdate())/60)*60,'m') AS Duration
9 |
10 |
11 | from Orion.NPM.Interfaces i
12 | where i.Status=2
13 | group by i.node.Caption, i.Caption, i.LastChange, i.InterfaceLastChange, i.node.DetailsUrl, i.node.Statusled, i.Status, i.InterfaceID, i.StatusLED, i.Node.GroupStatus, i.node.Statusicon
14 |
--------------------------------------------------------------------------------
/SWQL/Down Applications w Duration:
--------------------------------------------------------------------------------
1 | SELECT
2 | n.Caption as [Node]
3 | ,n.detailsurl as [_linkfor_Node]
4 | ,'/Orion/images/StatusIcons/Small-' + n.Statusicon AS [_IconFor_Node]
5 | ,a.Name as Application
6 | ,a.detailsurl as [_linkfor_Application]
7 | ,'/Orion/images/StatusIcons/Small-' + a.StatusDescription + '.gif' AS [_IconFor_Application]
8 | ,case WHEN s.[Last Healthy] is null then 'Unknown'
9 | ELSE tostring(s.[last healthy])
10 | end as [Last Healthy]
11 | ,round((minutediff(s.[last healthy],getutcdate())/60.0),1) as [Down Hours]
12 |
13 | from orion.apm.application a
14 | join orion.nodes n on n.nodeid=a.nodeid
15 | left join (SELECT max(TimeStamp)as [Last Healthy], Availability, applicationid
16 | FROM Orion.APM.ApplicationStatus
17 | where availability=1
18 | group by applicationid, availability) as s on s.applicationid=a.applicationid
19 |
20 | where a.status=2
21 |
22 | order by s.[Last Healthy] desc
23 |
--------------------------------------------------------------------------------
/SWQL/Node Details NCM Backups:
--------------------------------------------------------------------------------
1 | SELECT np.Nodes.Caption
2 | ,np.Nodes.DetailsUrl as [_linkfor_Caption]
3 | ,'/netperfmon/images/vendors/' + np.Nodes.VendorIcon as [_iconfor_Caption]
4 | , LoginStatus as [Latest Login Status]
5 | ,max(downloadtime) as [Last Backup]
6 | , ConfigType
7 | , case
8 | when max(downloadtime) is null then '/Orion/images/StatusIcons/Small-Down.gif'
9 | when daydiff(max(downloadtime),getdate())>7 THEN '/Orion/images/StatusIcons/Small-Critical.gif'
10 | when daydiff(max(downloadtime),getdate())>2 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
11 | else '/Orion/images/StatusIcons/Small-Up.gif'
12 | end as [_iconfor_Last Backup]
13 |
14 | FROM NCM.NodeProperties np
15 | left join NCM.ConfigArchive ca on ca.NodeID=np.NodeID
16 | where np.corenodeid=${nodeid}
17 |
18 | group by np.Nodes.Caption, np.Nodes.DetailsUrl, np.Nodes.VendorIcon, np.corenodeid, configtype, LoginStatus
19 |
20 | order by Caption, configtype
21 |
--------------------------------------------------------------------------------
/SWQL/VM Tools:
--------------------------------------------------------------------------------
1 | SELECT Name, IPAddress
2 | ,GuestVmWareToolsStatus as [Tools Status], DetailsUrl as [_linkfor_Name], DetailsUrl as [_linkfor_IPAddress],
3 | CASE
4 | when guestvmwaretoolsstatus='toolsOld' then '/Orion/Images/ESXPollingStatus/needs_credentials.gif'
5 | when guestvmwaretoolsstatus='toolsNotInstalled' then '/Orion/Images/ESXPollingStatus/bad_credentials.gif'
6 | when guestvmwaretoolsstatus='toolsNotRunning' then '/Orion/Images/ESXPollingStatus/disabled.gif'
7 | END as [_iconfor_Tools Status]
8 | , case
9 | when gueststate='running' then '/Orion/VIM/images/StatusIcons/Small-vm-poweredOn.png'
10 | when gueststate='notRunning' then '/Orion/Images/icon_no_run.gif'
11 | end as [_iconfor_Name]
12 | FROM Orion.VIM.VirtualMachines
13 |
14 | where guestvmwaretoolsstatus not like 'toolsok'
15 | and gueststate='running'
16 | and (name like '%${SEARCH_STRING}%' or ipaddress like '%${SEARCH_STRING}%' or guestvmwaretoolsstatus like '%${SEARCH_STRING}%')
17 |
--------------------------------------------------------------------------------
/SWQL/Alert Failures:
--------------------------------------------------------------------------------
1 | SELECT
2 | tolocal(ah.TimeStamp) as TimeStamp
3 | ,ah.AlertObjects.AlertConfigurations.Name as [AlertName]
4 | ,a.ActionTypeID
5 | ,replace(replace(replace(replace(replace(ah.Message,'[{"Key":"ActionTitle","Value":',''),'},{"Key":"ErrorMessage","Value":',' - '),'\u000d\u000a"',''),'\/',''),'}]','') as ErrorMessage
6 | ,ah.alertobjects.EntityCaption, ah.alertobjects.EntityDetailsUrl as [_linkfor_EntityCaption],
7 | ap.PropertyName, ap.PropertyValue
8 |
9 | FROM Orion.AlertHistory ah
10 | left join Orion.Actions a on a.ActionID=ah.ActionID
11 | left join Orion.ActionsProperties ap on ap.ActionID=a.ActionID
12 |
13 | where eventtype=5
14 | and daydiff(timestamp,GETUTCDATE())<3
15 | and propertyname not in ('executionRepeatTimeSpan','executionIfAknowledge','EscalationLevel','MessageContentType','Priority','Sender','EmailBCC','SmtpServerID','EmailFrom','EmailMessage')
16 | and propertyvalue != ''
17 | order by timestamp desc
18 |
--------------------------------------------------------------------------------
/SWQL/VM Inactive:
--------------------------------------------------------------------------------
1 | select vm.displayname AS vSphereName, vm.detailsurl as [_LinkFor_vSphereName], vm.ipaddress AS IP, vm.detailsurl as [_LinkFor_IP], h.hostname as ESXiHost, h.detailsurl as [_LinkFor_ESXiHost],vm.powerstate as PowerState
2 | ,case
3 | when vm.powerstate = 'poweredon' then '/orion/vim/images/statusicons/small-VMware-vm-up.gif'
4 | when vm.powerstate = 'poweredoff' then '/orion/vim/images/statusicons/small-VMware-vm-shutdown.png'
5 | end as [_iconfor_PowerState]
6 | ,vm.VirtualDiskDateModified
7 | ,vm.SnapshotDateModified
8 |
9 | from orion.vim.virtualmachines vm
10 | join orion.vim.hosts h on h.hostid=vm.hostid
11 |
12 |
13 | where DayDiff(vm.VirtualDiskDateModified, getdate())>30
14 | and (vm.SnapshotSummaryCount=0 or DayDiff( vm.SnapshotDateModified, getdate())>30)
15 | and (vm.displayname like '%${SEARCH_STRING}%' OR vm.ipaddress like '%${SEARCH_STRING}%' OR h.hostname like '%${SEARCH_STRING}%')
16 |
17 | order by vm.VirtualDiskDateModified
18 |
--------------------------------------------------------------------------------
/SWQL/Polling Engine Utilization Chart:
--------------------------------------------------------------------------------
1 | select
2 | d.[Date]
3 | ,e.servername as [Server]
4 | ,avg(x.avgNPM) as 'NPM Polling Rate'
5 | ,avg(y.avgSAM) as 'SAM Polling Rate'
6 |
7 | from pollercapacity_daily d
8 | join
9 | (
10 | select
11 | [date]
12 | ,engineid
13 | ,avg(scalefactor) as 'avgNPM'
14 | from pollercapacity_daily
15 | where throttlinggroup = 'Orion.Standard.Polling'
16 | and [date] > (getdate()-30)
17 | group by [date], engineid
18 | ) x on x.engineid = d.engineid and x.[date] = d.[date]
19 | left join
20 | (
21 | select
22 | [date]
23 | ,engineid
24 | ,avg(scalefactor) as 'avgSAM'
25 | from pollercapacity_daily
26 | where throttlinggroup = 'APM.Components.Polling'
27 | and [date] > (getdate()-30)
28 | group by [date], engineid
29 | ) y on y.engineid = d.engineid and y.[date] = d.[date]
30 | join engines e on e.engineid=d.engineid
31 |
32 | group by d.[date], e.servername, d.engineid
33 | order by d.[date] desc
34 |
--------------------------------------------------------------------------------
/SWQL/Node NCM Backup:
--------------------------------------------------------------------------------
1 | SELECT --np.Nodes.Caption
2 | --,np.Nodes.DetailsUrl as [_linkfor_Caption]
3 | --,'/netperfmon/images/vendors/' + np.Nodes.VendorIcon as [_iconfor_Caption]
4 | LoginStatus as [Latest Login Status]
5 | ,max(downloadtime) as [Last Backup]
6 | ,max(attempteddownloadtime) as [Last Backup Attempt]
7 | , ConfigType
8 | , case
9 | when max(attempteddownloadtime) is null then '/Orion/images/StatusIcons/Small-Down.gif'
10 | when daydiff(max(attempteddownloadtime),getdate())>7 THEN '/Orion/images/StatusIcons/Small-Critical.gif'
11 | when daydiff(max(attempteddownloadtime),getdate())>2 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
12 | else '/Orion/images/StatusIcons/Small-Up.gif'
13 | end as [_iconfor_Last Backup Attempt]
14 |
15 | FROM NCM.NodeProperties np
16 | left join NCM.ConfigArchive ca on ca.NodeID=np.NodeID
17 | --where np.corenodeid=${nodeid}
18 |
19 | group by np.Nodes.Caption, np.Nodes.DetailsUrl, np.Nodes.VendorIcon, np.corenodeid, configtype, LoginStatus
20 |
21 | order by configtype
22 |
--------------------------------------------------------------------------------
/SWQL/NCM Backups Summary:
--------------------------------------------------------------------------------
1 | SELECT np.Nodes.Caption
2 | ,np.Nodes.DetailsUrl as [_linkfor_Caption]
3 | ,'/netperfmon/images/vendors/' + np.Nodes.VendorIcon as [_iconfor_Caption]
4 | , LoginStatus as [Latest Login Status]
5 | ,max(downloadtime) as [Last Backup]
6 | , ConfigType
7 | , case
8 | when max(downloadtime) is null then '/Orion/images/StatusIcons/Small-Down.gif'
9 | when daydiff(max(downloadtime),getdate())>7 THEN '/Orion/images/StatusIcons/Small-Critical.gif'
10 | when daydiff(max(downloadtime),getdate())>2 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
11 | else '/Orion/images/StatusIcons/Small-Up.gif'
12 | end as [_iconfor_Last Backup]
13 |
14 | FROM NCM.NodeProperties np
15 | left join NCM.ConfigArchive ca on ca.NodeID=np.NodeID
16 |
17 | where (np.Nodes.Caption like '%${SEARCH_STRING}%' or configtype like '%${SEARCH_STRING}%' or loginstatus like '%${SEARCH_STRING}%')
18 |
19 | group by np.Nodes.Caption, np.Nodes.DetailsUrl, np.Nodes.VendorIcon, configtype, LoginStatus
20 |
21 | order by Caption, configtype
22 |
--------------------------------------------------------------------------------
/SWQL/NCM Violations:
--------------------------------------------------------------------------------
1 | --NCM Violation Query
2 |
3 | SELECT
4 | n.caption as Node
5 | ,n.DetailsUrl as [_linkfor_Node]
6 | , ConfigTitle
7 | , pr.Name as [Report]
8 | , pcr.RuleName as [RuleName]
9 | , case when pcr.ErrorLevel=0 THEN 'Notification'
10 | when pcr.ErrorLevel=1 THEN 'Warning'
11 | when pcr.ErrorLevel=2 THEN 'Critical'
12 | end as [Severity]
13 |
14 | FROM Cirrus.PolicyCacheResults PCR
15 | join Cirrus.PolicyReports pr on pr.PolicyReportID = pcr.ReportID and pr.ReportStatus='true'
16 | join Cirrus.Nodes NCM on NCM.NodeID=pcr.NodeID
17 | join orion.Nodes n on n.NodeID=ncm.CoreNodeID
18 | join (select max(pr.LastModified) as LastModified, pcr.NodeID
19 | FROM Cirrus.PolicyReports pr
20 | join cirrus.PolicyCacheResults pcr on pcr.ReportID=pr.PolicyReportID
21 | group by pcr.NodeID) latest on latest.Nodeid = pcr.NodeID
22 | where pcr.IsViolation='true'
23 | and pcr.ConfigType like 'Running'
24 |
25 |
26 |
27 | --and (n.Caption like '%${SEARCH_STRING}%' or pr.name like '%${SEARCH_STRING}%' or pcr.rulename like '%${SEARCH_STRING}%')
28 |
29 | order by NCM.SysName, pcr.ErrorLevel desc
30 |
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Polling/ViewData.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | PscxDynamicType1
5 | System.Object
6 |
7 | PscxDynamicType1
8 |
9 | 10000027
10 | 584
11 |
12 | Polling
13 | SolarWinds Admin
14 | Summary
15 | 1
16 | Network_02.png
17 | 2
18 | 500
19 | 1300
20 | 400
21 | 0
22 | 0
23 | 0
24 | 0
25 | 0
26 | false
27 | 0
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Alerts/Viewdata.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | PscxDynamicType12
5 | System.Object
6 |
7 | PscxDynamicType12
8 |
9 | 10000027
10 | 585
11 |
12 | Alerts
13 | SolarWinds Admin
14 | Summary
15 | 2
16 | transactions01.png
17 | 2
18 | 500
19 | 1200
20 | 1200
21 | 0
22 | 0
23 | 0
24 | 0
25 | 0
26 | false
27 | 0
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Intervals/ViewData.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | PscxDynamicType163
5 | System.Object
6 |
7 | PscxDynamicType163
8 |
9 | 10000027
10 | 598
11 |
12 | Intervals
13 | SolarWinds Admin
14 | Summary
15 | 3
16 | NetFlow03.png
17 | 2
18 | 650
19 | 650
20 | 890
21 | 0
22 | 0
23 | 0
24 | 0
25 | 0
26 | false
27 | 0
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/ViewsToShare/SolarWinds Admin/Thresholds/ViewData.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | PscxDynamicType89
5 | System.Object
6 |
7 | PscxDynamicType89
8 |
9 | 10000027
10 | 591
11 |
12 | Thresholds
13 | SolarWinds Admin
14 | Summary
15 | 4
16 | summary01.png
17 | 1
18 | 650
19 | 390
20 | 890
21 | 0
22 | 0
23 | 0
24 | 0
25 | 0
26 | false
27 | 0
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/SWQL/DB maintenance:
--------------------------------------------------------------------------------
1 | SELECT
2 | TOLOCAL(ST.EventTime) AS [Start Time]
3 | ,TOLOCAL(ET.EventTime) AS [Finish Time]
4 | ,CONCAT((CASE WHEN (SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime,GETUTCDATE()))/60/60) >= 1 THEN CONCAT(SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime,GETUTCDATE()))/60/60%24, 'h ') ELSE '' END)
5 | , (CASE WHEN (SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))/60) >= 1 THEN CONCAT(SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime,GETUTCDATE()))/60%60, 'm ') ELSE '' END)
6 | ,(CASE WHEN (SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime, GETUTCDATE()))) >= 1
7 | THEN CONCAT(SECONDDIFF(ST.EventTime,ISNULL(ET.EventTime,GETUTCDATE()))%60, 's ') ELSE '' END)) AS [Duration]
8 | FROM Orion.Events ST
9 | LEFT JOIN Orion.Events ET ON ET.NetObjectID = ST.NetObjectID AND ET.EventTime = (SELECT TOP 1 x.EventTime FROM Orion.Events x WHERE x.EventTime >= ST.EventTime AND x.EventType = 5101 AND x.Message = 'Nightly Maintenance Completed' AND x.NetObjectID = ST.NetObjectID ORDER BY x.EventTime)
10 | WHERE ST.EventType = '5100' AND ST.Message = 'Starting Nightly Maintenance' AND ST.EventTime > ADDDAY(-7,GETUTCDATE())
11 | ORDER BY ST.EventTime DESC
12 |
--------------------------------------------------------------------------------
/SWQL/Custom Thresholds - Memory:
--------------------------------------------------------------------------------
1 | Select InstanceCaption as [Node], WarningThreshold as [Memory Warning], CriticalThreshold as [Memory Critical], f.DetailsUrl as [_linkfor_Node], (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-PercentMemoryUsed-Warning') AS [Global Warning], (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-PercentMemoryUsed-Error') AS [Global Critical], 'Edit' AS [Edit], '/Orion/Nodes/NodeProperties.aspx?Nodes=' + ToString(NodeID) AS [_LinkFor_Edit],'/Orion/images/nodemgmt_art/icons/icon_edit.gif' as [_IconFor_Edit] , '/Orion/images/StatusIcons/Small-' + n.StatusIcon AS [_IconFor_Node]
2 |
3 | FROM Orion.ForecastCapacity f
4 | join orion.nodes n on n.nodeid=f.nodeid
5 |
6 | where metricname ='Forecast.Metric.PercentMemoryUsed'
7 | and (WarningThreshold not like (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-PercentMemoryUsed-Warning') or CriticalThreshold not like (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-PercentMemoryUsed-Error'))
8 |
9 | and (InstanceCaption like '%${SEARCH_STRING}%')
10 |
--------------------------------------------------------------------------------
/RemoveApplications.ps1:
--------------------------------------------------------------------------------
1 |
2 | <#------------- CONNECT TO SWIS -------------#>
3 | # load the snappin if it's not already loaded (step 1)
4 | if (!(Get-PSSnapin | Where-Object { $_.Name -eq "SwisSnapin" })) {
5 | Add-PSSnapin "SwisSnapin"
6 | }
7 |
8 | #define target host and credentials
9 |
10 | $hostname = 'yourserver'
11 | # create a connection to the SolarWinds API
12 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
13 | $swis = Connect-Swis -Hostname $hostname -Trusted
14 |
15 | <#------------- ACTUAL SCRIPT -------------#>
16 |
17 | # build the query in SWQL
18 | $query = @"
19 | select a.name, a.ApplicationID
20 | from orion.apm.Application a
21 | where a.node.caption like '%slwapps01%' and a.name = 'Microsoft IIS'
22 | "@
23 |
24 | # run the query and assign the results to the $applications array
25 | $applications = Get-SwisData $swis $query
26 |
27 | # iterate over the array
28 | foreach ($app in $applications) {
29 | # write out which application we're working with
30 | "Working with application: $($app.name)..."
31 |
32 | # delete the application
33 | Invoke-SwisVerb $swis 'Orion.APM.Application' 'DeleteApplication' $app.applicationid
34 | }
35 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Volumes List:
--------------------------------------------------------------------------------
1 | SELECT FullName
2 | , DetailsURL as [_linkfor_FullName]
3 | , tostring(PollInterval) + ' Sec' as [Poll Frequency]
4 | , tostring(StatCollection) + ' Min' as [Detailed Polling Frequency]
5 | , tostring(RediscoveryInterval) + ' Min' as [Rediscovery Interval]
6 | ,case when PollInterval < 60 then '/Orion/images/StatusIcons/Small-Critical.gif'
7 | when PollInterval < 120 then '/Orion/images/StatusIcons/Small-Warning.gif'
8 | else '/Orion/images/StatusIcons/Small-Up.gif'
9 | end as [_iconfor_Poll Frequency]
10 | ,case when StatCollection < 5 then '/Orion/images/StatusIcons/Small-Critical.gif'
11 | when StatCollection < 9 then '/Orion/images/StatusIcons/Small-Warning.gif'
12 | else '/Orion/images/StatusIcons/Small-Up.gif'
13 | end as [_iconfor_Detailed Polling Frequency]
14 | ,case when RediscoveryInterval < 16 then '/Orion/images/StatusIcons/Small-Critical.gif'
15 | when RediscoveryInterval < 30 then '/Orion/images/StatusIcons/Small-Warning.gif'
16 | else '/Orion/images/StatusIcons/Small-Up.gif'
17 | end as [_iconfor_Rediscovery Interval]
18 |
19 | FROM Orion.Volumes
20 |
21 | where (fullname like '%${SEARCH_STRING}%'}
22 | order by PollInterval, StatCollection, RediscoveryInterval, fullname
23 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Interfaces List:
--------------------------------------------------------------------------------
1 | SELECT FullName
2 | , DetailsUrl as [_linkfor_FullName]
3 | , tostring(PollInterval) + ' Sec' as [Poll Frequency]
4 | , tostring(StatCollection) + ' Min' as [Detailed Polling Frequency]
5 | , tostring(RediscoveryInterval) + ' Min' as [Rediscovery Interval]
6 | ,case when PollInterval < 60 then '/Orion/images/StatusIcons/Small-Critical.gif'
7 | when PollInterval < 120 then '/Orion/images/StatusIcons/Small-Warning.gif'
8 | else '/Orion/images/StatusIcons/Small-Up.gif'
9 | end as [_iconfor_Poll Frequency]
10 | ,case when StatCollection < 5 then '/Orion/images/StatusIcons/Small-Critical.gif'
11 | when StatCollection < 9 then '/Orion/images/StatusIcons/Small-Warning.gif'
12 | else '/Orion/images/StatusIcons/Small-Up.gif'
13 | end as [_iconfor_Detailed Polling Frequency]
14 | ,case when RediscoveryInterval < 16 then '/Orion/images/StatusIcons/Small-Critical.gif'
15 | when RediscoveryInterval < 30 then '/Orion/images/StatusIcons/Small-Warning.gif'
16 | else '/Orion/images/StatusIcons/Small-Up.gif'
17 | end as [_iconfor_Rediscovery Interval]
18 |
19 | FROM Orion.NPM.Interfaces
20 | where (fullname like '%${SEARCH_STRING}%')
21 |
22 | order by PollInterval,StatCollection,RediscoveryInterval,FullName
23 |
--------------------------------------------------------------------------------
/SWQL/VM w Phantom Snapshot:
--------------------------------------------------------------------------------
1 | SELECT Datastores.DisplayName, datastores.detailsurl as [_linkfor_DisplayName], case
2 | when ManagedStatus=1 then 'Up'
3 | when ManagedStatus=2 then 'Offline'
4 | when ManagedStatus=3 then 'Warning'
5 | when ManagedStatus=14 then 'Critical'
6 | end as Status
7 | ,round(SpaceUtilization,0)as [percent used]
8 | ,round(ProvisionedSpaceAllocation,0) as [Percent Provisioned]
9 | ,case
10 | when ManagedStatus=1 then '\Orion\VIM\images\StatusIcons\Small-datastore-up.png'
11 | when ManagedStatus=2 then '\Orion\VIM\images\StatusIcons\Small-datastore-down.png'
12 | when ManagedStatus=3 then '\Orion\VIM\images\StatusIcons\Small-datastore-warning.png'
13 | when ManagedStatus=14 then '\Orion\VIM\images\StatusIcons\Small-datastore-critical.png'
14 | end as [_iconfor_Status]
15 |
16 | FROM Orion.VIM.Datastores AS Datastores
17 | INNER JOIN
18 |
19 | (SELECT disk.DataStoreID, disk.DiskFileID, disk.Type , count(disk.Snapshots.SnapshotID) as snapCount, count(disk.DiskFileID) as fileCount FROM Orion.VIM.DiskFiles disk WHERE disk.Type = 'SnapshotFile' GROUP BY disk.DataStoreID ) d on Datastores.DataStoreID = d.DataStoreID and d.snapCount 1
13 | or n.CpuLoadThreshold.CriticalPolls <> 1
14 | )
15 |
16 | --and InstanceCaption like '%${SEARCH_STRING}%'
17 |
--------------------------------------------------------------------------------
/ViewsToShare/readme.txt:
--------------------------------------------------------------------------------
1 | This will serve as the home of the views and widgets I want to share out with other Thwack users. Attributions and links for anything I don't make myself are going to be in the initial commits, so check the history if you want to know where things came from.
2 |
3 | The folders directly inside this path all represent Viewgroups, with the obvious exception of the NoViewGroup section, as those are single page views.
4 |
5 |
6 | The importer tools are pretty flexible in that you can add and remove the widget XML files from a view if you want to modify anything, so if you don't like or need one of the resources you can just delete it from the folder before importing, or you can copy in widgets from another view. It will try to place itself at the same column and position as it was in the original view so you might have to shuffle things around if you get into hacking them up that way, or you can just edit the XML directly to bring about your desired changes, but be careful that you don't break the XML syntax or try to give your resources impossible properties.
7 |
8 | I'm hoping this can be a community resource we can all really take advantage of to streamline one of the most commonly asked about aspects of the Orion platform, dashboards and view customization.
9 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Nodes List:
--------------------------------------------------------------------------------
1 | SELECT Caption
2 | , DetailsUrl as [_linkfor_Caption]
3 | , ObjectSubType as [Polling Method]
4 | , tostring(PollInterval) + ' Seconds' as [Ping Frequency]
5 | , tostring(StatCollection) + ' Minutes' as [Detailed Polling Frequency]
6 | , tostring(RediscoveryInterval) + ' Minutes' as [Rediscovery Interval]
7 | ,case when PollInterval < 60 then '/Orion/images/StatusIcons/Small-Critical.gif'
8 | when PollInterval < 120 then '/Orion/images/StatusIcons/Small-Warning.gif'
9 | else '/Orion/images/StatusIcons/Small-Up.gif'
10 | end as [_iconfor_Ping Frequency]
11 | ,case when StatCollection < 5 then '/Orion/images/StatusIcons/Small-Critical.gif'
12 | when StatCollection < 10 then '/Orion/images/StatusIcons/Small-Warning.gif'
13 | else '/Orion/images/StatusIcons/Small-Up.gif'
14 | end as [_iconfor_Detailed Polling Frequency]
15 | ,case when RediscoveryInterval < 16 then '/Orion/images/StatusIcons/Small-Critical.gif'
16 | when RediscoveryInterval < 30 then '/Orion/images/StatusIcons/Small-Warning.gif'
17 | else '/Orion/images/StatusIcons/Small-Up.gif'
18 | end as [_iconfor_Rediscovery Interval]
19 |
20 | FROM Orion.Nodes
21 |
22 | where (caption like '%${SEARCH_STRING}%')
23 |
24 | order by PollInterval,StatCollection,RediscoveryInterval,caption
25 |
--------------------------------------------------------------------------------
/SwugPropertyExample.ps1:
--------------------------------------------------------------------------------
1 |
2 | #define target host and credentials
3 |
4 | $hostname = 'localhost'
5 | #$user = "admin"
6 | #$password = "password"
7 | # create a connection to the SolarWinds API
8 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
9 | $swis = Connect-Swis -Hostname $hostname -Trusted
10 |
11 | <#------------- ACTUAL SCRIPT -------------#>
12 |
13 | $query = @"
14 | SELECT Nodes.customproperties.Uri, Nodes.Caption, nodes.customproperties.applicationsrole
15 | FROM Orion.Nodes AS Nodes
16 | where nodes.nodeid in
17 | (select distinct nodeid
18 | from orion.AssetInventory.Software
19 | where name like 'Microsoft SQL Server%bit%')
20 | and
21 | (nodes.customproperties.applicationsrole is null
22 | or nodes.customproperties.applicationsrole not like '%MSSQL database%')
23 |
24 | "@
25 | $Nodes = Get-SwisData $swis $query
26 |
27 | foreach($Node in $Nodes)
28 | {
29 | if(!$Node.applicationsrole) {
30 | $applicationsrole = 'MSSQL Database'
31 | } else {
32 | $applicationsrole = "$($Node.applicationsrole), MSSQL Database"
33 | }
34 | "Setting $($Node.Caption) ApplicationsRole to $applicationsrole"
35 | Set-SwisObject -SwisConnection $swis -Uri $Node.uri -properties @{applicationsrole = $applicationsrole }
36 | }
37 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Applications:
--------------------------------------------------------------------------------
1 | SELECT count(Name) as [Applications]
2 | ,case when ts.value is null then '300 sec'
3 | else tostring(ts.value + ' sec')
4 | end as [Template Intervals]
5 | , case when s.value is null then 'Default from Template'
6 | else tostring(s.value + ' sec')
7 | end as [Customized App Intervals]
8 | ,case when ts.value < 61 then '/Orion/images/StatusIcons/Small-Critical.gif'
9 | when ts.value < 300 then '/Orion/images/StatusIcons/Small-Warning.gif'
10 | else '/Orion/images/StatusIcons/Small-Up.gif'
11 | end as [_iconfor_Template Intervals]
12 | ,case when s.value < 61 then '/Orion/images/StatusIcons/Small-Critical.gif'
13 | when s.value < 300 then '/Orion/images/StatusIcons/Small-Warning.gif'
14 | else '/Orion/images/StatusIcons/Small-Up.gif'
15 | end as [_iconfor_Customized App Intervals]
16 | ,case when ts.value < 300 or s.value < 300 then 'Higher frequency polling can overload polling engines and increase database loads'
17 | else ''
18 | end as [Recommendation]
19 |
20 |
21 | FROM Orion.APM.Application a
22 | left join Orion.APM.ApplicationSettings s on s.ApplicationID=a.ApplicationID and s.key='__Frequency'
23 | left join Orion.APM.ApplicationTemplateSettings ts on ts.ApplicationTemplateID=a.ApplicationTemplateID and ts.key ='__Frequency' and ts.value<>300
24 | group by s.value, ts.value
25 |
--------------------------------------------------------------------------------
/RemoveNodes.ps1:
--------------------------------------------------------------------------------
1 |
2 | <#------------- CONNECT TO SWIS -------------#>
3 | # load the snappin if it's not already loaded (step 1)
4 | if (!(Get-PSSnapin | Where-Object { $_.Name -eq "SwisSnapin" })) {
5 | Add-PSSnapin "SwisSnapin"
6 | }
7 |
8 | #define target host and credentials
9 |
10 | $hostname = 'orion.epiqcorp.com'
11 | #$user = "admin"
12 | #$password = "password"
13 | # create a connection to the SolarWinds API
14 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
15 | $swis = Connect-Swis -Hostname $hostname -Trusted
16 |
17 | <#------------- ACTUAL SCRIPT -------------#>
18 |
19 | # build the query in SWQL
20 | $query = @"
21 | SELECT
22 | n.Caption
23 | ,n.Uri
24 | , n.nodeid
25 | FROM Orion.nodes n
26 | where caption like 'l061slwapps01%'
27 | "@
28 |
29 | # run the query and assign the results to the $nodes array
30 | $nodes = Get-SwisData $swis $query
31 |
32 | # iterate over the array
33 | foreach ($node in $nodes) {
34 | # write out which node we're working with
35 | "Working with node: $($node.Caption)..."
36 |
37 | Invoke-SwisVerb $swis 'Orion.Reporting' 'ExecuteSQL' @"
38 | insert into deletednodes (nodeid)
39 | Values ($($node.nodeid))
40 | "@
41 |
42 | # delete the node
43 | Remove-SwisObject $swis -Uri $node.Uri | Out-Null
44 |
45 |
46 | }
47 |
--------------------------------------------------------------------------------
/SWQL/Custom Thresholds - Volumes:
--------------------------------------------------------------------------------
1 | SELECT v.node.caption as [Node], v.node.detailsurl as [_linkfor_Node],'/Orion/images/StatusIcons/Small-' + v.node.StatusIcon AS [_IconFor_Node], v.caption as [Volume], v.detailsurl as [_linkfor_Volume], '/Orion/images/StatusIcons/Small-' + v.Statusicon AS [_IconFor_Volume]
2 | ,case when fc.WarningThreshold is null then 'Default'
3 | else tostring(fc.WarningThreshold)
4 | end as [Volume Warning]
5 | ,case
6 | when fc.CriticalThreshold is null then 'Default'
7 | else tostring(fc.CriticalThreshold)
8 | end as [Volume Critical]
9 | ,(Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-DiskSpace-Warning') AS [Global Warning]
10 | ,(Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-DiskSpace-Error') AS [Global Critical]
11 | , 'Edit' AS [Edit]
12 | , '/Orion/Nodes/VolumeProperties.aspx?Volumes=' + ToString(v.volumeid) AS [_LinkFor_Edit]
13 | ,'/Orion/images/nodemgmt_art/icons/icon_edit.gif' as [_IconFor_Edit]
14 |
15 | FROM Orion.Volumes v
16 | left join Orion.ForecastCapacitySettings fc on fc.InstanceId=v.VolumeID and fc.metricid=3
17 |
18 | where (fc.WarningThreshold is not null and fc.CriticalThreshold is not null)
19 |
20 | and (v.caption like '%${SEARCH_STRING}%' or v.node.caption like '%${SEARCH_STRING}%')
21 |
22 | order by instanceid
23 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Applications List:
--------------------------------------------------------------------------------
1 | SELECT
2 | a.node.Caption as [Node]
3 | , a.node.detailsurl as [_linkfor_Node]
4 | ,Name as [Application]
5 | , DetailsUrl as [_linkfor_Application]
6 | , case when a.Template.Name = 'AppInsight for SQL' then 300
7 | else isnull(ats.Value,300)
8 | end as [Default Interval]
9 | ,case when s.value is null then isnull(ats.Value,300)
10 | else s.value
11 | end as [Customized App Instance Interval]
12 | ,case when ats.value < 61 then '/Orion/images/StatusIcons/Small-Critical.gif'
13 | when ats.value < 300 then '/Orion/images/StatusIcons/Small-Warning.gif'
14 | else '/Orion/images/StatusIcons/Small-Up.gif'
15 | end as [_iconfor_Default Interval]
16 | ,case when s.value < 61 then '/Orion/images/StatusIcons/Small-Critical.gif'
17 | when s.value < 300 then '/Orion/images/StatusIcons/Small-Warning.gif'
18 | else '/Orion/images/StatusIcons/Small-Up.gif'
19 | end as [_iconfor_Customized App Instance Interval]
20 |
21 |
22 | FROM Orion.APM.Application a
23 | left join orion.apm.ApplicationTemplateSettings ats on ats.ApplicationTemplateID=a.ApplicationTemplateID and ats.Key='__Frequency'
24 | left join Orion.APM.ApplicationSettings s on s.ApplicationID=a.ApplicationID and s.key='__Frequency'
25 |
26 | where (name like '%${SEARCH_STRING}%' or a.node.caption like '%${SEARCH_STRING}%')
27 |
28 | order by s.value, [Default Interval]
29 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Volumes:
--------------------------------------------------------------------------------
1 | SELECT count(FullName) as [Volumes]
2 | , tostring(PollInterval) + ' Sec' as [Poll Frequency]
3 | , tostring(StatCollection) + ' Min' as [Detailed Polling Frequency]
4 | , tostring(RediscoveryInterval) + ' Min' as [Rediscovery Interval]
5 | ,case when PollInterval < 60 then '/Orion/images/StatusIcons/Small-Critical.gif'
6 | when PollInterval < 120 then '/Orion/images/StatusIcons/Small-Warning.gif'
7 | else '/Orion/images/StatusIcons/Small-Up.gif'
8 | end as [_iconfor_Poll Frequency]
9 | ,case when StatCollection < 5 then '/Orion/images/StatusIcons/Small-Critical.gif'
10 | when StatCollection < 9 then '/Orion/images/StatusIcons/Small-Warning.gif'
11 | else '/Orion/images/StatusIcons/Small-Up.gif'
12 | end as [_iconfor_Detailed Polling Frequency]
13 | ,case when RediscoveryInterval < 16 then '/Orion/images/StatusIcons/Small-Critical.gif'
14 | when RediscoveryInterval < 30 then '/Orion/images/StatusIcons/Small-Warning.gif'
15 | else '/Orion/images/StatusIcons/Small-Up.gif'
16 | end as [_iconfor_Rediscovery Interval]
17 | ,case when PollInterval < 120 or StatCollection < 9 or RediscoveryInterval < 30 then 'Higher frequency polling can overload polling engines and increase database loads'
18 | else ''
19 | end as [Recommendation]
20 |
21 | FROM Orion.Volumes
22 | group by PollInterval, StatCollection, RediscoveryInterval
23 | Order by PollInterval, StatCollection, RediscoveryInterval
24 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Interfaces:
--------------------------------------------------------------------------------
1 | SELECT count(FullName) as [Interfaces]
2 | , tostring(PollInterval) + ' Sec' as [Poll Frequency]
3 | , tostring(StatCollection) + ' Min' as [Detailed Polling Frequency]
4 | , tostring(RediscoveryInterval) + ' Min' as [Rediscovery Interval]
5 | ,case when PollInterval < 60 then '/Orion/images/StatusIcons/Small-Critical.gif'
6 | when PollInterval < 120 then '/Orion/images/StatusIcons/Small-Warning.gif'
7 | else '/Orion/images/StatusIcons/Small-Up.gif'
8 | end as [_iconfor_Poll Frequency]
9 | ,case when StatCollection < 5 then '/Orion/images/StatusIcons/Small-Critical.gif'
10 | when StatCollection < 9 then '/Orion/images/StatusIcons/Small-Warning.gif'
11 | else '/Orion/images/StatusIcons/Small-Up.gif'
12 | end as [_iconfor_Detailed Polling Frequency]
13 | ,case when RediscoveryInterval < 16 then '/Orion/images/StatusIcons/Small-Critical.gif'
14 | when RediscoveryInterval < 30 then '/Orion/images/StatusIcons/Small-Warning.gif'
15 | else '/Orion/images/StatusIcons/Small-Up.gif'
16 | end as [_iconfor_Rediscovery Interval]
17 | ,case when PollInterval < 120 or StatCollection < 9 or RediscoveryInterval < 30 then 'Higher frequency polling can overload polling engines and increase database loads'
18 | else ''
19 | end as [Recommendation]
20 |
21 | FROM Orion.NPM.Interfaces
22 | group by PollInterval, RediscoveryInterval, StatCollection
23 | Order by PollInterval, StatCollection, RediscoveryInterval
24 |
--------------------------------------------------------------------------------
/SWQL/Custom Threshold - Interfaces:
--------------------------------------------------------------------------------
1 | Select n.caption as [Node],InstanceCaption as [Interface],
2 | case
3 | when MetricName = 'Forecast.Metric.InInterfacePercentUtilization' then 'RX'
4 | when MetricName = 'Forecast.Metric.OutInterfacePercentUtilization' then 'TX'
5 | End as [Direction] , WarningThreshold as [Interface Warning], CriticalThreshold as [Interface Critical], f.DetailsUrl as [_linkfor_Interface], (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-PercentUtilization-Warning') AS [Global Warning], (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-PercentUtilization-Error') AS [Global Critical], 'Edit' AS [Edit], '/Orion/Interfaces/InterfaceProperties.aspx?Interfaces=' + ToString(InstanceID) AS [_LinkFor_Edit],'/Orion/images/nodemgmt_art/icons/icon_edit.gif' as [_IconFor_Edit] ,'/Orion/images/StatusIcons/Small-' + n.StatusIcon AS [_IconFor_Node], n.DetailsUrl as [_linkfor_Node]
6 |
7 | FROM Orion.ForecastCapacity f
8 | join orion.nodes n on n.nodeid=f.nodeid
9 |
10 | where f.entitytype ='Orion.NPM.Interfaces'
11 | and (WarningThreshold not like (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-PercentUtilization-Warning') or CriticalThreshold not like (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-PercentUtilization-Error'))
12 |
13 | and InstanceCaption like '%${SEARCH_STRING}%'
14 |
--------------------------------------------------------------------------------
/SWQL/Intervals - Nodes:
--------------------------------------------------------------------------------
1 | -- nodes by polling settings
2 | SELECT count(nodeid) as [Nodes], tostring(PollInterval) + ' Seconds' as [Ping Frequency], tostring(StatCollection) + ' Minutes' as [Detailed Polling Frequency], tostring(RediscoveryInterval) + ' Minutes' as [Rediscovery Interval]
3 | ,case when PollInterval < 120 or StatCollection < 10 or RediscoveryInterval < 30 then 'Higher frequency polling can overload polling engines and increase database loads'
4 | else ''
5 | end as [Recommendation]
6 | ,case when PollInterval < 60 then '/Orion/images/StatusIcons/Small-Critical.gif'
7 | when PollInterval < 120 then '/Orion/images/StatusIcons/Small-Warning.gif'
8 | else '/Orion/images/StatusIcons/Small-Up.gif'
9 | end as [_iconfor_Ping Frequency]
10 | ,case when StatCollection < 5 then '/Orion/images/StatusIcons/Small-Critical.gif'
11 | when StatCollection < 10 then '/Orion/images/StatusIcons/Small-Warning.gif'
12 | else '/Orion/images/StatusIcons/Small-Up.gif'
13 | end as [_iconfor_Detailed Polling Frequency]
14 | ,case when RediscoveryInterval < 16 then '/Orion/images/StatusIcons/Small-Critical.gif'
15 | when RediscoveryInterval < 30 then '/Orion/images/StatusIcons/Small-Warning.gif'
16 | else '/Orion/images/StatusIcons/Small-Up.gif'
17 | end as [_iconfor_Rediscovery Interval]
18 |
19 |
20 | FROM Orion.Nodes
21 | group by pollinterval, rediscoveryinterval, statcollection
22 |
23 | order by PollInterval,StatCollection,RediscoveryInterval
24 |
--------------------------------------------------------------------------------
/SupressAlerts.ps1:
--------------------------------------------------------------------------------
1 |
2 | <#------------- CONNECT TO SWIS -------------#>
3 | # load the snappin if it's not already loaded (step 1)
4 | if (!(Get-PSSnapin | Where-Object { $_.Name -eq "SwisSnapin" })) {
5 | Add-PSSnapin "SwisSnapin"
6 | }
7 |
8 | #define target host and credentials
9 |
10 | $hostname = 'localhost'
11 | #$user = "admin"
12 | #$password = "password"
13 | # create a connection to the SolarWinds API
14 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
15 | $swis = Connect-Swis -Hostname $hostname -Trusted
16 |
17 | <#------------- ACTUAL SCRIPT -------------#>
18 |
19 |
20 | $nodestomute = "example"
21 |
22 |
23 | $query = @"
24 | select n.Caption, n.uri, concat('N:',n.nodeid) as nodeid
25 | from orion.nodes where n.caption like '%$nodestomute%'
26 | "@
27 | $Nodes = Get-SwisData $swis $query
28 |
29 |
30 |
31 | #times to unmanage between
32 | $now = [DateTime]::UtcNow
33 | $later = [DateTime]::UtcNow.AddDays(365)
34 |
35 | # iterate through this list and update each group
36 | foreach($Node in $Nodes)
37 | {
38 | # write out which group we're working with
39 |
40 | " Unmanaging $($node.Caption) from $now to $later"
41 | Invoke-SwisVerb $swis Orion.Nodes Unmanage @($Node.nodeid, $now, $later, "false") | Out-Null
42 |
43 | " Muting $($node.Caption) from $now to $later"
44 | Invoke-SwisVerb $swis Orion.AlertSuppression SuppressAlerts @(@($Node.uri), $now) | Out-Null
45 | }
46 |
--------------------------------------------------------------------------------
/SWQL/undp:
--------------------------------------------------------------------------------
1 | SELECT
2 | n.caption as [Node]
3 | ,n.detailsurl as [_linkfor_Node]
4 | ,'/Orion/images/StatusIcons/Small-' + n.StatusIcon AS [_IconFor_Node]
5 | ,name.status as [SSL Cert Name]
6 | ,state.Status as [Valid Days Remaining]
7 | ,case
8 | when state.status>90 then '/Orion/images/StatusIcons/Small-Up.gif'
9 | when state.status>30 then '/Orion/images/StatusIcons/Small-Warning.gif'
10 | else '/Orion/images/StatusIcons/Small-Critical.gif'
11 | end AS [_IconFor_Valid Days Remaining]
12 |
13 |
14 | FROM Orion.NPM.CustomPollers cp
15 | join orion.npm.CustomPollerAssignment cpa on cpa.CustomPollerID=cp.CustomPollerID
16 | join orion.nodes n on n.nodeid=cpa.nodeid
17 | join (select distinct cps.CustomPollerAssignmentID, cps.rowid, cps.status
18 | from orion.npm.CustomPollerStatus cps
19 | join orion.npm.CustomPollerAssignment cpa on cps.CustomPollerAssignmentID=cpa.CustomPollerAssignmentID
20 | where cpa.AssignmentName like 'ibdhcpsubnetnetworkaddress%'
21 | ) name on name.custompollerassignmentid=cpa.CustomPollerAssignmentID
22 | join (select distinct cps.CustomPollerAssignmentID, cps.rowid, cps.status, cpa.nodeid
23 | from orion.npm.CustomPollerStatus cps
24 | join orion.npm.CustomPollerAssignment cpa on cps.CustomPollerAssignmentID=cpa.CustomPollerAssignmentID
25 | where cpa.AssignmentName like 'ibdhcpsubnetpercentused%'
26 | ) state on state.rowid=name.rowid and cpa.nodeid=state.nodeid
27 |
28 | where n.caption like '%${SEARCH_STRING}%' or name.status like '%${SEARCH_STRING}%'
29 |
30 | order by 0+state.status desc
31 |
--------------------------------------------------------------------------------
/SWQL/Node Pollers:
--------------------------------------------------------------------------------
1 | select n.Caption,
2 | replace(replace(replace(pollers.pollertype,'n.',''),'.',' '),'_',' ') as [Poller]
3 | ,'' as Enabled
4 | ,case when pollers.enabled='true' THEN '\NetPerfMon\images\Small-Green.gif'
5 | when pollers.enabled='False' THEN '\NetPerfMon\images\Small-Red.gif'
6 | end as [_iconfor_Enabled]
7 |
8 | from orion.Nodes n
9 | join Orion.Pollers [Pollers] on n.NodeID=pollers.NetObjectID
10 |
11 | where n.NodeID=pollers.NetObjectID and pollers.NetObjectType='n'
12 | and ((pollers.pollertype not like '%status%' and pollers.pollertype not like '%responsetime%')
13 | or ((pollers.pollertype like '%status%' and pollers.enabled = 1) or (pollers.pollertype like '%responsetime%' and pollers.enabled = 1)))
14 | and n.NodeID = ${nodeid}
15 |
16 | union
17 | (select n.caption, concat('Volume - ',vt.VolumeType,' ',dv.VolumeDescription) as Volume, ' ' as Enabled, case when v.volumeindex is not null THEN '\NetPerfMon\images\Small-Green.gif' else '\NetPerfMon\images\Small-Red.gif' end as [_iconfor_Enabled]
18 | FROM Orion.DiscoveredNodes dn
19 | join orion.Nodes n on n.IP = dn.IPAddress and n.nodeid= ${nodeid}
20 | left JOIN orion.DiscoveredVolumes dv on dv.ProfileID=dn.ProfileID and dv.DiscoveredNodeID=dn.NodeID
21 | left join orion.Volumes v on v.nodeid=n.nodeid and v.VolumeIndex=dv.VolumeIndex
22 | join (select distinct v.VolumeType, v.VolumeTypeID from orion.Volumes v where volumetype not in ('fixeddisk','mountpoint','networkdisk','RemovableDisk')) vt on vt.volumetypeid=dv.VolumeType
23 | )
24 |
25 | order by [Poller]
26 |
--------------------------------------------------------------------------------
/SWQL/Nodes w Polling Issues:
--------------------------------------------------------------------------------
1 | select
2 | n.caption as [Node]
3 | ,n.detailsurl as [_linkfor_Node]
4 | ,'/Orion/images/StatusIcons/Small-' + n.StatusIcon AS [_IconFor_Node]
5 | ,n.ip_address as [IP Address]
6 | ,n.detailsurl as [_linkfor_IP Address]
7 | ,n.statusdescription as [Status Description]
8 | ,n.objectsubtype as [Collection Type]
9 | ,e.servername
10 | ,n.statcollection as [Interval]
11 | ,case when n.objectsubtype !='SNMP' then 'Not Used'
12 | when n.community='' then 'Not Used'
13 | else n.community
14 | end as [SNMPv2 Community]
15 | ,case when c.Name is null then 'Not Used'
16 | else c.Name
17 | end AS [WMI/SNMPv3 Credential]
18 | ,tolocal(n.lastsystemuptimepollutc) as [Last Stat Collection]
19 | ,tolocal(n.lastsync) as [Last Ping]
20 | ,daydiff(lastsystemuptimepollUTC,getutcdate()) as [Days Since Polled]
21 | ,'Edit' AS [Edit]
22 | , '/Orion/Nodes/NodeProperties.aspx?Nodes=' + ToString(n.NodeID) AS [_LinkFor_Edit]
23 | ,'/Orion/images/nodemgmt_art/icons/icon_edit.gif' as [_IconFor_Edit]
24 |
25 | from orion.nodes n
26 | left JOIN Orion.NodeSettings ns ON n.NodeID = ns.NodeID and SettingName like '%Credential%'
27 | left JOIN Orion.Credential c ON ns.SettingValue = c.ID
28 | join Orion.Engines e on e.engineid=n.engineid
29 | where status<>'2'
30 | and status<>'9'
31 | and objectsubtype!='ICMP'
32 | and minutediff(lastsystemuptimepollUTC,getutcdate())>20
33 | and ([Node] like '%${SEARCH_STRING}%' or [IP Address] like '%${SEARCH_STRING}%')
34 |
35 | Order by Lastsystemuptimepollutc
36 |
--------------------------------------------------------------------------------
/CreateNodeCustomProperties.p1s:
--------------------------------------------------------------------------------
1 |
2 | <#------------- CONNECT TO SWIS -------------#>
3 |
4 | #define target host and credentials
5 | $hostname = 'localhost'
6 | #$user = "admin"
7 | #$password = "password"
8 | # create a connection to the SolarWinds API
9 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
10 | $swis = Connect-Swis -Hostname $hostname -Trusted
11 |
12 | <#------------- ACTUAL SCRIPT -------------#>
13 |
14 | #create array of properties and their descriptions
15 | $nodeproperties = @(
16 | {Name = "Applications"; Description = "What software does this server support?"}
17 | {Name = "ApplicationsRole"; Description = "What job does this server do within the application?"}
18 | {Name = "AlertRecipient"; Description = "Who should be notified regarding issues on this node?"}
19 | {Name = "Site"; Description = "What is the physical location of thise node?"}
20 | {Name = "DeviceType"; Description = "What category of hardwareis this? Server, Firewall, Router, etc"}
21 | )
22 |
23 | foreach ( $prop in $nodeproperties ) {
24 | $query = @"
25 | select field from orion.customproperty where field = '$($prop.Name)'
26 | "@
27 | $check = Get-SwisData $swis $query
28 |
29 | if ( $check.length -eq 0 ) {
30 | "Creating Custom Property $($prop.Name)"
31 | Invoke-SwisVerb $swis Orion.NodesCustomProperties CreateCustomProperty @("$($prop.Name)", "$($prop.Description)", "string", 100, $null, $null, $null, $null, $null, $null)
32 | #confirm peoperty exists to end loop
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/SWQL/Interface Errors:
--------------------------------------------------------------------------------
1 | SELECT FullName
2 | , TypeDescription as [Type]
3 | ,'/Orion/images/StatusIcons/Small-' + StatusIcon AS [_IconFor_FullName]
4 | , InErrorsToday
5 | ,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceErrors.ReceivePercentErrors,0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceErrors.TransmitPercentErrors;0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceErrors.InErrors,0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceErrors.OutErrors;0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceTraffic.InPercentUtil,0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceTraffic.OutPercentUtil;' as [_linkfor_InErrorsToday]
6 | , OutErrorsToday
7 | ,'/ui/perfstack/?presetTime=last12Hours&charts=0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceErrors.ReceivePercentErrors,0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceErrors.TransmitPercentErrors;0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceErrors.InErrors,0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceErrors.OutErrors;0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceTraffic.InPercentUtil,0_Orion.NPM.Interfaces_'+tostring(interfaceid)+'-Orion.NPM.InterfaceTraffic.OutPercentUtil;' as [_linkfor_OutErrorsToday]
8 | , DetailsUrl as [_linkfor_FullName]
9 | FROM Orion.NPM.Interfaces
10 | where (InErrorsToday>0 or OutErrorsToday>0 )
11 | and status not in (0,2,9)
12 | Order by (InErrorsToday+OutErrorsToday) desc
13 |
--------------------------------------------------------------------------------
/MigrateAlerts.ps1:
--------------------------------------------------------------------------------
1 | <#------------- CONNECT TO SWIS -------------#>
2 | #define old host, credentials, and sql connection string
3 |
4 | $hostnameold = 'oldserver'
5 | #$userold = "user"
6 | #$passwordold = "pass"
7 | # create a connection to the SolarWinds API
8 | #$swissource = connect-swis -host $hostnameold -username $userold -password $passwordold -ignoresslerrors
9 | $swissource = Connect-Swis -Hostname $hostnameold -Trusted
10 |
11 | #define new host, credentials, no sql string is necessary
12 | $hostnamenew = 'newserver'
13 | #$usernew = "user"
14 | #$passwordnew = "pass"
15 | # create a connection to the SolarWinds API
16 | #$swisdest = connect-swis -host $hostnamenew -username $usernew -password $passwordnew -ignoresslerrors
17 | $swisdest = Connect-Swis -Hostname $hostnamenew -Trusted
18 |
19 | <#------------- ACTUAL SCRIPT -------------#>
20 |
21 | # get Alert IDs for enabled alerts
22 | $AlertIDs = Get-SwisData -SwisConnection $swissource -Query "SELECT AlertID FROM Orion.AlertConfigurations WHERE Enabled = 'true' and name not like '%syslog%'"
23 |
24 | # migrate the alerts
25 | foreach ($AlertID in $AlertIDs) {
26 | $AlertName = Get-SwisData -SwisConnection $swissource -Query "SELECT Name FROM Orion.AlertConfigurations WHERE AlertID = $AlertID"
27 | $Existing = Get-SwisData -SwisConnection $swisdest "select name from orion.alertconfigurations where name = '$AlertName'"
28 | if ($existing.count -eq 0) {
29 | write-output "Migrating alert named: $AlertName"
30 | $ExportedAlert = Invoke-SwisVerb $swissource Orion.AlertConfigurations Export $AlertID
31 | Invoke-SwisVerb $swisdest Orion.AlertConfigurations Import $ExportedAlert
32 | } else {
33 | "Alert named: $AlertName already exists, skipping"
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/SWQL/Pollers Summary:
--------------------------------------------------------------------------------
1 | select distinct n.Caption, n.detailsurl as [_linkfor_Caption], n.machinetype
2 | ,'List' AS [Resources]
3 | ,'/Orion/Nodes/ListResources.aspx?Nodes=' + ToString(n.NodeID) AS [_LinkFor_Resources]
4 | ,'/Orion/images/nodemgmt_art/icons/icon_list.gif' as [_IconFor_Resources]
5 | ,case when cpu.pollertype is null then 'N/A'
6 | else cpu.pollertype
7 | end as [CPU]
8 | ,case when cpu.enabled='true' THEN '\NetPerfMon\images\Small-Green.gif'
9 | when cpu.enabled='False' THEN '\NetPerfMon\images\Small-Red.gif'
10 | when cpu.enabled is null THEN '\NetPerfMon\images\Small-Shutdown.gif'
11 | end as [_iconfor_CPU]
12 | ,case when memory.pollertype is null then 'N/A'
13 | else memory.pollertype
14 | end as [Memory]
15 | ,case when memory.enabled='true' THEN '\NetPerfMon\images\Small-Green.gif'
16 | when memory.enabled='False' THEN '\NetPerfMon\images\Small-Red.gif'
17 | when memory.enabled is null THEN '\NetPerfMon\images\Small-Shutdown.gif'
18 | end as [_iconfor_Memory]
19 | ,case when hw.StatusDescription is null then 'N/A'
20 | else hw.StatusDescription
21 | end as [Hardware Health Status]
22 | ,case when hw.StatusDescription='Could Not Poll' THEN '\Orion\images\StatusIcons\Unknown.gif'
23 | when hw.StatusDescription is null THEN '\NetPerfMon\images\Small-Shutdown.gif'
24 | else concat('\Orion\images\StatusIcons\',hw.StatusDescription,'.gif')
25 | end as [_iconfor_Hardware Health Status]
26 |
27 | from orion.Nodes n
28 | left join Orion.Pollers [cpu] on n.NodeID=cpu.NetObjectID and CPU.PollerType like 'n.cpu%'
29 | left join Orion.Pollers [Memory] on n.NodeID=memory.NetObjectID and memory.PollerType like 'N.Memory%'
30 | left join Orion.HardwareHealth.HardwareInfo hw on hw.NodeID = n.NodeID
31 |
32 | where n.caption like '%${SEARCH_STRING}%'
33 | order by n.caption
34 |
--------------------------------------------------------------------------------
/SWQL/Alert SLA:
--------------------------------------------------------------------------------
1 | --report on alerts triggered
2 |
3 | select ac.Name
4 | ,ah.Message
5 | ,'/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(AlertObjectID) as [_linkfor_Name]
6 | ,EntityCaption as [Trigger Object]
7 | ,EntityDetailsUrl as [_linkfor_Trigger Object]
8 | ,case
9 | WHEN RelatedNodeCaption=EntityCaption THEN 'Self'
10 | When RelatedNodeCaption!=EntityCaption THEN RelatedNodeCaption
11 | End as [Parent Node]
12 | ,RelatedNodeDetailsUrl as [_linkfor_Parent Node]
13 | ,'/Orion/images/StatusIcons/Small-' + p.StatusIcon AS [_IconFor_Parent Node]
14 | ,tostring(tolocal(ah.TimeStamp)) as [Trigger Time]
15 | ,case when ack.timestamp is null then 'N/A'
16 | else tostring(minutediff(ah.TimeStamp,ack.timestamp))
17 | end as [Minutes Until Acknowledged]
18 | ,ack.Message as [Note]
19 | ,case when reset.timestamp is null then 'N/A'
20 | else tostring(minutediff(ah.TimeStamp,reset.timestamp))
21 | end as [Minutes Until Reset]
22 |
23 | FROM Orion.AlertHistory ah
24 | left join Orion.AlertObjects ao on ao.alertobjectid=ah.alertobjectid
25 | left join Orion.AlertConfigurations ac on ac.alertid=ao.alertid
26 | left join Orion.Actions a on a.actionid=ah.actionid
27 | left join Orion.Nodes p on p.nodeid=RelatedNodeID
28 | left join (select timestamp, AlertActiveID, AlertObjectID,message from orion.alerthistory ah where eventtype=2) ack on ack.alertactiveid=ah.AlertActiveID and ack.alertobjectid=ah.AlertObjectID
29 | left join (select timestamp, AlertActiveID, AlertObjectID from orion.alerthistory ah where eventtype=1) reset on reset.alertactiveid=ah.AlertActiveID and reset.alertobjectid=ah.AlertObjectID
30 |
31 | WHERE
32 | daydiff(ah.timestamp,GETUTCDATE())<30
33 | and ah.eventtype=0
34 | and (ac.Name like '%${SEARCH_STRING}%' or EntityCaption like '%${SEARCH_STRING}%' or RelatedNodeCaption like '%${SEARCH_STRING}%')
35 |
36 | order by ah.timestamp desc
37 |
--------------------------------------------------------------------------------
/SWQL/Node Volumes:
--------------------------------------------------------------------------------
1 | SELECT ' ' as Type, concat('/netperfmon/images/Volumes/',v.Icon) as [_iconfor_Type]
2 | , v.Caption as [Volume]
3 | ,'/Orion/images/StatusIcons/Small-' + v.StatusIcon AS [_IconFor_Volume]
4 | , v.DetailsUrl as [_linkfor_Volume]
5 | , round(v.size/1073741824,1) as [Size GB]
6 | , round(v.VolumePercentUsed,1) as [% Used]
7 | --, round(v.VolumeSpaceUsed/1073741824,1) as [Used GB]
8 | --, round(v.volumespaceavailable/1073741824,1) as [Free GB]
9 | ,'/ui/perfstack/?presetTime=last24Hours&charts=0_Orion.Volumes_'+tostring(v.volumeid)+'-Orion.VolumeUsageHistory.PercentDiskUsed;0_Orion.Volumes_'+tostring(v.volumeid)+'-Orion.PerfStack.Events,0_Orion.Volumes_'+tostring(v.volumeid)+'-Orion.PerfStack.Status;' as [_linkfor_% Used]
10 | , case
11 | --when v.volumespaceavailable/1073741824 < v.CustomProperties.Vol_MinimumGB then '/Orion/images/StatusIcons/Small-Critical.gif'
12 | when fc.WarningThreshold is null and v.VolumePercentUsed > (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-DiskSpace-Error') then '/Orion/images/StatusIcons/Small-Critical.gif'
13 | when fc.WarningThreshold is null and v.VolumePercentUsed > (Select CurrentValue AS [col1] FROM Orion.Settings WHERE SettingID = 'NetPerfMon-DiskSpace-Warning') then '/Orion/images/StatusIcons/Small-Warning.gif'
14 | when v.VolumePercentUsed>f.CriticalThreshold then '/Orion/images/StatusIcons/Small-Critical.gif'
15 | when v.VolumePercentUsed>f.WarningThreshold then '/Orion/images/StatusIcons/Small-Warning.gif'
16 | else '/Orion/images/StatusIcons/Small-Up.gif'
17 | end as [_Iconfor_% Used]
18 |
19 |
20 |
21 | from orion.Volumes v
22 | left join Orion.ForecastCapacitySettings fc on fc.InstanceId=v.VolumeID and fc.metricid=3
23 | left join Orion.ForecastCapacity f on f.InstanceId = v.VolumeID and f.EntityType='Orion.volumes'
24 |
25 |
26 | where
27 | v.NodeID=${nodeid}
28 |
29 |
30 | order by v.Caption
31 |
--------------------------------------------------------------------------------
/AddRemoveUNDP.ps1:
--------------------------------------------------------------------------------
1 | <#------------- CONNECT TO SWIS -------------#>
2 | # load the snappin if it's not already loaded (step 1)
3 | if (!(Get-PSSnapin | Where-Object { $_.Name -eq "SwisSnapin" })) {
4 | Add-PSSnapin "SwisSnapin"
5 | }
6 |
7 | #define target host and credentials
8 |
9 | $hostname = 'localhost'
10 | #$user = "admin"
11 | #$password = "password"
12 | # create a connection to the SolarWinds API
13 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
14 | $swis = Connect-Swis -Hostname $hostname -Trusted
15 |
16 |
17 |
18 | <#------------- ACTUAL SCRIPT -------------#>
19 | # get a list of nodes that should have this poller
20 | $nodes = get-swisdata $swis @"
21 | SELECT n.nodeid--,n.caption, n.vendor
22 | from orion.nodes n
23 | where n.vendor='Cisco' and n.caption like '%edge%asr%'
24 | "@
25 |
26 | "Nodes:"
27 | $nodes
28 |
29 | #get a list of UNDP pollers to assign
30 | $pollers = get-swisdata $swis @"
31 | select cp.CustomPollerID--, uniquename
32 | from orion.npm.CustomPollers cp
33 | where cp.UniqueName like 'tested'
34 | "@
35 | "Pollers:"
36 | $pollers.Guid
37 |
38 | foreach ($node in $nodes) {
39 | #check if node already has each poller
40 | foreach ($poller in $pollers) {
41 | $check = get-swisdata $swis @"
42 | select cpon.AssignmentName, cpon.uri--, cpon.NodeID ,cpon.CustomPollerID
43 | from orion.npm.CustomPollerAssignmentOnNode cpon
44 | where cpon.NodeID = '$node'
45 | and cpon.CustomPollerID = '$poller'
46 | "@
47 |
48 | if ($check) {
49 | " Already Assigned, $($check.AssignmentName) "
50 | # To remove pollers you can use the next two lines
51 | # Remove-SwisObject $swis $check.uri
52 | # "Deleting $($check.AssignmentName)"
53 |
54 | }
55 | else {
56 | " Creating poller "
57 | New-SwisObject $swis Orion.NPM.CustomPollerAssignmentOnNode @{NodeID=$node;CustomPollerID=$poller}
58 | }
59 | }
60 |
61 |
62 | }
63 |
--------------------------------------------------------------------------------
/SWQL/Alert Counts:
--------------------------------------------------------------------------------
1 | select distinct ac.Name as [Alert Name]
2 | ,'/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(AlertObjectID) as [_linkfor_Alert Name]
3 | --,ah.Message
4 | ,count(ah.message) as [Alert Count 30 days]
5 | ,today.[Alert count] as [Alert Count 24 hours]
6 | ,EntityCaption as [Trigger Object]
7 | ,EntityDetailsUrl as [_linkfor_Trigger Object]
8 | ,RelatedNodeCaption as [Parent Node]
9 | ,RelatedNodeDetailsUrl as [_linkfor_Parent Node]
10 | ,tolocal(max(ah.TimeStamp)) as [Most Recent Trigger]
11 |
12 | FROM Orion.AlertHistory ah
13 | join Orion.AlertObjects ao on ao.alertobjectid=ah.alertobjectid
14 | join Orion.AlertConfigurations ac on ac.alertid=ao.alertid
15 |
16 | left JOIN (
17 | select distinct ac.Name as AlertName
18 | ,'/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(AlertObjectID) as [_linkfor_Name]
19 | --,ah.Message
20 | ,count(ah.message) as [Alert Count]
21 | ,EntityCaption as [Trigger Object]
22 | ,EntityDetailsUrl as [_linkfor_Trigger Object]
23 | ,RelatedNodeCaption as [Parent Node]
24 | ,RelatedNodeDetailsUrl as [_linkfor_Parent Node]
25 | ,tolocal(max(ah.TimeStamp)) as [Most Recent Trigger]
26 |
27 | FROM Orion.AlertHistory ah
28 | join Orion.AlertObjects ao on ao.alertobjectid=ah.alertobjectid
29 | join Orion.AlertConfigurations ac on ac.alertid=ao.alertid
30 |
31 | WHERE
32 | hourdiff(ah.timestamp,GETUTCDATE())<24
33 | and ah.timestamp < getutcdate()
34 | and ah.eventtype=0
35 | group by name, [Trigger Object], [Parent Node]
36 | ) today on today.[_linkfor_Name] = '/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(AlertObjectID)
37 | WHERE
38 | daydiff(ah.timestamp,GETUTCDATE())<30
39 | and ah.timestamp < getutcdate()
40 | and ah.eventtype=0
41 | --and ( EntityCaption like '%${SEARCH_STRING}%' or RelatedNodeCaption like '%${SEARCH_STRING}%' or ac.name like '%${SEARCH_STRING}%' )
42 |
43 | group by name, [Trigger Object], [Parent Node]
44 | order by [Alert Count] desc
45 |
--------------------------------------------------------------------------------
/NCMFunctions.ps1:
--------------------------------------------------------------------------------
1 | # Load SwisPowerShell
2 | Import-Module SwisPowerShell
3 |
4 | $hostname = "localhost"
5 | $username = "admin"
6 | $password = ""
7 | $swis = Connect-Swis -Hostname $hostname -Username $username -Password $password
8 | $profileName = "Example123"
9 |
10 | $connectionProfile = ([xml]"
11 |
12 | 00
13 |
14 | somePassword
15 | SSH Auto
16 | 0
17 | $profileName
18 | somePassword
19 | SSH Auto
20 | 22
21 | 23
22 | SSH Auto
23 | false
24 | someUser
25 |
26 | ").DocumentElement
27 |
28 | $result = Invoke-SwisVerb $swis Cirrus.Nodes AddConnectionProfile @($connectionProfile)
29 | Write-Host $result.InnerXml
30 |
31 | $profiles = (Invoke-SwisVerb $swis Orion.Reporting ExecuteSQL "SELECT * FROM [dbo].[NCM_ConnectionProfiles]").childnodes.documentelement.executesqlresults
32 |
33 | $ProfileID = ($profiles | where {$_.name -like $profileName}).id[1]
34 |
35 | $nodeToAddtoNCM = get-swisdata $swis -Query "select top 1 nodeid from orion.nodes where vendor = 'Cisco'"
36 |
37 | Invoke-SwisVerb $swis Cirrus.Nodes AddNodeToNCM $nodeToAddtoNCM
38 |
39 | $query = "
40 | SELECT top 1 Uri
41 | FROM Cirrus.Nodes
42 | "
43 | $uri = Get-SwisData $swis $query
44 |
45 | $properties = @{
46 | ConnectionProfile = $profileID
47 | }
48 | Set-SwisObject $swis $uri $properties
49 |
50 |
--------------------------------------------------------------------------------
/AutomaticProperties.ps1:
--------------------------------------------------------------------------------
1 |
2 | <#------------- CONNECT TO SWIS -------------#>
3 | #define host, credentials, and sql connection string
4 |
5 | $hostname = "localhost"
6 | #$user = "user"
7 | #$password = "pass"
8 | # create a connection to the SolarWinds API
9 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
10 | $swis = Connect-Swis -Hostname $hostname -UserName "Admin"
11 |
12 | <#------------- ACTUAL SCRIPT -------------#>
13 |
14 | $SQLquery = @"
15 | SELECT distinct s.NodeID, ncp.uri
16 | FROM Orion.AssetInventory.Software s
17 | join orion.NodesCustomProperties ncp on ncp.NodeID=s.NodeID
18 | where name like 'Microsoft SQL Server%'
19 | "@
20 |
21 | $sqlNodes = get-swisdata $swis $SQLquery
22 |
23 |
24 | foreach ($node in $sqlNodes ) {
25 | Set-SwisObject -SwisConnection $swis -Uri $node.uri -Properties @{ApplicationRole = "Database"}
26 | }
27 |
28 | $SWquery = @"
29 | SELECT distinct s.NodeID, ncp.uri, ncp.application
30 | FROM Orion.AssetInventory.Software s
31 | join orion.NodesCustomProperties ncp on ncp.NodeID=s.NodeID
32 | where Name = 'SolarWinds Platform' and ( ncp.application != 'SolarWinds' or ncp.application is not null)
33 | "@
34 |
35 | $swNodes = get-swisdata $swis $SWquery
36 |
37 | foreach ($node in $swNodes ) {
38 | Set-SwisObject -SwisConnection $swis -Uri $node.uri -Properties @{Application = "SolarWinds"}
39 | }
40 |
41 |
42 | $AppsToCheck = @(
43 | @{SoftwareName = "SolarWinds Platform"; Tag="SolarWinds" };
44 | )
45 |
46 | foreach($app in $AppsToCheck) {
47 | $ApplicationQuery = @"
48 | SELECT distinct s.NodeID, ncp.uri, ncp.application
49 | FROM Orion.AssetInventory.Software s
50 | join orion.NodesCustomProperties ncp on ncp.NodeID=s.NodeID
51 | where Name = '$($app.SoftwareName)' and ( ncp.application != '$($app.Tag)' or ncp.application is not null)
52 | "@
53 |
54 | $Nodes = get-swisdata $swis $ApplicationQuery
55 |
56 | foreach ($node in $Nodes ) {
57 | Set-SwisObject -SwisConnection $swis -Uri $node.uri -Properties @{Application = "$($app.Tag)"}
58 | }
59 | }
60 |
61 |
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/SWQL/Pollers:
--------------------------------------------------------------------------------
1 | SELECT e.ServerName, e.IP, e.ServerType, concat(scale.PropertyValue,'x') as [Stacked Pollers], npm.PropertyValue as [NPM Polling %],e.Elements, e.Nodes, e.Interfaces, e.Volumes, sam.PropertyValue as [SAM Polling %], comp.SAMComponents, appins.AppInsightComponents, e.PollingCompletion, e.MinutesSinceKeepAlive,
2 | CASE
3 | WHEN PollingCompletion < 98 THEN '/Orion/images/ActiveAlerts/Serious.png'
4 | WHEN PollingCompletion > 98 THEN '/Orion/images/ActiveAlerts/Check.png'
5 | END AS [_IconFor_PollingCompletion]
6 | , CASE
7 | WHEN MinutesSinceKeepAlive > 2 THEN '/Orion/images/ActiveAlerts/Serious.png'
8 | WHEN MinutesSinceKeepAlive <2 THEN '/Orion/images/ActiveAlerts/Check.png'
9 | END AS [_IconFor_MinutesSinceKeepAlive]
10 | ,CASE
11 | WHEN npm.PropertyValue> 90 THEN '/Orion/images/StatusIcons/Small-Critical.gif'
12 | WHEN npm.PropertyValue> 75 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
13 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
14 | END AS [_IconFor_NPM Polling %],CASE
15 | WHEN sam.PropertyValue> 90 THEN '/Orion/images/StatusIcons/Small-Critical.gif'
16 | WHEN sam.PropertyValue> 75 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
17 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
18 | END AS [_IconFor_SAM Polling %]
19 | ,'/Orion/Admin/Details/Engines.aspx' as [_linkfor_ServerName]
20 | FROM Orion.Engines e
21 | left join Orion.EngineProperties npm on e.EngineID = npm.EngineID and npm.PropertyName='Orion.Standard.Polling'
22 | left join Orion.EngineProperties sam on e.EngineID = sam.EngineID and sam.PropertyName='APM.Components.Polling'
23 | left join Orion.EngineProperties scale on e.EngineID = scale.EngineID and scale.PropertyName='Scale Licenses'
24 | left join (select n.engineid,count(n.Applications.Components.ComponentID) as SAMComponents
25 | from orion.nodes n
26 | where n.Applications.Template.Name not like 'appinsight%'
27 | group by n.EngineID) comp on comp.engineid=e.EngineID
28 | left join (select n.engineid,count(n.Applications.Components.ComponentID) as AppInsightComponents
29 | from orion.nodes n
30 | where n.Applications.Template.Name like 'appinsight%'
31 | group by n.EngineID) appins on appins.engineid=e.EngineID
32 |
33 | order by ServerName
34 |
--------------------------------------------------------------------------------
/AlertArchiveImporter.ps1:
--------------------------------------------------------------------------------
1 | #Requires -Modules pcsx
2 |
3 | <#------------- FUNCTIONS -------------#>
4 | Function Set-SwisConnection {
5 | Param(
6 | [Parameter(Mandatory=$true, HelpMessage = "What SolarWinds server are you connecting to (Hostname or IP)?" ) ] [string] $solarWindsServer,
7 | [Parameter(Mandatory=$true, HelpMessage = "Do you want to use the credentials from PowerShell [Trusted], or a new login [Explicit]?" ) ] [ ValidateSet( 'Trusted', 'Explicit' ) ] [ string ] $connectionType,
8 | [Parameter(HelpMessage = "Which credentials should we use for an explicit logon type" ) ] $creds
9 | )
10 | IF ( $connectionType -eq 'Trusted' ) {
11 | $swis = Connect-Swis -Trusted -Hostname $solarWindsServer
12 | } ELSEIF(!$creds) {
13 | $creds = Get-Credential -Message "Please provide a Domain or Local Login for SolarWinds"
14 | $swis = Connect-Swis -Credential $creds -Hostname $solarWindsServer
15 | } ELSE {
16 | $swis = Connect-Swis -Credential $creds -Hostname $solarWindsServer
17 | }
18 | RETURN $swis
19 | }
20 |
21 | <#------------- ACTUAL SCRIPT -------------#>
22 |
23 | clear-host
24 | $now = Get-Date -Format "yyyyMMdd_HHmm"
25 | $script = $MyInvocation.MyCommand
26 | try { $dir = Split-Path $script.path }
27 | catch { }
28 |
29 | $Logfile = "$dir\$($script.name)_$now.log"
30 | Start-Transcript -Path $Logfile -Append -IncludeInvocationHeader | Out-Null
31 |
32 | while(!$swistest) {
33 | $hostname = Read-Host -Prompt "what server should we connect to?"
34 | $connectionType = Read-Host -Prompt "Should we use the current powershell credentials [Trusted], or specify credentials [Explicit]?"
35 | $swis = Set-SwisConnection $hostname $connectionType
36 | $swistest = get-swisdata $swis "SELECT TOP 1 servername FROM Orion.Websites"
37 | }
38 |
39 | "Connected to $hostname Successfully using $connectiontype credentials"
40 |
41 | # set up path to current user desktop
42 | $UserPath = "$($env:USERPROFILE)\Desktop\AlertExports\"
43 |
44 | # get exported alerts from folder
45 | $Alerts = (Get-ChildItem -Path $($UserPath+"\*.xml") -Recurse -Force).FullName
46 |
47 | foreach ($Alert in $Alerts) {
48 | "Importing $Alert"
49 | $toDo = ([xml](get-content -Path $Alert)).return
50 | $result = Invoke-SwisVerb $swis Orion.AlertConfigurations Import $toDo
51 | }
52 |
53 | "Finished"
54 | Stop-Transcript
55 |
--------------------------------------------------------------------------------
/SWQL/Nodes and Children:
--------------------------------------------------------------------------------
1 | SELECT
2 | n.caption as Node,
3 | '/netperfmon/images/vendors/' + n.VendorIcon as [_IconFor_Node],
4 | n.DetailsUrl as [_LinkFor_Node],
5 | n.ipaddress as IP_Address,
6 | n.ObjectSubType as Polling_Method,
7 | n.StatusDescription as Status,
8 | '/Orion/images/StatusIcons/Small-' + n.StatusLED AS [_IconFor_Status],
9 | '' as [ ], n.nodeid as [_linkfor_ ]
10 | FROM orion.nodes n
11 | --WHERE n.caption like '${SEARCH_STRING}'
12 |
13 | UNION ALL (
14 | SELECT
15 | (' - '+ I.Caption) as Interface,
16 | '/netperfmon/images/interfaces/' + i.InterfaceIcon AS [_IconFor_Interface],
17 | i.DetailsUrl as [_LinkFor_Interface],
18 | CASE WHEN i.IPAddress.IPAddress is not null then i.IPAddress.IPAddress
19 | ELSE ip.IPAddress END AS IP_Address,
20 | NULL as Polling_Method,
21 | concat(tostring(InPercentUtil),'% RX Utilization, ',tostring(OutPercentUtil),'% TX Utilization') as Status,
22 | '/Orion/images/StatusIcons/Small-' + i.Statusicon AS [_IconFor_Status],
23 | '' as [ ],
24 | i.nodeid as [_linkfor_ ]
25 | FROM Orion.NPM.Interfaces I
26 | left join orion.NodeIPAddresses ip on ip.NodeID=i.NodeID and ip.IPAddressType='IPv4' and ip.interfaceindex is null )
27 | --WHERE i.node.caption like '${SEARCH_STRING}'
28 |
29 | UNION ALL (
30 | SELECT
31 | (' - '+V.Caption) as Volume,
32 | '/NetPerfMon/images/Volumes/' + V.VolumeTypeIcon AS [_IconFor_Volume],
33 | v.DetailsUrl as [_LinkFor_Volume],
34 | NULL as IP_Address,
35 | NULL as Polling_Method,
36 | concat(round(v.VolumePercentUsed,0),'% of ',round(v.volumespaceavailable/1073741824,0),' GB total') as Status,
37 | '/Orion/images/StatusIcons/Small-' + v.StatusLED AS [_IconFor_Status],
38 | '' as [ ],
39 | v.nodeid as [_linkfor_ ]
40 | FROM Orion.Volumes V
41 | --WHERE v.node.caption like '${SEARCH_STRING}'
42 | )
43 |
44 | UNION ALL (
45 | SELECT
46 | (' - '+A.Name) as Application,
47 | '/orion/apm/images/statusicons/Small-App-Blank.gif' AS [_IconFor_Application],
48 | a.DetailsUrl as [_LinkFor_Volume],
49 | NULL as IP_Address,
50 | NULL as Polling_Method,
51 | a.StatusDescription as Status,
52 | '/Orion/images/StatusIcons/Small-' + a.StatusDescription + '.gif' AS [_IconFor_Status],
53 | '' as [ ],
54 | a.nodeid as [_linkfor_ ]
55 |
56 | FROM Orion.APM.Application a
57 | --WHERE a.node.caption like '${SEARCH_STRING}'
58 | )
59 |
60 | ORDER BY [_linkfor_ ], node desc
61 |
--------------------------------------------------------------------------------
/SWQL/Improved Active Alerts:
--------------------------------------------------------------------------------
1 | SELECT
2 | o.AlertConfigurations.Name AS [ALERT NAME]
3 | ,'/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:' + ToString(o.AlertObjectID) AS [_LinkFor_ALERT NAME]
4 | ,CASE
5 | WHEN o.AlertConfigurations.Severity = 2 THEN '/Orion/images/ActiveAlerts/Critical.png'
6 | WHEN o.AlertConfigurations.Severity = 3 THEN '/Orion/images/ActiveAlerts/Serious.png'
7 | WHEN o.AlertConfigurations.Severity = 1 THEN '/Orion/images/ActiveAlerts/Warning.png'
8 | WHEN o.AlertConfigurations.Severity = 0 THEN '/Orion/images/ActiveAlerts/InformationalAlert.png'
9 | WHEN o.AlertConfigurations.Severity = 4 THEN '/Orion/images/ActiveAlerts/Notice.png'
10 | END AS [_iconfor_ALERT NAME]
11 | ,case when o.entitycaption = o.RelatedNodeCaption then o.EntityCaption
12 | else concat(o.RelatedNodeCaption, ' - ', o.entitycaption) end AS [ALERT OBJECT]
13 | ,o.EntityDetailsURL AS [_LinkFor_ALERT OBJECT]
14 | ,ToLocal(o.AlertActive.TriggeredDateTime) AS [ALERT TRIGGER TIME]
15 | -- ,o.AlertActive.TriggeredMessage AS [ALERT MESSAGE]
16 | --,'/Orion/images/StatusIcons/Small-' + n.StatusIcon AS [_IconFor_ALERT OBJECT]
17 | ,'/Orion/images/StatusIcons/Small-' + p.StatusIcon AS [_IconFor_RELATED NODE]
18 | ,CASE
19 | when minutediff(o.AlertActive.TriggeredDateTime,GETUTCDATE())>1440 then (tostring(round(minutediff(o.AlertActive.TriggeredDateTime,GETUTCDATE())/1440.0,1)) + ' Days')
20 | when minutediff(o.AlertActive.TriggeredDateTime,GETUTCDATE())>60 then (tostring(round(minutediff(o.AlertActive.TriggeredDateTime,GETUTCDATE())/60.0,1)) + ' Hours')
21 | else (tostring(minutediff(o.AlertActive.TriggeredDateTime,GETUTCDATE())) + ' Minutes')
22 | end as [Time Active]
23 | , o.AlertIncident.IncidentNumber as Incident
24 | , o.AlertIncident.IncidentUrl as [_linkfor_Incident]
25 |
26 | From Orion.AlertActive aa
27 | join Orion.AlertObjects o on aa.alertobjectid=o.alertobjectid
28 | LEFT join Orion.Nodes p on p.nodeid=relatednodeid
29 | left join orion.alerthistory ah on ah.AlertActiveID=aa.AlertActiveID and ah.EventType in (2,3)
30 |
31 | -- WHERE WHERE o.AlertConfigurations.Name Like '%Restart%'
32 |
33 | where (o.AlertConfigurations.Name like '%${SEARCH_STRING}%' or
34 | o.RelatedNodeCaption like '%${SEARCH_STRING}%' or o.EntityCaption like '%${SEARCH_STRING}%' or ah.Message like '%${SEARCH_STRING}%')
35 | ORDER by o.AlertActive.TriggeredDateTime DESC
36 |
--------------------------------------------------------------------------------
/AddCustomMenusInteractively.ps1:
--------------------------------------------------------------------------------
1 | <#------------- CONNECT TO SWIS -------------#>
2 | # load the snappin if it's not already loaded (step 1)
3 | if (!(Get-PSSnapin | Where-Object { $_.Name -eq "SwisSnapin" })) {
4 | Add-PSSnapin "SwisSnapin"
5 | }
6 |
7 |
8 | $hostname = "localhost"
9 | $swis = Connect-Swis -Hostname $hostname -Trusted
10 |
11 | #alternative connection method
12 | #$user = "user"
13 | #$password = "pass"
14 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
15 |
16 | <#------------- ACTUAL SCRIPT -------------#>
17 |
18 | $MenuTitle = Read-Host -Prompt "What is the title of the drop down menu you want to work with?"
19 |
20 | # check if that drop down already exiss
21 | $MenuTest = get-swisdata $swis @"
22 | SELECT ID, Name, DefaultTitle, Tags, SortOrder, OrionFeatureName, URI
23 | FROM Orion.Web.ViewGroup
24 | where DefaultTitle = '$MenuTitle'
25 | "@
26 |
27 | if (!$MenuTest) {
28 | $MenuProps = @{
29 | Name = $MenuTitle.replace(' ','')
30 | DefaultTitle = $MenuTitle
31 | Tags = "navigation"
32 | SortOrder = 99
33 | }
34 | "`Creating new menu called $MenuTitle"
35 | $MenuResults = New-SwisObject -SwisConnection $swis -EntityType "Orion.Web.ViewGroup" -Properties $MenuProps
36 |
37 | } else {
38 | $MenuResults = $MenuTest.URI
39 | }
40 |
41 | "`Menu called $MenuTitle exists..."
42 |
43 | $ViewURL = Read-Host -Prompt "What is the URL you want to add to this menu? (You can provide full URL's or use relative links by starting the address with a '/')"
44 | $ViewTitle = Read-Host -Prompt "What is the title you want to give to this item?"
45 |
46 | $ViewProps = @{
47 | Name = $ViewTitle.replace(' ','-')
48 | DefaultTitle = $ViewTitle
49 | Type = "legacy"
50 | URL = $ViewURL
51 | IsCustom = "True"
52 | SortOrder = 0
53 | OpenInNewWindow = "False"
54 | }
55 |
56 | "`Creating new menu item called $ViewTitle under $MenuTitle"
57 | $ViewResults = New-SwisObject -SwisConnection $swis -EntityType "Orion.Web.View" -Properties $ViewProps
58 |
59 | $MenuID = get-swisdata $swis @"
60 | SELECT ID FROM Orion.Web.ViewGroup where uri = '$MenuResults'
61 | "@
62 |
63 | $ViewID = get-swisdata $swis @"
64 | SELECT ID FROM Orion.Web.View where uri = '$ViewResults'
65 | "@
66 |
67 | $LinkViewtoGroup = Invoke-SwisVerb $swis 'Orion.Reporting' 'ExecuteSQL' @"
68 | INSERT WebViewGroupWebView (WebViewGroupID, WebViewID, SortOrder)
69 | VALUES ($MenuID,$ViewID,0)
70 | "@
71 |
72 | $ClearCache = Invoke-SwisVerb $swis 'Orion.Web.Menu' 'ClearCache' -Arguments ""
73 |
--------------------------------------------------------------------------------
/AlertArchiver.ps1:
--------------------------------------------------------------------------------
1 | #Requires -Modules pcsx
2 |
3 | <#------------- FUNCTIONS -------------#>
4 | Function Set-SwisConnection {
5 | Param(
6 | [Parameter(Mandatory=$true, HelpMessage = "What SolarWinds server are you connecting to (Hostname or IP)?" ) ] [string] $solarWindsServer,
7 | [Parameter(Mandatory=$true, HelpMessage = "Do you want to use the credentials from PowerShell [Trusted], or a new login [Explicit]?" ) ] [ ValidateSet( 'Trusted', 'Explicit' ) ] [ string ] $connectionType,
8 | [Parameter(HelpMessage = "Which credentials should we use for an explicit logon type" ) ] $creds
9 | )
10 | IF ( $connectionType -eq 'Trusted' ) {
11 | $swis = Connect-Swis -Trusted -Hostname $solarWindsServer
12 | } ELSEIF(!$creds) {
13 | $creds = Get-Credential -Message "Please provide a Domain or Local Login for SolarWinds"
14 | $swis = Connect-Swis -Credential $creds -Hostname $solarWindsServer
15 | } ELSE {
16 | $swis = Connect-Swis -Credential $creds -Hostname $solarWindsServer
17 | }
18 | RETURN $swis
19 | }
20 |
21 | <#------------- ACTUAL SCRIPT -------------#>
22 |
23 | clear-host
24 | $now = Get-Date -Format "yyyyMMdd_HHmm"
25 | $script = $MyInvocation.MyCommand
26 | try { $dir = Split-Path $script.path }
27 | catch { }
28 |
29 | $Logfile = "$dir\$($script.name)_$now.log"
30 | Start-Transcript -Path $Logfile -Append -IncludeInvocationHeader | Out-Null
31 |
32 | while(!$swistest) {
33 | $hostname = Read-Host -Prompt "what server should we connect to?"
34 | $connectionType = Read-Host -Prompt "Should we use the current powershell credentials [Trusted], or specify credentials [Explicit]?"
35 | $swis = Set-SwisConnection $hostname $connectionType
36 | $swistest = get-swisdata $swis "SELECT TOP 1 servername FROM Orion.Websites"
37 | }
38 |
39 | "Connected to $hostname Successfully using $connectiontype credentials"
40 |
41 | # set up path to current user desktop
42 | $UserPath = "$($env:USERPROFILE)\Desktop\AlertExports\$now\"
43 | if((test-path $userpath) -eq $false) {$newfolder = md -path $UserPath}
44 |
45 | # get enabled alerts
46 | $Alerts = Get-SwisData -SwisConnection $swis -Query "SELECT AlertID, Name FROM Orion.AlertConfigurations WHERE Enabled = 'true' order by name"
47 |
48 | # export the alerts to xml
49 | foreach ($Alert in $Alerts) {
50 | $ExportedAlert = Invoke-SwisVerb $swis Orion.AlertConfigurations Export $alert.AlertID
51 | " Exporting alert named: $($alert.Name) to $UserPath"
52 | $ExportedAlert | Format-Xml | Out-File ($UserPath + "$($alert.Name).xml")
53 | }
54 |
55 | "Finished"
56 | Stop-Transcript
57 |
58 | #Example of importing the alert back in
59 | #$abc = ([xml](get-content -Path ($UserPath + "$($alert.Name).xml"))).return
60 | #$result = Invoke-SwisVerb $swis Orion.AlertConfigurations Import $abc
61 |
--------------------------------------------------------------------------------
/SWQL/Storage Pool Stats:
--------------------------------------------------------------------------------
1 | SELECT Name
2 | , RaidType
3 | , round(IOPSTotal,0) as [IOPS Total]
4 | , round(IOPSRead,0) as [IOPS Read]
5 | , round(IOPSWrite,0) as [IOPS Write]
6 | , round(IOPSOther,0) as [IOPS Other]
7 | , round(BytesPSTotal/1000000,1) as [MBytes/sec Total]
8 | , round(BytesPSRead/1000000,1) as [MBytes/sec Read]
9 | , round(BytesPSWrite/1000000,1) as [MBytes/sec Write]
10 | , round(IOLatencyTotal,0) as [Latency Total]
11 | , round(IOLatencyRead,0) as [Latency Read]
12 | , round(IOLatencyWrite,0) as [Latency Write]
13 | , round(IOLatencyOther,0) as [Latency Other]
14 | , DetailsUrl as [_linkfor_Name]
15 | ,case when IOPSTotal>l.IOPSTOTALTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
16 | when IOPSTotal>l.IOPSTOTALTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
17 | else '/Orion/images/StatusIcons/Small-Up.gif'
18 | end as [_iconfor_IOPS Total]
19 | ,case when IOPSRead>l.IOPSReadTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
20 | when IOPSRead>l.IOPSReadTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
21 | else '/Orion/images/StatusIcons/Small-Up.gif'
22 | end as [_iconfor_IOPS Read]
23 | ,case when IOPSWrite>l.IOPSWriteTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
24 | when IOPSWrite>l.IOPSWriteTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
25 | else '/Orion/images/StatusIcons/Small-Up.gif'
26 | end as [_iconfor_IOPS Write]
27 | ,case when IOPSOther>l.IOPSOtherTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
28 | when IOPSOther>l.IOPSOtherTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
29 | else '/Orion/images/StatusIcons/Small-Up.gif'
30 | end as [_iconfor_IOPS Other]
31 | ,case when BytesPSTotal>l.BytesPSTotalTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
32 | when BytesPSTotal>l.BytesPSTotalTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
33 | else '/Orion/images/StatusIcons/Small-Up.gif'
34 | end as [_iconfor_MBytes/sec Total]
35 | ,case when BytesPSRead>l.BytesPSReadTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
36 | when BytesPSRead>l.BytesPSReadTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
37 | else '/Orion/images/StatusIcons/Small-Up.gif'
38 | end as [_iconfor_MBytes/sec Read]
39 | ,case when BytesPSWrite>l.BytesPSWriteTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
40 | when BytesPSWrite>l.BytesPSWriteTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
41 | else '/Orion/images/StatusIcons/Small-Up.gif'
42 | end as [_iconfor_MBytes/sec Write]
43 |
44 |
45 | FROM Orion.SRM.pools l
46 | where name like '%${SEARCH_STRING}%'
47 |
--------------------------------------------------------------------------------
/SWQL/Unmanaged or Muted Nodes:
--------------------------------------------------------------------------------
1 | SELECT
2 | 'Unmanaged' as [Status]
3 | ,n.Caption AS [Node]
4 | ,tostring(tolocal(n.UnManageFrom)) AS [From]
5 | ,case when n.UnManageUntil is null or n.UnManageUntil = '9999-01-01 00:00:00' then 'Not set'
6 | else tostring(tolocal(n.UnManageUntil)) end AS [Until]
7 | ,case when n.UnManageUntil is null or n.UnManageUntil = '9999-01-01 00:00:00' then '-'
8 | else tostring(daydiff(getutcdate(), n.unmanageuntil)) end as [Days Left]
9 | ,n.DetailsURL AS [_LinkFor_Node]
10 | ,'/Orion/images/StatusIcons/Small-' + n.StatusLED AS [_IconFor_Node]
11 | ,CASE
12 | WHEN ae.accountID IS NULL THEN 'Audit Log Not Found'
13 | ELSE ae.AccountID
14 | END AS [Account]
15 |
16 |
17 | FROM
18 | Orion.Nodes n
19 | JOIN (
20 | SELECT rec.NetObjectID, max(rec.timeloggedutc) as recent
21 | FROM Orion.AuditingEvents rec
22 | WHERE rec.auditingactiontype.actiontype = 'Orion.NodeUnmanaged'
23 | group BY rec.NetObjectID) mostrecent ON mostrecent.NetObjectID = n.NodeID
24 | JOIN (
25 | SELECT ae.NetObjectID, ae.AccountID, ae.timeloggedutc
26 | FROM Orion.AuditingEvents ae
27 | WHERE ae.auditingactiontype.actiontype = 'Orion.NodeUnmanaged') ae ON ae.NetObjectID = n.NodeID and ae.timeloggedutc=mostrecent.recent
28 |
29 | WHERE n.Status = 9
30 |
31 |
32 | union all
33 |
34 | (SELECT
35 | 'Muted' as [Status]
36 | ,n.caption
37 | ,tostring(tolocal(SuppressFrom)) as [From]
38 | ,case when SuppressUntil is null or SuppressUntil = '9999-01-01 00:00:00' then 'Not set'
39 | else tostring(tolocal(SuppressUntil )) end AS [Until]
40 | ,case when SuppressUntil is null or SuppressUntil = '9999-01-01 00:00:00' then '-'
41 | else tostring(daydiff(getutcdate(), asup.SuppressUntil)) end as [Days Left]
42 | ,n.DetailsURL AS [_LinkFor_Node]
43 | ,'/Orion/images/StatusIcons/Small-' + n.StatusLED AS [_IconFor_Node]
44 | , ae.AccountID AS [Account]
45 |
46 | FROM Orion.AlertSuppression asup
47 | join orion.nodes n on asup.entityuri=n.uri
48 | join (
49 | SELECT ae.NetObjectID, max(ae.timeloggedutc) as recent
50 | FROM Orion.AuditingEvents ae
51 | WHERE ae.auditingactiontype.actiontype in ('Orion.AlertSuppressionChanged','Orion.AlertSuppressionAdded')
52 | group BY ae.netobjectid) mostrecent ON mostrecent.NetObjectID = n.NodeID
53 | join (
54 | SELECT ae.NetObjectID, ae.AccountID, ae.timeloggedutc
55 | FROM Orion.AuditingEvents ae
56 | WHERE ae.auditingactiontype.actiontype in ('Orion.AlertSuppressionChanged','Orion.AlertSuppressionAdded')
57 | Order BY ae.TimeLoggedUtc desc) ae ON ae.NetObjectID = n.NodeID and ae.timeloggedutc=mostrecent.recent
58 | )
59 | where (n.caption like '%${SEARCH_STRING}%' or ae.accountid like '%${SEARCH_STRING}%')
60 | ORDER BY [node] asc, [status] desc
61 |
--------------------------------------------------------------------------------
/SWQL/Switch Stack Summary:
--------------------------------------------------------------------------------
1 | select rep.Caption, rep.Link as [_linkfor_Caption], rep.Info, rep.InfoIcon as [_iconfor_Info], rep.DataRing, rep.DataIcon as [_iconfor_DataRing], rep.PowerRing, rep.PowerIcon as [_iconfor_PowerRing]
2 |
3 | from
4 | (select concat(st.Nodes.Caption, ' 0') as [order]
5 | , st.Nodes.Caption
6 | , st.nodes.DetailsUrl as Link
7 | , concat(tostring(MemberCount), ' Members') as [Info]
8 | , '' as [InfoIcon]
9 | , 'Data' as DataRing
10 | , case when st.MemberCount > 1 and st.DataRingStatus != 1 then '/Orion/images/StatusIcons/Small-warning.gif'
11 | else '/Orion/images/StatusIcons/Small-up.gif' end as [DataIcon]
12 | , 'Power' as PowerRing
13 | , case when st.MemberCount > 1 and st.PowerRingStatus != 1 then '/Orion/images/StatusIcons/Small-warning.gif'
14 | else '/Orion/images/StatusIcons/Small-up.gif' end as [PowerIcon]
15 |
16 | FROM Orion.NPM.SwitchStack st
17 | where st.Nodes.Caption like case when '${SEARCH_STRING}' != 'alerts' then '%${SEARCH_STRING}%'
18 | else '%'
19 | end
20 |
21 | union all
22 | (select
23 | concat(mem.SwitchStack.Nodes.caption, concat(' ',tostring(mem.SwitchNumber)) ) as [_linkfor_ ]
24 | , ' - #' + tostring(mem.SwitchNumber) + ' ' + mem.Model + ' - ' + mem.SerialNumber as Caption
25 | , mem.SwitchStack.nodes.DetailsUrl+'&ViewID=124' as [_linkfor_Caption]
26 | , concat('Priority ', tostring(mem.SwPriority), case when mem.SwitchStack.MasterNumber = mem.SwitchNumber then ' (Current Master)' else '' end) as [Info]
27 | ,case when mem.SwitchStack.MemberCount = 1 and mem.SwPriority != 15 then '/Orion/images/StatusIcons/Small-warning.gif'
28 | when mem.SwitchStack.MemberCount > 1 and mem.SwitchNumber = 1 and mem.SwitchStack.MasterNumber != 1 then '/Orion/images/StatusIcons/Small-warning.gif'
29 | when mem.SwitchNumber != 1 and mem.SwitchStack.MasterNumber = mem.SwitchNumber then '/Orion/images/StatusIcons/Small-warning.gif'
30 | else '/Orion/images/StatusIcons/Small-up.gif'
31 | end as [_iconfor_Info]
32 | , '' as DataRing
33 | , '' as [_iconfor_DataRing]
34 | , '' as PowerRing
35 | , '' as [_iconfor_PowerRing]
36 |
37 | FROM Orion.NPM.SwitchStackMember mem
38 | where mem.SwitchStack.Nodes.caption like case when '${SEARCH_STRING}' != 'alerts' then '%${SEARCH_STRING}%'
39 | else '%'
40 | end
41 | or
42 | mem.SerialNumber like case when '${SEARCH_STRING}' != 'alerts' then '%${SEARCH_STRING}%'
43 | else '%'
44 | end
45 | )
46 | ) rep
47 |
48 | where (rep.InfoIcon like case when '${SEARCH_STRING}' = 'alerts' then '/Orion/images/StatusIcons/Small-warning.gif'
49 | else '%'
50 | end
51 | or rep.DataIcon like case when '${SEARCH_STRING}' = 'alerts' then '/Orion/images/StatusIcons/Small-warning.gif'
52 | else '%'
53 | end
54 | or rep.PowerIcon like case when '${SEARCH_STRING}' = 'alerts' then '/Orion/images/StatusIcons/Small-warning.gif'
55 | else '%'
56 | end)
57 |
58 | order by rep.[order]
59 |
--------------------------------------------------------------------------------
/SWQL/Node Downtime History:
--------------------------------------------------------------------------------
1 | SELECT
2 | -- Device name
3 | --StartTime.Nodes.Caption AS [Device]
4 |
5 | -- This will generate the status icon to the left of the device name
6 | --,'/Orion/images/StatusIcons/Small-' + StartTime.Nodes.StatusIcon AS [_IconFor_Device]
7 |
8 | -- I found that the 'Message' column was too wide for my purposes and opted to remove it
9 | -- If you want it in your resource, just remove the comment marker (--) from the line below
10 | StartTime.Message
11 |
12 | -- Down Event time stamp in local time zone
13 | ,ToLocal(StartTime.EventTime) AS [Down Event]
14 |
15 | -- Up Event Message
16 | ,(SELECT TOP 1
17 | Message AS [Message]
18 | FROM Orion.Events AS [EndTime]
19 | WHERE EndTime.EventTime >= StartTime.EventTime
20 | AND EndTime.EventType = 5
21 | AND EndTime.NetworkNode = StartTime.NetworkNode
22 | AND EndTime.NetObjectType like 'N'
23 | AND EndTime.NetObjectID = StartTime.NetObjectID
24 | AND EventTime IS NOT NULL
25 | ORDER BY EndTime.EventTime
26 | ) AS [Up Event Message]
27 | -- Up Event time stamp in local time zone
28 | ,(SELECT TOP 1
29 | ToLocal(EventTime) AS [EventTime]
30 | FROM Orion.Events AS [EndTime]
31 | WHERE EndTime.EventTime >= StartTime.EventTime
32 | AND EndTime.EventType = 5
33 | AND EndTime.NetObjectType = 'N'
34 | AND EndTime.NetObjectID = StartTime.NetObjectID
35 | AND EventTime IS NOT NULL
36 | ORDER BY EndTime.EventTime
37 | ) AS [Up Event]
38 |
39 | -- Downtime duration in minutes. Based on either the current time (node is still down) or Up Event time (node is back up)
40 | ,CASE
41 | WHEN (SELECT TOP 1 ToLocal(EventTime) AS [EventTime]
42 | FROM Orion.Events AS [EndTime]
43 | WHERE EndTime.EventTime >= StartTime.EventTime
44 | AND EndTime.EventType = 5
45 | AND EndTime.NetObjectType = 'N'
46 | AND EndTime.NetObjectID = StartTime.NetObjectID
47 | AND EventTime IS NOT NULL
48 | ORDER BY EndTime.EventTime) IS NULL THEN MINUTEDIFF(StartTime.EventTime, GETUTCDATE())
49 | ELSE MINUTEDIFF(StartTime.EventTime,
50 | (SELECT TOP 1 EventTime
51 | FROM Orion.Events AS [EndTime]
52 | WHERE EndTime.EventTime > StartTime.EventTime
53 | AND EndTime.EventType = 5
54 | AND EndTime.NetObjectType = 'N'
55 | AND EndTime.NetObjectID = StartTime.NetObjectID
56 | ORDER BY EndTime.EventTime))
57 | END AS [Minutes]
58 |
59 |
60 | -- This is the table we are querying
61 | FROM Orion.Events StartTime
62 |
63 | -- EventType = 1 is to correlate with our 'Down Event' time stamp from line 13 above
64 | WHERE StartTime.EventType = 1
65 |
66 | -- Here's the trick to get the query to dynamically pull details for the node you are looking at
67 | --AND StartTime.NetObjectID = ${NodeID}
68 |
69 | -- Order our results from the newest to oldest 'Down Event'
70 | ORDER BY [Down Event] DESC
71 |
--------------------------------------------------------------------------------
/AddMapTabToDetails.ps1:
--------------------------------------------------------------------------------
1 | <#------------- CONNECT TO SWIS -------------#>
2 | # load the snappin if it's not already loaded (step 1)
3 | if (!(Get-PSSnapin | Where-Object { $_.Name -eq "SwisSnapin" })) {
4 | Add-PSSnapin "SwisSnapin"
5 | }
6 |
7 | #define host, credentials, and sql connection string
8 |
9 | $hostname = "localhost"
10 | #$user = "user"
11 | #$password = "pass"
12 | # create a connection to the SolarWinds API
13 | #$swis = connect-swis -host $hostname -username $user -password $password -ignoresslerrors
14 | $swis = Connect-Swis -Hostname $hostname -Trusted
15 |
16 |
17 | <#------------- ACTUAL SCRIPT -------------#>
18 |
19 |
20 | # get list of all views types with a map option
21 | $viewkeys = get-swisdata $swis "SELECT distinct ViewKey FROM Orion.Views where viewtitle = 'map' and viewkey like '%StaticSubview' "
22 |
23 | foreach ($viewkey in $viewkeys)
24 | {
25 | "Working on $viewkey"
26 |
27 | #get the viewgroup to use for our parent clone
28 | $mapviewgroup = get-swisdata $swis "select top 1 viewgroup from orion.views where viewkey = '$viewkey'"
29 |
30 | #this will be the viewid of the parent of our clones
31 | $cloneviewparent = get-swisdata $swis "select viewid, uri from orion.views where viewgroup = '$mapviewgroup' and viewkey = '$viewkey'"
32 | " View to clone is $($cloneviewparent.viewid)"
33 |
34 | #get the correct viewkey
35 | $viewkeytoadd = get-swisdata $swis "select viewkey from orion.views where viewgroup = '$mapviewgroup' and (viewgroupposition = 1 or viewgroupposition is null)"
36 |
37 | #find any instances of that viewtype that don't already have a map
38 | $viewgrouptoadd = get-swisdata $swis "select viewgroup, viewgroupname, viewkey, viewtype, viewgroupposition from orion.views where viewkey = '$viewkeytoadd' and viewgroup not in (select viewgroup from orion.views where viewkey like '$viewkey%')"
39 | "Number of view groups to clone into is $($viewgrouptoadd.viewgroup.count)"
40 |
41 | foreach ($vg in $viewgrouptoadd.viewgroup )
42 | {
43 | $vieworder = get-swisdata $swis "select viewgroupname, max(viewgroupposition)+1 as position from orion.views where viewgroup = '$vg' group by viewgroupname "
44 | " Cloning map to $($vieworder.viewgroupname) position $($vieworder.position)"
45 |
46 | $newview = Invoke-SwisVerb $swis Orion.Views CloneView @($cloneviewparent.viewid , "Map")
47 | " New Viewid is $($newview.'#text')"
48 | $newviewuri = get-swisdata $swis " select uri from orion.views where viewid = $($newview.'#text')"
49 | " New view Uri is $newviewuri"
50 | Set-SwisObject $swis -Uri "$newviewuri" -Properties @{"ViewGroupName"="$($vieworder.viewgroupname)"; “ViewGroup” = "$vg"; "ViewGroupPosition"="$($vieworder.position)" }
51 | }
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/SWQL/Outage History:
--------------------------------------------------------------------------------
1 | SELECT
2 | -- Device name
3 | StartTime.Nodes.Caption AS [Device]
4 |
5 | -- This will generate the status icon to the left of the device name
6 | ,'/Orion/images/StatusIcons/Small-' + StartTime.Nodes.StatusIcon AS [_IconFor_Device]
7 | ,starttime.nodes.detailsurl as [_linkfor_Device]
8 | -- I found that the 'Message' column was too wide for my purposes and opted to remove it
9 | -- If you want it in your resource, just remove the comment marker (--) from the line below
10 | --,StartTime.Message
11 |
12 | -- Down Event time stamp in local time zone
13 | ,ToLocal(StartTime.EventTime) AS [Down Event]
14 |
15 |
16 | -- Up Event time stamp in local time zone
17 | ,(SELECT TOP 1
18 | ToLocal(EventTime) AS [EventTime]
19 | FROM Orion.Events AS [EndTime]
20 | WHERE EndTime.EventTime >= StartTime.EventTime
21 | AND EndTime.EventType = 5
22 | AND EndTime.NetObjectType = 'N'
23 | AND EndTime.NetObjectID = StartTime.NetObjectID
24 | AND EventTime IS NOT NULL
25 | ORDER BY EndTime.EventTime
26 | ) AS [Up Event]
27 |
28 | -- Downtime duration in minutes. Based on either the current time (node is still down) or Up Event time (node is back up)
29 | ,CASE
30 | WHEN (SELECT TOP 1 ToLocal(EventTime) AS [EventTime]
31 | FROM Orion.Events AS [EndTime]
32 | WHERE EndTime.EventTime >= StartTime.EventTime
33 | AND EndTime.EventType = 5
34 | AND EndTime.NetObjectType = 'N'
35 | AND EndTime.NetObjectID = StartTime.NetObjectID
36 | AND EventTime IS NOT NULL
37 | ORDER BY EndTime.EventTime) IS NULL THEN MINUTEDIFF(StartTime.EventTime, GETUTCDATE())
38 | ELSE MINUTEDIFF(StartTime.EventTime,
39 | (SELECT TOP 1 EventTime
40 | FROM Orion.Events AS [EndTime]
41 | WHERE EndTime.EventTime > StartTime.EventTime
42 | AND EndTime.EventType = 5
43 | AND EndTime.NetObjectType = 'N'
44 | AND EndTime.NetObjectID = StartTime.NetObjectID
45 | ORDER BY EndTime.EventTime))
46 | END AS [Minutes]
47 |
48 |
49 | -- This is the table we are querying
50 | FROM Orion.Events StartTime
51 |
52 |
53 | -- EventType = 1 is to correlate with our 'Down Event' time stamp from line 13 above
54 | WHERE StartTime.EventType = 1
55 | and daydiff(starttime.eventtime,getdate())<7
56 | and 60 < (CASE
57 | WHEN (SELECT TOP 1 ToLocal(EventTime) AS [EventTime]
58 | FROM Orion.Events AS [EndTime]
59 | WHERE EndTime.EventTime >= StartTime.EventTime
60 | AND EndTime.EventType = 5
61 | AND EndTime.NetObjectType = 'N'
62 | AND EndTime.NetObjectID = StartTime.NetObjectID
63 | AND EventTime IS NOT NULL
64 | ORDER BY EndTime.EventTime) IS NULL THEN MINUTEDIFF(StartTime.EventTime, GETUTCDATE())
65 | ELSE MINUTEDIFF(StartTime.EventTime,
66 | (SELECT TOP 1 EventTime
67 | FROM Orion.Events AS [EndTime]
68 | WHERE EndTime.EventTime > StartTime.EventTime
69 | AND EndTime.EventType = 5
70 | AND EndTime.NetObjectType = 'N'
71 | AND EndTime.NetObjectID = StartTime.NetObjectID
72 | ORDER BY EndTime.EventTime))
73 | END)
74 |
75 |
76 | AND StartTime.Nodes.caption like '%${SEARCH_STRING}%'
77 |
78 |
79 | -- Order our results from the newest to oldest 'Down Event'
80 | ORDER BY [Down Event] DESC
81 |
--------------------------------------------------------------------------------
/SWQL/Component Alert History:
--------------------------------------------------------------------------------
1 | select
2 | 'Last 24 Hours' as [Time]
3 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
4 | , '' as [_linkfor_Alert Name]
5 | , CASE
6 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
7 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
8 | END AS [_iconfor_Alert Name]
9 | , '' as [Triggering Object]
10 | , '' as [_linkfor_Triggering Object]
11 | , '1' as [_linkfor_ ]
12 |
13 | from orion.AlertHistory ah
14 | where ah.EventType=0
15 | and ah.TimeStamp > addhour(-24,GETUTCDATE())
16 | and ah.AlertObjects.EntityUri like ('%/Components/ComponentID='+'${componentid}')
17 |
18 | UNION ALL
19 |
20 | (
21 | select
22 | 'Last 7 days' as [Time]
23 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
24 | , '' as [_linkfor_Alert Name]
25 | , CASE
26 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
27 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
28 | END AS [_iconfor_Alert Name]
29 | , '' as [Triggering Object]
30 | , '' as [_linkfor_Triggering Object]
31 | , '2' as [_linkfor_ ]
32 |
33 | from orion.AlertHistory ah
34 | where ah.EventType=0
35 | and ah.TimeStamp > addday(-7,GETUTCDATE())
36 | and ah.AlertObjects.EntityUri like ('%/Components/ComponentID='+'${componentid}')
37 | )
38 |
39 | Union ALL
40 |
41 | (
42 | select
43 | 'Last 30 Days' as [Time]
44 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
45 | , '' as [_linkfor_Alert Name]
46 | , CASE
47 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
48 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
49 | END AS [_iconfor_Alert Name]
50 | , '' as [Triggering Object]
51 | , '' as [_linkfor_Triggering Object]
52 | , '3' as [_linkfor_ ]
53 |
54 | from orion.AlertHistory ah
55 | where ah.EventType=0
56 | and ah.TimeStamp > addday(-30,GETUTCDATE())
57 | and ah.AlertObjects.EntityUri like ('%/Components/ComponentID='+'${componentid}')
58 | )
59 |
60 | union all
61 |
62 | (select
63 | tostring(ToLocal(ah.Timestamp)) as [Time]
64 | , ah.AlertObjects.AlertConfigurations.Name as [Alert Name]
65 | , '/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(ah.AlertObjectID) as [_linkfor_Alert Name]
66 | , CASE
67 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 2 THEN '/Orion/images/ActiveAlerts/Critical.png'
68 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 3 THEN '/Orion/images/ActiveAlerts/Serious.png'
69 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 1 THEN '/Orion/images/ActiveAlerts/Warning.png'
70 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 0 THEN '/Orion/images/ActiveAlerts/InformationalAlert.png'
71 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 4 THEN '/Orion/images/ActiveAlerts/Notice.png'
72 | END AS [_iconfor_Alert Name]
73 | , ah.AlertObjects.EntityCaption as [Triggering Object]
74 | , ah.AlertObjects.EntityDetailsUrl as [_linkfor_Triggering Object]
75 | , '4' as [_linkfor_ ]
76 |
77 | from Orion.AlertHistory ah
78 | where
79 | eventtype=0
80 | and ah.AlertObjects.EntityUri like ('%/Components/ComponentID='+'${componentid}')
81 | )
82 |
83 | order by [_linkfor_ ], [Time] desc
84 |
--------------------------------------------------------------------------------
/SWQL/Application Alert History:
--------------------------------------------------------------------------------
1 | select
2 | 'Last 24 Hours' as [Time]
3 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
4 | , '' as [_linkfor_Alert Name]
5 | , CASE
6 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
7 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
8 | END AS [_iconfor_Alert Name]
9 | , '' as [Triggering Object]
10 | , '' as [_linkfor_Triggering Object]
11 | , '1' as [_linkfor_ ]
12 |
13 | from orion.AlertHistory ah
14 | where ah.EventType=0
15 | and ah.TimeStamp > addhour(-24,GETUTCDATE())
16 | and ah.AlertObjects.EntityUri like ('%/Applications/ApplicationID='+'${applicationid}'+'%')
17 |
18 | UNION ALL
19 |
20 | (
21 | select
22 | 'Last 7 days' as [Time]
23 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
24 | , '' as [_linkfor_Alert Name]
25 | , CASE
26 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
27 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
28 | END AS [_iconfor_Alert Name]
29 | , '' as [Triggering Object]
30 | , '' as [_linkfor_Triggering Object]
31 | , '2' as [_linkfor_ ]
32 |
33 | from orion.AlertHistory ah
34 | where ah.EventType=0
35 | and ah.TimeStamp > addday(-7,GETUTCDATE())
36 | and ah.AlertObjects.EntityUri like ('%/Applications/ApplicationID='+'${applicationid}'+'%')
37 | )
38 |
39 | Union ALL
40 |
41 | (
42 | select
43 | 'Last 30 Days' as [Time]
44 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
45 | , '' as [_linkfor_Alert Name]
46 | , CASE
47 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
48 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
49 | END AS [_iconfor_Alert Name]
50 | , '' as [Triggering Object]
51 | , '' as [_linkfor_Triggering Object]
52 | , '3' as [_linkfor_ ]
53 |
54 | from orion.AlertHistory ah
55 | where ah.EventType=0
56 | and ah.TimeStamp > addday(-30,GETUTCDATE())
57 | and ah.AlertObjects.EntityUri like ('%/Applications/ApplicationID='+'${applicationid}'+'%')
58 | )
59 |
60 | union all
61 |
62 | (select
63 | tostring(ToLocal(ah.Timestamp)) as [Time]
64 | , ah.AlertObjects.AlertConfigurations.Name as [Alert Name]
65 | , '/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(ah.AlertObjectID) as [_linkfor_Alert Name]
66 | , CASE
67 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 2 THEN '/Orion/images/ActiveAlerts/Critical.png'
68 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 3 THEN '/Orion/images/ActiveAlerts/Serious.png'
69 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 1 THEN '/Orion/images/ActiveAlerts/Warning.png'
70 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 0 THEN '/Orion/images/ActiveAlerts/InformationalAlert.png'
71 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 4 THEN '/Orion/images/ActiveAlerts/Notice.png'
72 | END AS [_iconfor_Alert Name]
73 | , ah.AlertObjects.EntityCaption as [Triggering Object]
74 | , ah.AlertObjects.EntityDetailsUrl as [_linkfor_Triggering Object]
75 | , '4' as [_linkfor_ ]
76 |
77 | from Orion.AlertHistory ah
78 | where
79 | eventtype=0
80 | and ah.AlertObjects.EntityUri like ('%/Applications/ApplicationID='+'${applicationid}'+'%')
81 | )
82 |
83 | order by [_linkfor_ ], [Time] desc
84 |
--------------------------------------------------------------------------------
/SWQL/Node Alert History:
--------------------------------------------------------------------------------
1 | select
2 | 'Last 24 Hours' as [Time]
3 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
4 | , '' as [_linkfor_Alert Name]
5 | , CASE
6 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
7 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
8 | END AS [_iconfor_Alert Name]
9 | , '' as [Triggering Object]
10 | , '' as [_linkfor_Triggering Object]
11 | , '1' as [_linkfor_ ]
12 |
13 | from orion.AlertHistory ah
14 | where ah.EventType=0
15 | and ah.TimeStamp > addhour(-24,GETUTCDATE())
16 | and ah.AlertObjects.RelatedNodeID='${NodeID}'
17 | and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
18 |
19 | UNION ALL
20 |
21 | (
22 | select
23 | 'Last 7 days' as [Time]
24 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
25 | , '' as [_linkfor_Alert Name]
26 | , CASE
27 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
28 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
29 | END AS [_iconfor_Alert Name]
30 | , '' as [Triggering Object]
31 | , '' as [_linkfor_Triggering Object]
32 | , '2' as [_linkfor_ ]
33 |
34 | from orion.AlertHistory ah
35 | where ah.EventType=0
36 | and ah.TimeStamp > addday(-7,GETUTCDATE())
37 | and ah.AlertObjects.RelatedNodeID='${NodeID}'
38 | and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
39 | )
40 |
41 | Union ALL
42 |
43 | (
44 | select
45 | 'Last 30 Days' as [Time]
46 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
47 | , '' as [_linkfor_Alert Name]
48 | , CASE
49 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
50 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
51 | END AS [_iconfor_Alert Name]
52 | , '' as [Triggering Object]
53 | , '' as [_linkfor_Triggering Object]
54 | , '3' as [_linkfor_ ]
55 |
56 | from orion.AlertHistory ah
57 | where ah.EventType=0
58 | and ah.TimeStamp > addday(-30,GETUTCDATE())
59 | and ah.AlertObjects.RelatedNodeID='${NodeID}'
60 | and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
61 | )
62 |
63 | union all
64 |
65 | (select
66 | tostring(ToLocal(ah.Timestamp)) as [Time]
67 | , ah.AlertObjects.AlertConfigurations.Name as [Alert Name]
68 | , '/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(ah.AlertObjectID) as [_linkfor_Alert Name]
69 | , CASE
70 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 2 THEN '/Orion/images/ActiveAlerts/Critical.png'
71 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 3 THEN '/Orion/images/ActiveAlerts/Serious.png'
72 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 1 THEN '/Orion/images/ActiveAlerts/Warning.png'
73 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 0 THEN '/Orion/images/ActiveAlerts/InformationalAlert.png'
74 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 4 THEN '/Orion/images/ActiveAlerts/Notice.png'
75 | END AS [_iconfor_Alert Name]
76 | , ah.AlertObjects.EntityCaption as [Triggering Object]
77 | , ah.AlertObjects.EntityDetailsUrl as [_linkfor_Triggering Object]
78 | , '4' as [_linkfor_ ]
79 |
80 | from Orion.AlertHistory ah
81 | where
82 | eventtype=0
83 | and ah.AlertObjects.RelatedNodeID='${NodeID}'
84 | and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
85 | )
86 |
87 | order by [_linkfor_ ], [Time] desc
88 |
--------------------------------------------------------------------------------
/SWQL/Interface Alert History:
--------------------------------------------------------------------------------
1 | select
2 | 'Last 24 Hours' as [Time]
3 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
4 | , '' as [_linkfor_Alert Name]
5 | , CASE
6 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
7 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
8 | END AS [_iconfor_Alert Name]
9 | , '' as [Triggering Object]
10 | , '' as [_linkfor_Triggering Object]
11 | , '1' as [_linkfor_ ]
12 |
13 | from orion.AlertHistory ah
14 | where ah.EventType=0
15 | and ah.TimeStamp > addhour(-24,GETUTCDATE())
16 | and ah.AlertObjects.EntityUri like ('%/Interfaces/InterfaceID='+'${interfaceid}')
17 | --and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
18 |
19 | UNION ALL
20 |
21 | (
22 | select
23 | 'Last 7 days' as [Time]
24 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
25 | , '' as [_linkfor_Alert Name]
26 | , CASE
27 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
28 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
29 | END AS [_iconfor_Alert Name]
30 | , '' as [Triggering Object]
31 | , '' as [_linkfor_Triggering Object]
32 | , '2' as [_linkfor_ ]
33 |
34 | from orion.AlertHistory ah
35 | where ah.EventType=0
36 | and ah.TimeStamp > addday(-7,GETUTCDATE())
37 | and ah.AlertObjects.EntityUri like ('%/Interfaces/InterfaceID='+'${interfaceid}')
38 | --and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
39 | )
40 |
41 | Union ALL
42 |
43 | (
44 | select
45 | 'Last 30 Days' as [Time]
46 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
47 | , '' as [_linkfor_Alert Name]
48 | , CASE
49 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
50 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
51 | END AS [_iconfor_Alert Name]
52 | , '' as [Triggering Object]
53 | , '' as [_linkfor_Triggering Object]
54 | , '3' as [_linkfor_ ]
55 |
56 | from orion.AlertHistory ah
57 | where ah.EventType=0
58 | and ah.TimeStamp > addday(-30,GETUTCDATE())
59 | and ah.AlertObjects.EntityUri like ('%/Interfaces/InterfaceID='+'${interfaceid}')
60 | --and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
61 | )
62 |
63 | union all
64 |
65 | (select
66 | tostring(ToLocal(ah.Timestamp)) as [Time]
67 | , ah.AlertObjects.AlertConfigurations.Name as [Alert Name]
68 | , '/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(ah.AlertObjectID) as [_linkfor_Alert Name]
69 | , CASE
70 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 2 THEN '/Orion/images/ActiveAlerts/Critical.png'
71 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 3 THEN '/Orion/images/ActiveAlerts/Serious.png'
72 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 1 THEN '/Orion/images/ActiveAlerts/Warning.png'
73 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 0 THEN '/Orion/images/ActiveAlerts/InformationalAlert.png'
74 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 4 THEN '/Orion/images/ActiveAlerts/Notice.png'
75 | END AS [_iconfor_Alert Name]
76 | , ah.AlertObjects.EntityCaption as [Triggering Object]
77 | , ah.AlertObjects.EntityDetailsUrl as [_linkfor_Triggering Object]
78 | , '4' as [_linkfor_ ]
79 |
80 | from Orion.AlertHistory ah
81 | where
82 | eventtype=0
83 | and ah.AlertObjects.EntityUri like ('%/Interfaces/InterfaceID='+'${interfaceid}')
84 | --and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
85 | )
86 |
87 | order by [_linkfor_ ], [Time] desc
88 |
--------------------------------------------------------------------------------
/IISLogParser.ps1:
--------------------------------------------------------------------------------
1 | # needs to be run with elevated permissions to access IIS log directories
2 |
3 | # how far back in hours do we want to review logs?
4 | $duration = 48
5 |
6 | if(!$creds) {$creds = Get-Credential}
7 | $sites = get-iissite
8 | $ParsedLogs = [System.Collections.Generic.List[System.Object]]::new()
9 | foreach($site in $sites ) {
10 | Write-host " Checking $site Logs" -foregroundcolor Green
11 | $logDir = $site.logfile.directory + "\w3svc" + $site.id
12 | Write-host " $logDir" -foregroundcolor DarkGray
13 | $logs = Get-ChildItem -Path $logDir | Where-Object {$_.LastWriteTime -ge [DateTime]::Now.Addhours(-$duration)}
14 |
15 | ForEach ($log in $logs) {
16 |
17 | Write-host " Parsing $($log.fullname)" -foregroundcolor DarkGreen
18 |
19 | $results = @(
20 | Select-String $log -Pattern ' GET ', ' POST ' |
21 | where { $_ -match "^(?\S+ \S+) \S+ \S+ \S+ (?\S+) (?\S+ \S+) \d+ (?\S+) (?\S+) \S+ \S+ \S+ \S+ \S+ (?\S+) \S+ \S+ (?\d+) (?\d+) (?\d+)" } |
22 | foreach {
23 | new-object PSObject –Property @{
24 | Server = $server
25 | Timestamp = $matches['Timestamp']
26 | Method = $matches['Method']
27 | URIQuery = ($matches['URIQuery']).Replace(' ','?')
28 | User = $matches['User']
29 | IP = $matches['IP']
30 | Response = $matches['Response']
31 | ServerBytesSent = [int]$matches['ServerBytesSent']
32 | ClientBytesSent = [int]$matches['ClientBytesSent']
33 | MS = [int]$matches['MS']
34 | } } )
35 | $ParsedLogs.Add($results)
36 | }
37 | }
38 |
39 |
40 | # Examples of using the data
41 |
42 | # most frequently requested pages
43 | $ParsedLogs.URIQuery | where-object {$_ -like "*.aspx*" }| group-object | sort-object -Property "Count" -Descending | select -first 20 | ft -Property ("Count", "Name");
44 |
45 | # most frequent User
46 | #$ParsedLogs.User | group-object | sort-object -Property "Count" -Descending | select -first 10 | ft -Property ("Count", "Name");
47 |
48 | # most frequent IP
49 | #$ParsedLogs.IP | group-object | sort-object -Property "Count" -Descending | select -first 10 | ft -Property ("Count", "Name");
50 |
51 | <# URI with the longest total amounts of time, this number can be affected by the client side as well as the server execution time and pages with more requests will obviously have high numbers here.
52 |
53 | $aggs = [System.Collections.Generic.List[System.Object]]::new()
54 | foreach($obj in $parsedlogs) {
55 | foreach($row in $obj) {
56 | if($row.uriquery -notin $aggs.uriquery) {
57 | "Adding new row for $($row.uriquery)"
58 | $new = new-object PSObject –Property @{
59 | URIQuery = $row.uriquery
60 | TotalMS = $row.ms
61 | }
62 | $aggs.add($new)
63 | } else {
64 | $index = $aggs.IndexOf($row.uriquery)
65 | $aggs[$index].TotalMS = ($aggs[$index].TotalMS + $row.ms)
66 | "Incrementing $($row.uriquery) by $($row.ms) ms to get $($aggs[$index].TotalMS) ms"
67 | }
68 | }
69 | }
70 |
71 | $aggs | sort-object -property totalms -Descending | select -first 10 | ft -Property ("totalms", "uriquery");
72 |
73 | #>
74 |
--------------------------------------------------------------------------------
/SWQL/Volume Alert History:
--------------------------------------------------------------------------------
1 | select
2 | 'Last 24 Hours' as [Time]
3 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
4 | , '' as [_linkfor_Alert Name]
5 | , CASE
6 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
7 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
8 | END AS [_iconfor_Alert Name]
9 | , '' as [Triggering Object]
10 | , '' as [_linkfor_Triggering Object]
11 | , '1' as [_linkfor_ ]
12 |
13 | from orion.AlertHistory ah
14 | where ah.EventType=0
15 | and ah.TimeStamp > addhour(-24,GETUTCDATE())
16 | and ah.AlertObjects.entityuri like ('%/Volumes/VolumeID=' + '${volumeid}' + '%')
17 | --and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
18 |
19 | UNION ALL
20 |
21 | (
22 | select
23 | 'Last 7 days' as [Time]
24 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
25 | , '' as [_linkfor_Alert Name]
26 | , CASE
27 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
28 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
29 | END AS [_iconfor_Alert Name]
30 | , '' as [Triggering Object]
31 | , '' as [_linkfor_Triggering Object]
32 | , '2' as [_linkfor_ ]
33 |
34 | from orion.AlertHistory ah
35 | where ah.EventType=0
36 | and ah.TimeStamp > addday(-7,GETUTCDATE())
37 | and ah.AlertObjects.entityuri like ('%/Volumes/VolumeID=' + '${volumeid}' + '%')
38 | --and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
39 | )
40 |
41 | Union ALL
42 |
43 | (
44 | select
45 | 'Last 30 Days' as [Time]
46 | , concat(count(ah.AlertHistoryID),' Alerts') as [Alert Name]
47 | , '' as [_linkfor_Alert Name]
48 | , CASE
49 | WHEN count(ah.AlertHistoryID) > 0 THEN '/Orion/images/StatusIcons/Small-Warning.gif'
50 | ELSE '/Orion/images/StatusIcons/Small-Up.gif'
51 | END AS [_iconfor_Alert Name]
52 | , '' as [Triggering Object]
53 | , '' as [_linkfor_Triggering Object]
54 | , '3' as [_linkfor_ ]
55 |
56 | from orion.AlertHistory ah
57 | where ah.EventType=0
58 | and ah.TimeStamp > addday(-30,GETUTCDATE())
59 | and ah.AlertObjects.entityuri like ('%/Volumes/VolumeID=' + '${volumeid}' + '%')
60 | --and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
61 | )
62 |
63 | union all
64 |
65 | (select
66 | tostring(ToLocal(ah.Timestamp)) as [Time]
67 | , ah.AlertObjects.AlertConfigurations.Name as [Alert Name]
68 | , '/Orion/NetPerfMon/ActiveAlertDetails.aspx?NetObject=AAT:'+ToString(ah.AlertObjectID) as [_linkfor_Alert Name]
69 | , CASE
70 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 2 THEN '/Orion/images/ActiveAlerts/Critical.png'
71 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 3 THEN '/Orion/images/ActiveAlerts/Serious.png'
72 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 1 THEN '/Orion/images/ActiveAlerts/Warning.png'
73 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 0 THEN '/Orion/images/ActiveAlerts/InformationalAlert.png'
74 | WHEN ah.AlertObjects.AlertConfigurations.Severity = 4 THEN '/Orion/images/ActiveAlerts/Notice.png'
75 | END AS [_iconfor_Alert Name]
76 | , ah.AlertObjects.EntityCaption as [Triggering Object]
77 | , ah.AlertObjects.EntityDetailsUrl as [_linkfor_Triggering Object]
78 | , '4' as [_linkfor_ ]
79 |
80 | from Orion.AlertHistory ah
81 | where
82 | eventtype=0
83 | and ah.AlertObjects.entityuri like ('%/Volumes/VolumeID=' + '${volumeid}' + '%')
84 | --and ah.AlertObjects.AlertConfigurations.Name like '%${SEARCH_STRING}%'
85 | )
86 |
87 | order by [_linkfor_ ], [Time] desc
88 |
--------------------------------------------------------------------------------
/CredentialManagement.ps1:
--------------------------------------------------------------------------------
1 | $orionhostname = "localhost"
2 |
3 |
4 |
5 | <# This is one methos of storing secure credentials as files on the server#>
6 |
7 | # Gather the necessary credentials from files
8 | $tokenDir = ([Environment]::Getfolderpath("User")) + "\ScriptTokens"
9 | if((test-path $tokenDir) -eq $false) { mkdir -path $tokenDir }
10 |
11 | # Powershell Invoke-SqlCmd does not allow for specifying alternate accounts when using AD based logins to SQL, will pass through the cred of the current user
12 | # Would be able to use specified SQL local accounts if desired
13 | #$credTypes = ("OrionApi","SqlServer")
14 |
15 | $credTypes = ("OrionApi","WMI")
16 | foreach($credType in $credTypes) {
17 | $tokens = @( (Get-ChildItem -Path "$tokenDir/*" -filter "$($credType)_*").Name )
18 | # Check for existing token file, will only try to use the first file for each type
19 | if(($tokens[0].length) -eq 0) {
20 | if( $scriptMode -like "interactive*" ) {
21 | "Please provide a credential for $credType..."
22 | Start-Sleep -seconds 2
23 | $credential = get-credential
24 | $userCleanup = ($credential.UserName).replace('\','_')
25 | $credential.Password | ConvertFrom-SecureString | Set-Content -Path "$tokendir\$($credType)_$userCleanup"
26 | } else {
27 | "Missing credential file, run script interactively to create credential file"
28 | }
29 | }
30 | }
31 |
32 | # populate credentials object
33 | $creds = [pscustomobject]@{
34 | OrionApi = $null
35 | SqlServer = $null
36 | WMI = $null
37 | }
38 |
39 | foreach($credType in $credTypes) {
40 | $tokens = @( (Get-ChildItem -Path "$tokenDir/*" -filter "$($credType)_*").Name )
41 | # Check for existing token file
42 | if(($tokens[0].length) -ne 0) {
43 | # Found a matching credential file, will only use the first match per credType
44 | $tokenFile = "$tokenDir\$($tokens[0])"
45 | $credUser = [string]$tokens[0].replace("$($credType)_","").replace('_','\')
46 |
47 | [securestring]$tokenString = Get-Content $tokenFile | ConvertTo-SecureString
48 | $cred = New-Object System.Management.Automation.PSCredential ($credUser, $tokenString)
49 | if( $credType -eq "OrionApi" ) { $creds.OrionApi = $cred }
50 | if( $credType -eq "SqlServer" ) { $creds.SqlServer = $cred }
51 | if( $credType -eq "WMI" ) { $creds.WMI = $cred }
52 | }
53 | }
54 |
55 | # Only checking for the Orion creds since we use pass through AD creds for SQL
56 | #if( $creds.OrionApi.GetType().Name -ne "PSCredential" -or $creds.SqlServer.GetType().Name -ne "PSCredential" ) {
57 | # spot check that we have the necessary creds for Orion and SQL
58 | if( $creds.OrionApi.GetType().Name -ne "PSCredential" ) {
59 | "Invalid Credential file, please review contents of $tokenDir"
60 | Stop-Transcript
61 | exit 1
62 | }
63 |
64 | # create a connection to the SolarWinds API
65 | $swis = connect-swis -host $orionhostname -credential $($creds.OrionApi)
66 | $swisTest = get-swisdata $swis "SELECT TOP 1 servername FROM Orion.Websites"
67 |
68 | "Testing Connection to Orion"
69 | if ( !$swisTest ) {
70 | "Unable to connect to Orion server $orionhostname as $($creds.OrionApi.UserName)"
71 | Stop-Transcript
72 | exit 1
73 | }
74 |
75 | "Connected to $orionhostname successfully as $($creds.OrionApi.UserName)"
76 |
77 | $credentialToChange = Get-SwisData $swis "SELECT ID, Name FROM Orion.Credential where Name = '$($creds.WMI.UserName)'"
78 |
79 | $results = Invoke-SwisVerb $swis Orion.Credential UpdateUsernamePasswordCredentials @($($credentialToChange.Id), "$($creds.WMI.UserName)", "$($creds.WMI.UserName)", "($creds.WMI).GetNetworkCredential().Password" )
80 |
81 | if( $results.nil -eq $true ) {
82 | "Credential successfully changed for $($creds.WMI.UserName)"
83 | }
--------------------------------------------------------------------------------
/SWQL/IPAM Correlation:
--------------------------------------------------------------------------------
1 | SELECT --node level
2 | '' as [ ]
3 | , concat(n.nodeid,' ',1) as [_linkfor_ ]
4 | , 'Node' as ObjectType
5 | , n.Caption as Object
6 | , n.DetailsUrl as [_linkfor_Object]
7 | , si.StatusName as Status
8 | ,'/Orion/images/StatusIcons/Small-' + n.StatusIcon as [_iconfor_Status]
9 | , n.LastSync as LastPolled
10 | , concat(n.vendor, ' - ',n.MachineType) as ExtraInfo
11 |
12 | from orion.nodes n
13 | join orion.StatusInfo si on si.StatusId=n.Status
14 | where n.nodeid=${nodeid}
15 |
16 | UNION (-- ipam addresses
17 | SELECT
18 | '' as [ ]
19 | , concat(n.nodeid,' ',2) as [_linkfor_ ]
20 | , concat('IPAM ',ip.IPType,' Address') as ObjectType
21 | , isnull(ip.IPAddress ,'Not in IPAM') as Object
22 | , ip.DetailsUrl as [_linkfor_Object]
23 | , ip.IPStatus as Status
24 | , isnull(('/Orion/IPAM/res/images/sw/icon.ip.'+ ip.IPStatus +'.gif'),'/Orion/images/StatusIcons/Small-Down.gif') as [_iconfor_Status]
25 | , ip.LastSync as LastScanned
26 | , concat(ip.Comments,'') as ExtraInfo
27 |
28 | from orion.nodes n
29 | left join IPAM.IPNodeReport ip on n.ip=ip.IPAddress
30 | where n.nodeid=${nodeid}
31 | )
32 |
33 | UNION ( --DHCP
34 | SELECT
35 | '' as [ ]
36 | , concat(n.nodeid,' ',3) as [_linkfor_ ]
37 | , 'DHCP' as ObjectType
38 | , isnull(lease.ClientName,'Not in Monitored DHCP') as Object
39 | , ip.DetailsUrl as [_linkfor_Object]
40 | , ip.IPStatus as Status
41 | , isnull(('/Orion/IPAM/res/images/sw/icon.ip.'+ ip.IPStatus +'.gif'),'/Orion/images/StatusIcons/Small-Down.gif') as [_iconfor_Status]
42 | , ip.LastSync as LastScanned
43 | , case when lease.ReservationType is not null then concat('Reservation ',lease.ClientMAC) else '' end as ExtraInfo
44 |
45 | from orion.nodes n
46 | join ipam.IPNodeReport ip on n.ip=ip.IPAddress and n.nodeid=${nodeid}
47 | left join IPAM.DhcpLease lease on lease.ClientIpAddress=ip.IPAddress
48 | where ip.IPType = 'Dynamic'
49 | and n.nodeid=${nodeid}
50 | )
51 |
52 | UNION ( --DNS
53 | SELECT distinct
54 | '' as [ ]
55 | , concat(n.nodeid,' ',4) as [_linkfor_ ]
56 | , 'DNS Host Record' as ObjectType
57 | , isnull(dns.data,'Not in Monitored DNS') as Object
58 | , ip.DetailsUrl as [_linkfor_Object]
59 | , case when dns.name is null then '' when dns.name like '%'+n.caption+'%' then 'Matched' else 'Possible DNS Mismatch' end as Status
60 | , case when dns.name is null then '' when dns.name like '%'+n.caption+'%' then '/Orion/images/ActiveAlerts/Check.png' else '/Orion/images/ActiveAlerts/Serious.png' end as [_iconfor_Status]
61 | , ds.LastDiscovery as LastScanned
62 | , case when dns.name is not null then concat('Record ',dns.name, ' in zone ', dz.Name) else '' end as ExtraInfo
63 |
64 | FROM orion.nodes n
65 | join ipam.IPNodeReport ip on n.ip=ip.IPAddress and n.nodeid=${nodeid}
66 | left join IPAM.DnsRecordReport dns on dns.Data=ip.IPAddress and dns.type in (1)
67 | left join ipam.DnsZone dz on dz.DnsZoneId=dns.DnsZoneId
68 | left join (select top 1 ds.NodeId, max(ds.LastDiscovery) as LastDiscovery from IPAM.DnsServer ds group by ds.nodeid order by max(ds.LastDiscovery) desc ) ds on ds.NodeId=dz.NodeId
69 | where n.nodeid=${nodeid}
70 | )
71 |
72 | UNION ( --subnets
73 | SELECT
74 | '' as [ ]
75 | , concat(n.nodeid,' ',5) as [_linkfor_ ]
76 | , 'IPAM ' + isnull(sub.GroupTypeText,'') + ' Group' as ObjectType
77 | , isnull(sub.FriendlyName,'Not in IPAM') as Object
78 | , sub.DetailsUrl as [_linkfor_Object]
79 | , sub.StatusShortDescription as Status
80 | , '/Orion/IPAM/res/images/sw/icon.subnet.'+ sub.StatusShortDescription +'.gif' as [_iconfor_Status]
81 | , sub.LastDiscovery as LastScanned
82 | , case when sub.friendlyname is null then '' else concat(sub.UsedCount, '/', sub.AllocSize, ' used, VLAN ', isnull(sub.VLAN,'Unknown') , ', Comment ', sub.Comments ) end as ExtraInfo
83 |
84 | from orion.nodes n
85 | join IPAM.IPNodeReport ip on n.ip=ip.IPAddress
86 | left join ipam.GroupReport sub on sub.GroupId = ip.SubnetId
87 | where n.nodeid=${nodeid}
88 | )
89 |
90 | order by [_linkfor_ ]
91 |
--------------------------------------------------------------------------------
/SWQL/LUN Performance Stats:
--------------------------------------------------------------------------------
1 | SELECT Name
2 | , RaidType
3 | , round(IOPSTotal,0) as [IOPS Total]
4 | , round(IOPSRead,0) as [IOPS Read]
5 | , round(IOPSWrite,0) as [IOPS Write]
6 | , round(IOPSOther,0) as [IOPS Other]
7 | , round(BytesPSTotal/1000000,1) as [MBytes/sec Total]
8 | , round(BytesPSRead/1000000,1) as [MBytes/sec Read]
9 | , round(BytesPSWrite/1000000,1) as [MBytes/sec Write]
10 | , round(IOLatencyTotal,0) as [Latency Total]
11 | , round(IOLatencyRead,0) as [Latency Read]
12 | , round(IOLatencyWrite,0) as [Latency Write]
13 | , round(IOLatencyOther,0) as [Latency Other]
14 | , QueueLength
15 | , DetailsUrl as [_linkfor_Name]
16 | ,case when IOPSTotal>l.IOPSTOTALTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
17 | when IOPSTotal>l.IOPSTOTALTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
18 | else '/Orion/images/StatusIcons/Small-Up.gif'
19 | end as [_iconfor_IOPS Total]
20 | ,case when IOPSRead>l.IOPSReadTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
21 | when IOPSRead>l.IOPSReadTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
22 | else '/Orion/images/StatusIcons/Small-Up.gif'
23 | end as [_iconfor_IOPS Read]
24 | ,case when IOPSWrite>l.IOPSWriteTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
25 | when IOPSWrite>l.IOPSWriteTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
26 | else '/Orion/images/StatusIcons/Small-Up.gif'
27 | end as [_iconfor_IOPS Write]
28 | ,case when IOPSOther>l.IOPSOtherTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
29 | when IOPSOther>l.IOPSOtherTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
30 | else '/Orion/images/StatusIcons/Small-Up.gif'
31 | end as [_iconfor_IOPS Other]
32 | ,case when BytesPSTotal>l.BytesPSTotalTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
33 | when BytesPSTotal>l.BytesPSTotalTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
34 | else '/Orion/images/StatusIcons/Small-Up.gif'
35 | end as [_iconfor_MBytes/sec Total]
36 | ,case when BytesPSRead>l.BytesPSReadTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
37 | when BytesPSRead>l.BytesPSReadTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
38 | else '/Orion/images/StatusIcons/Small-Up.gif'
39 | end as [_iconfor_MBytes/sec Read]
40 | ,case when BytesPSWrite>l.BytesPSWriteTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
41 | when BytesPSWrite>l.BytesPSWriteTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
42 | else '/Orion/images/StatusIcons/Small-Up.gif'
43 | end as [_iconfor_MBytes/sec Write]
44 | ,case when IOLatencyTotal>l.IOLatencyTotalTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
45 | when IOLatencyTotal>l.IOLatencyTotalTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
46 | else '/Orion/images/StatusIcons/Small-Up.gif'
47 | end as [_iconfor_Latency Total]
48 | ,case when IOLatencyRead>l.IOLatencyReadTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
49 | when IOLatencyRead>l.IOLatencyReadTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
50 | else '/Orion/images/StatusIcons/Small-Up.gif'
51 | end as [_iconfor_Latency Read]
52 | ,case when IOLatencyWrite>l.IOLatencyWriteTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
53 | when IOLatencyWrite>l.IOLatencyWriteTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
54 | else '/Orion/images/StatusIcons/Small-Up.gif'
55 | end as [_iconfor_Latency Write]
56 | ,case when IOLatencyOther>l.IOLatencyOtherTHRESHOLD.Level2Value THEN '/Orion/images/ActiveAlerts/Critical.png'
57 | when IOLatencyOther>l.IOLatencyOtherTHRESHOLD.Level1Value THEN '/Orion/images/ActiveAlerts/Warning.png'
58 | else '/Orion/images/StatusIcons/Small-Up.gif'
59 | end as [_iconfor_Latency Other]
60 |
61 | FROM Orion.SRM.LUNs l
62 | where name like '%${SEARCH_STRING}%'
63 |
--------------------------------------------------------------------------------
/SWQL/Node IPAM:
--------------------------------------------------------------------------------
1 | SELECT --node level
2 | '' as [ ]
3 | , concat(n.nodeid,' ',1) as [_linkfor_ ]
4 | , 'Node' as ObjectType
5 | , n.Caption as Object
6 | , n.DetailsUrl as [_linkfor_Object]
7 | , si.StatusName as Status
8 | ,'/Orion/images/StatusIcons/Small-' + n.StatusIcon as [_iconfor_Status]
9 | , n.LastSync as LastPolled
10 | , concat(n.vendor, ' - ',n.MachineType) as ExtraInfo
11 |
12 | from orion.nodes n
13 | join orion.StatusInfo si on si.StatusId=n.Status
14 | where n.nodeid=${nodeid} and n.caption like '%${SEARCH_STRING}%'
15 |
16 | UNION (-- ipam addresses
17 | SELECT
18 | '' as [ ]
19 | , concat(n.nodeid,' ',2) as [_linkfor_ ]
20 | , concat('IPAM ',ip.IPType,' Address') as ObjectType
21 | , isnull(ip.IPAddress ,'Not in IPAM') as Object
22 | , ip.DetailsUrl as [_linkfor_Object]
23 | , ip.IPStatus as Status
24 | , isnull(('/Orion/IPAM/res/images/sw/icon.ip.'+ ip.IPStatus +'.gif'),'/Orion/images/StatusIcons/Small-Down.gif') as [_iconfor_Status]
25 | , ip.LastSync as LastScanned
26 | , concat(ip.Comments,'') as ExtraInfo
27 |
28 | from orion.nodes n
29 | left join IPAM.IPNodeReport ip on n.ip=ip.IPAddress
30 | where n.nodeid=${nodeid} and n.caption like '%${SEARCH_STRING}%'
31 | )
32 |
33 | UNION ( --DHCP
34 | SELECT
35 | '' as [ ]
36 | , concat(n.nodeid,' ',3) as [_linkfor_ ]
37 | , 'DHCP' as ObjectType
38 | , isnull(lease.ClientName,'Not in Monitored DHCP') as Object
39 | , ip.DetailsUrl as [_linkfor_Object]
40 | , ip.IPStatus as Status
41 | , isnull(('/Orion/IPAM/res/images/sw/icon.ip.'+ ip.IPStatus +'.gif'),'/Orion/images/StatusIcons/Small-Down.gif') as [_iconfor_Status]
42 | , ip.LastSync as LastScanned
43 | , case when lease.ReservationType is not null then concat('Reservation ',lease.ClientMAC) else '' end as ExtraInfo
44 |
45 | from orion.nodes n
46 | join ipam.IPNodeReport ip on n.ip=ip.IPAddress and n.nodeid=${nodeid}
47 | left join IPAM.DhcpLease lease on lease.ClientIpAddress=ip.IPAddress
48 | where ip.IPType = 'Dynamic'
49 | and n.nodeid=${nodeid} and n.caption like '%${SEARCH_STRING}%'
50 | )
51 |
52 | UNION ( --DNS
53 | SELECT distinct
54 | '' as [ ]
55 | , concat(n.nodeid,' ',4) as [_linkfor_ ]
56 | , 'DNS Host Record' as ObjectType
57 | , isnull(dns.data,'Not in Monitored DNS') as Object
58 | , ip.DetailsUrl as [_linkfor_Object]
59 | , case when dns.name is null then '' when dns.name like '%'+n.caption+'%' then 'Matched' else 'Possible DNS Mismatch' end as Status
60 | , case when dns.name is null then '' when dns.name like '%'+n.caption+'%' then '/Orion/images/ActiveAlerts/Check.png' else '/Orion/images/ActiveAlerts/Serious.png' end as [_iconfor_Status]
61 | , ds.LastDiscovery as LastScanned
62 | , case when dns.name is not null then concat('Record ',dns.name, ' in zone ', dz.Name) else '' end as ExtraInfo
63 |
64 | FROM orion.nodes n
65 | join ipam.IPNodeReport ip on n.ip=ip.IPAddress and n.nodeid=${nodeid}
66 | left join IPAM.DnsRecordReport dns on dns.Data=ip.IPAddress and dns.type in (1)
67 | left join ipam.DnsZone dz on dz.DnsZoneId=dns.DnsZoneId
68 | left join (select top 1 ds.NodeId, max(ds.LastDiscovery) as LastDiscovery from IPAM.DnsServer ds group by ds.nodeid order by max(ds.LastDiscovery) desc ) ds on ds.NodeId=dz.NodeId
69 | where n.nodeid=${nodeid} and n.caption like '%${SEARCH_STRING}%'
70 | )
71 |
72 | UNION ( --subnets
73 | SELECT
74 | '' as [ ]
75 | , concat(n.nodeid,' ',5) as [_linkfor_ ]
76 | , 'IPAM ' + isnull(sub.GroupTypeText,'') + ' Group' as ObjectType
77 | , isnull(sub.FriendlyName,'Not in IPAM') as Object
78 | , sub.DetailsUrl as [_linkfor_Object]
79 | , sub.StatusShortDescription as Status
80 | , '/Orion/IPAM/res/images/sw/icon.subnet.'+ sub.StatusShortDescription +'.gif' as [_iconfor_Status]
81 | , sub.LastDiscovery as LastScanned
82 | , case when sub.friendlyname is null then '' else concat(sub.UsedCount, '/', sub.AllocSize, ' used, VLAN ', isnull(sub.VLAN,'Unknown') , ', Comment ', sub.Comments ) end as ExtraInfo
83 |
84 | from orion.nodes n
85 | join IPAM.IPNodeReport ip on n.ip=ip.IPAddress
86 | left join ipam.GroupReport sub on sub.GroupId = ip.SubnetId
87 | where n.nodeid=${nodeid} and n.caption like '%${SEARCH_STRING}%'
88 | )
89 |
90 | order by [_linkfor_ ]
91 |
--------------------------------------------------------------------------------
/ResourceImporter.ps1:
--------------------------------------------------------------------------------
1 | <#------------- FUNCTIONS -------------#>
2 | Function Set-SwisConnection {
3 | Param(
4 | [Parameter(Mandatory=$true, HelpMessage = "What SolarWinds server are you connecting to (Hostname or IP)?" ) ] [string] $solarWindsServer,
5 | [Parameter(Mandatory=$true, HelpMessage = "Do you want to use the credentials from PowerShell [Trusted], or a new login [Explicit]?" ) ] [ ValidateSet( 'Trusted', 'Explicit' ) ] [ string ] $connectionType,
6 | [Parameter(HelpMessage = "Which credentials should we use for an explicit logon type" ) ] $creds
7 | )
8 |
9 | IF ( $connectionType -eq 'Trusted' ) {
10 | $swis = Connect-Swis -Trusted -Hostname $solarWindsServer
11 | } ELSEIF(!$creds) {
12 | $creds = Get-Credential -Message "Please provide a Domain or Local Login for SolarWinds"
13 | $swis = Connect-Swis -Credential $creds -Hostname $solarWindsServer
14 | } ELSE {
15 | $swis = Connect-Swis -Credential $creds -Hostname $solarWindsServer
16 | }
17 |
18 | RETURN $swis
19 | }
20 |
21 | <#------------- ACTUAL SCRIPT -------------#>
22 | clear-host
23 |
24 | $now = Get-Date -Format "yyyyMMdd_HHmm"
25 | $script = $MyInvocation.MyCommand
26 | if($script.path){ $dir = Split-Path $script.path }
27 | else { $dir = [Environment]::GetFolderPath("Desktop") }
28 | $Logfile = "$dir\$($script.name)_$now.log"
29 |
30 | Start-Transcript -Path $Logfile -Append -IncludeInvocationHeader
31 |
32 | [void] [System.Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
33 |
34 | while(!$swistest) {
35 | $hostname = Read-Host -Prompt "what server should we connect to?"
36 | $connectionType = Read-Host -Prompt "Should we use the current powershell credentials [Trusted], or specify credentials [Explicit]?"
37 | $swis = Set-SwisConnection $hostname $connectionType
38 | $swistest = get-swisdata $swis "SELECT TOP 1 servername FROM Orion.Websites"
39 | }
40 |
41 | "Connected to $hostname Successfully using $connectiontype credentials"
42 |
43 | $quit = $null
44 | while ($quit -ne "Quit" ) {
45 |
46 | "`nPlease provide the resource to import"
47 | $quit = Read-Host 'Press Enter to select file to import, or type [Quit] to exit'
48 | switch -regex ($quit) {
49 | "quit" { "`n`nQuitting"; $quit="Quit" ; break}
50 |
51 | default {
52 | Add-Type -AssemblyName System.Windows.Forms
53 | $inputfolder = New-Object System.Windows.Forms.OpenFileDialog -Property @{
54 | InitialDirectory = [Environment]::GetFolderPath('Desktop')
55 | Filter = 'XML (*.xml)|*.xml'
56 | }
57 | $null = $inputfolder.ShowDialog()
58 | $inputfolder = $inputfolder.FileName
59 | "$inputfolder selected..."
60 |
61 | $resourceproperties = Import-Clixml ("$inputfolder")
62 |
63 | $viewid = Read-Host -Prompt "Which ViewID # should we add this resource to?"
64 |
65 | $resourceResults = Invoke-SwisVerb $swis Orion.Views AddResourceToView @($viewid, $ResourceProperties)
66 |
67 | "`nThese queries need to be run in SQL to finish cleaning Up"
68 | #$cleanup = Invoke-SwisVerb $swis 'Orion.Reporting' 'ExecuteSQL'
69 | @"
70 | update resourceproperties
71 | set propertyvalue = replace(replace(propertyvalue, 'linebreak', char(10)),'ampersand',char(38))
72 | where propertyvalue like '%linebreak%' or propertyvalue like '%ampersand%'
73 | ;
74 |
75 | update resources
76 | set resourcename = replace(replace(ResourceName,'ampersand',char(38)),'doublequotes',char(34)),
77 | resourcetitle = replace(replace(ResourceTitle,'ampersand',char(38)),'doublequotes',char(34)),
78 | resourcesubtitle = replace(replace(resourcesubtitle,'ampersand',char(38)),'doublequotes',char(34))
79 | where resourcename like '%ampersand%' or resourcetitle like '%ampersand%' or resourcesubtitle like
80 | '%ampersand%' or resourcename like '%doublequotes%' or resourcetitle like '%doublequotes%' or
81 | resourcesubtitle like '%doublequotes%'
82 | "@
83 |
84 |
85 |
86 | }
87 | }
88 | }
89 |
90 | "Finished"
91 |
92 | Stop-Transcript
93 |
--------------------------------------------------------------------------------