I'm running into an issue with getting results back from the NCM component of SolarWinds while using the API. This issue is the same when using the SWQL API or the SWIS API. My workflow is generally to build a query in SWQL Studio and use that query in an API request using the SWQL API. Also, I'll use the SWIS API where it makes sense, although I'm not really clear when to use this API as the documentation seems sparse. This workflow has been fine when using the Orion endpoint in SQWL Studio, e.g., Orion.AlertDefinitions but I've ran into issues when using the NCM endpoint, e.g., NCM.Nodes.
SWQL Studio Query that works and returns data:
<span class="s5">SELECT</span><span class="s0"> </span><span class="s5">TOP</span><span class="s0"> </span><span class="s4">10</span><span class="s0"> </span><span class="s11">I</span><span class="s10">.</span><span class="s11">EntityID</span><span class="s10">,</span><span class="s0"> </span><span class="s11">I</span><span class="s10">.</span><span class="s11">ChassisType</span><span class="s10">,</span><span class="s0"> </span><span class="s11">I</span><span class="s10">.</span><span class="s11">ChassisName</span><span class="s10">,</span><span class="s0"> </span><span class="s11">I</span><span class="s10">.</span><span class="s11">ChassisVersion</span><span class="s10">,</span><span class="s0"> </span><span class="s11">I</span><span class="s10">.</span><span class="s11">ChassisID</span><span class="s10">,</span><span class="s0"> </span><span class="s11">I</span><span class="s10">.</span><span class="s11">ChassisSerialNumberString</span><span class="s10">,</span><span class="s0"> </span><span class="s11">I</span><span class="s10">.</span><span class="s11">FirstDiscovery</span><span class="s10">,</span><span class="s0"> </span><span class="s11">EntityID</span><span class="s10">,</span><span class="s0"> </span><span class="s11">I</span><span class="s10">.</span><span class="s11">NodeID</span><span class="s0"> </span><span class="s5">FROM</span><span class="s0"> </span><span class="s11">NCM</span><span class="s10">.</span><span class="s11">CiscoChassis</span><span class="s0"> </span><span class="s11">I</span>
Snippet of python code using the same query in an API call that doesn't work:
<span># Initiate API request object</span>
<span>base_url</span><span> </span><span>=</span><span> </span><span>auth</span><span>.</span><span>get_url</span><span>(</span><span>2414</span><span>)</span>
<span>headers</span><span> </span><span>=</span><span> {</span>
<span> </span><span>'Authorization'</span><span>: </span><span>f</span><span>"Basic </span><span>{</span><span>creds</span><span>}</span><span>"</span><span>,</span>
<span> </span><span>'Accept'</span><span>: </span><span>'application/json'</span>
<span>}</span>
<span>requests</span><span> </span><span>=</span><span> </span><span>request_manager</span><span>.</span><span>request_manager</span><span>(</span><span>base_url</span><span>=</span><span>base_url</span><span>, </span><span>headers</span><span>=</span><span>headers</span><span>)</span>
<span># Build SWQL query</span>
<span>query</span><span> </span><span>=</span><span> [</span><span>'SELECT TOP 10 I.EntityID, I.ChassisType, I.ChassisName, I.ChassisVersion, I.ChassisID, I.ChassisSerialNumberString, I.FirstDiscovery'</span><span>]</span>
<span>query</span><span> </span><span>=</span><span> </span><span>","</span><span>.</span><span>join</span><span>(</span><span>query</span><span>)</span>
<span># Make API request and display results</span>
<span>endpoint</span><span> </span><span>=</span><span> </span><span>f</span><span>"Query?query=</span><span>{</span><span>query</span><span>}</span><span> FROM NCM.CiscoChassis I"</span>
<span>r</span><span> </span><span>=</span><span> </span><span>requests</span><span>.</span><span>request</span><span>(</span><span>endpoint</span><span>=</span>endpoint, method = 'GET')
<span>print</span><span>(</span><span>json</span><span>.</span><span>dumps</span><span>(</span><span>r</span><span>.</span><span>json</span><span>(), </span><span>indent</span><span>=</span><span>4</span><span>))</span>
</code></div><div><code><span>#Returns empty string</span>
{
"results": []
}
Using the same python API logic to make calls to Orion.{endpoint} works fine. The python code is basically the same as the orionsdk -- it's just a wrapper for the API using the request lib on the backend.