4.3. Profiler Columns and GroupbysΒΆ

One of the key pieces of information NetProfiler keeps track of are all of the different Column types, and under what context they are appropriate. For instance, when running a Traffic Summary report, then time is not a valid column of data since this report type organizes its information in other ways.

Column types fall into two categories: keys and values. Keys are column types that represent the primary organization/grouping of the data, and values are all of the different calculations that can be made.

The contexts for columns that are available are defined by three values: realm, centricity, and groupby. A breakdown of how these three inter-relate is shown in the following table:

realm centricity groupby
traffic_summary hos,int all (except thu)
traffic_overall_time_series hos,int tim
traffic_flow_list hos hos
identity_list hos thu

As SteelScript develops further, this table and the available permutations will expand.

Let’s take a look at how these work a little more closely. Startup a new instance of your Python interpreter, similar to before:

$ python
Python 2.7.3 (default, Apr 19 2012, 00:55:09)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.

>>> from steelscript.netprofiler.core import NetProfiler
>>> from steelscript.common.service import UserAuth
>>> p = NetProfiler('$hostname', auth=UserAuth('$username', '$password'))

Now, lets investigate which columns are available for a specific type of report:

>>> realms = ['traffic_summary']
>>> centricities = ['hos']
>>> groupbys = ['hos']

>>> columns = p.search_columns(realms=realms, centricities=centricities, groupbys=groupbys)

Here we have setup three local variables, and passed them as arguments to the search_columns() method on our netprofiler object. Note the brackets around each of the definitions we made, those mean we created a list object for all three variables. In this case, the list contains only a single object, the string.

Let’s take a look at what that method returned:

>>> len(columns)
146

So, a total of 146 columns can be chosen for a report with those three filters! Note your specific number may vary here, depending on the specific version of Profiler you are running.

>>> columns[:2]
[<Column(cid=31, key=total_pkts, iskey=False label=Total Packets)>,
 <Column(cid=427, key=in_avg_conns_rsts, iskey=False label=Avg Resets/s (Rx))>]

This command uses slicing to show only the first two elements of the list. Notice these are objects themselves, with quite a bit of information associated with each one. These objects are used extensively within netprofiler, but the main thing to keep in mind is that you can refer to columns by their text value (the ‘key’ attribute), by index value (the ‘cid’ attribute in the example above), or by the actual object itself.

Another way to access one of the columns, is through the netprofiler object as an attribute:

>>> print p.columns.value.total_pkts
<Column(cid=31, key=total_pkts, iskey=False label=Total Packets)>

>>> print p.columns.key.time
<Column(cid=98, key=time, iskey=True label=Time)>

To see the complete list of all column keys you could enter the following:

>>> print p.columns.keys
[...long list of objects...]

>>> print p.columns.values
[...long list of objects...]