├── 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 | --------------------------------------------------------------------------------