I have added support for aruba networks controllers and access points.
I will attach my patch.
One thing which is a bit unusual is that the aruba access points don't have an SNMP agent themselves. Instead you can get information about each access point from the controller it is connected to. I added support for the access points in a similar manner to getting information about ports of a switch.
Solomon Seal
added a comment - Using this on a master and slave aruba 3400 controller, when viewing the "Access points" tab on the controller host page it show "noauth" on the graphs and if you click on the graph you get a "You do are not authorized to view this page" message. I am logged in as a level 10 user on SVN revision 3835.
Here is the url that I am not permitted to view:
http://observium/graphs/to=1364490153/type=accesspoints_numasoclients/from=1363885353/
and screenshots of the errors here: http://dl.dropbox.com/u/5551808/Screenshots/s.png and http://dl.dropbox.com/u/5551808/Screenshots/t.png
If this needs to be a new bug report let me know.
Because the OID contains the mac address of the AP in binary. If I don't use numeric APs, non-printable characters show up as periods (.) so multiple APs have the same index eg ..F.... So the numeric OIDs are necessary.
Ethan Sommer
added a comment - > Are the different RRDs optional?
I could probably put them all in one per AP.
>Why are you using numeric oids? this is weird :
Because the OID contains the mac address of the AP in binary . If I don't use numeric APs, non-printable characters show up as periods (.) so multiple APs have the same index eg ..F.... So the numeric OIDs are necessary.
Would you believe it, but I've just started to merge generate_port_link into generate_entity_link. (we're trying to do away with "entity-type" specific functions).
Don't worry though, I'll merge generate_ap_link and generate_ap_url at the same time.
Should be done in auth.inc.php, a 'graph category', like "port" or "sensor" is a grouping of things where the id passed is related to the same thing.
Are the different RRDs optional? Is there scope to merge any of them? Each RRD file we write involves at least a read to read the pointer, and a write to write the pointer, on top of the data writing.
And I just noticed, but the table should be called accesspoints, as the id field is "accesspoint_id" (it makes it easier to do a lot of other things later). It'd also be a good idea to make sure the same term is used everywhere in the code, i.e. ap vs accesspoint vs access_point, it gets hard to guess
Could you also attach a couple of rows from your database from the accesspoints table, and the matching rrds in a .tar.gz? So i can put them on the dev install and see how it looks.
I don't think anyone else has every committed anything which creates a new entity category before. It's hard work :>
adam.
Adam Armstrong
added a comment - Thanks!
Would you believe it, but I've just started to merge generate_port_link into generate_entity_link. (we're trying to do away with "entity-type" specific functions).
Don't worry though, I'll merge generate_ap_link and generate_ap_url at the same time.
And now...
This part:
$ap=accesspoint_by_id($id);
$device = device_by_id_cache($ap ['device_id'] );
$rrd_filename = $config ['rrd_dir'] . "/" . $device ['hostname'] ."/".
safename("arubaap-$ap [name] .$ap [radio_number] .nummonclients.rrd");
Should be done in auth.inc.php, a 'graph category', like "port" or "sensor" is a grouping of things where the id passed is related to the same thing.
Are the different RRDs optional? Is there scope to merge any of them? Each RRD file we write involves at least a read to read the pointer, and a write to write the pointer, on top of the data writing.
Why are you using numeric oids? this is weird :
$type =$aruba_apstats ["1.3.6.1.4.1.14823.2.2.1.5.2.1.5.1.2.$radioid"] [''] ;
And I just noticed, but the table should be called accesspoints, as the id field is "accesspoint_id" (it makes it easier to do a lot of other things later). It'd also be a good idea to make sure the same term is used everywhere in the code, i.e. ap vs accesspoint vs access_point, it gets hard to guess
Could you also attach a couple of rows from your database from the accesspoints table, and the matching rrds in a .tar.gz? So i can put them on the dev install and see how it looks.
I don't think anyone else has every committed anything which creates a new entity category before. It's hard work :>
adam.
People
Adam Armstrong
Ethan Sommer
Votes:
0Vote for this issue
Watchers:
3Start watching this issue
Dates
Created:
Updated:
Resolved:
1 of 1
{"searchers":{"groups":[{"searchers":[{"name":"Project","id":"project","key":"issue.field.project","isShown":true,"lastViewed":1755142446123},{"name":"Summary","id":"summary","key":"issue.field.summary","isShown":true},{"name":"Type","id":"issuetype","key":"issue.field.issuetype","isShown":true,"lastViewed":1755142446124},{"name":"Status","id":"status","key":"issue.field.status","isShown":true,"lastViewed":1755142446126},{"name":"Priority","id":"priority","key":"issue.field.priority","isShown":true},{"name":"Resolution","id":"resolution","key":"issue.field.resolution","isShown":true},{"name":"Creator","id":"creator","key":"issue.field.creator","isShown":true},{"name":"Affects Version","id":"version","key":"issue.field.affectsversions","isShown":true},{"name":"Fix Version","id":"fixfor","key":"issue.field.fixversions","isShown":true},{"name":"Component","id":"component","key":"issue.field.components","isShown":true},{"name":"% Limits","id":"workratio","key":"issue.field.workratio","isShown":true},{"name":"Link types","id":"issue_link_type","key":"issue.field.issuelinks","isShown":true},{"name":"Environment","id":"environment","key":"issue.field.environment","isShown":true},{"name":"Description","id":"description","key":"issue.field.description","isShown":true},{"name":"Comment","id":"comment","key":"issue.field.comment","isShown":true},{"name":"Label","id":"labels","key":"issue.field.labels","isShown":true,"lastViewed":1755142446128},{"name":"Query","id":"text","key":"text","isShown":true},{"name":"Business Value","id":"customfield_10009","key":"com.atlassian.jira.plugin.system.customfieldtypes:float","isShown":false},{"name":"Development","id":"customfield_10300","key":"com.atlassian.jira.plugins.jira-development-integration-plugin:devsummary","isShown":true},{"name":"Epic Colour","id":"customfield_10005","key":"com.pyxis.greenhopper.jira:gh-epic-color","isShown":false},{"name":"Epic Link","id":"customfield_10001","key":"com.pyxis.greenhopper.jira:gh-epic-link","isShown":true},{"name":"Epic Name","id":"customfield_10004","key":"com.pyxis.greenhopper.jira:gh-epic-label","isShown":true},{"name":"Epic Status","id":"customfield_10003","key":"com.pyxis.greenhopper.jira:gh-epic-status","isShown":false},{"name":"Epic/Theme","id":"customfield_10007","key":"com.atlassian.jira.plugin.system.customfieldtypes:labels","isShown":true},{"name":"Flagged","id":"customfield_10006","key":"com.atlassian.jira.plugin.system.customfieldtypes:multicheckboxes","isShown":true},{"name":"Original story points","id":"customfield_10403","key":"com.atlassian.jpo:jpo-custom-field-original-story-points","isShown":true},{"name":"Parent Link","id":"customfield_10400","key":"com.atlassian.jpo:jpo-custom-field-parent","isShown":false},{"name":"Rank","id":"customfield_10100","key":"com.pyxis.greenhopper.jira:gh-lexo-rank","isShown":true},{"name":"Rank (Obsolete)","id":"customfield_10002","key":"com.pyxis.greenhopper.jira:gh-global-rank","isShown":true},{"name":"Release Version History","id":"customfield_10020","key":"com.pyxis.greenhopper.jira:greenhopper-releasedmultiversionhistory","isShown":true},{"name":"Sprint","id":"customfield_10000","key":"com.pyxis.greenhopper.jira:gh-sprint","isShown":true},{"name":"Story Points","id":"customfield_10008","key":"com.atlassian.jira.plugin.system.customfieldtypes:float","isShown":false},{"name":"Team","id":"customfield_10404","key":"com.atlassian.teams:rm-teams-custom-field-team","isShown":true}],"type":"DETAILS","title":"Details"},{"searchers":[{"name":"Created Date","id":"created","key":"issue.field.created","isShown":true},{"name":"Updated Date","id":"updated","key":"issue.field.updated","isShown":true},{"name":"Resolution Date","id":"resolutiondate","key":"issue.field.resolution.date","isShown":true},{"name":"Due Date","id":"duedate","key":"issue.field.duedate","isShown":true},{"name":"Target end","id":"customfield_10402","key":"com.atlassian.jpo:jpo-custom-field-baseline-end","isShown":true},{"name":"Target start","id":"customfield_10401","key":"com.atlassian.jpo:jpo-custom-field-baseline-start","isShown":true}],"type":"DATES","title":"Dates"},{"searchers":[{"name":"Assignee","id":"assignee","key":"issue.field.assignee","isShown":true,"lastViewed":1755142446127},{"name":"Reporter","id":"reporter","key":"issue.field.reporter","isShown":true}],"type":"PEOPLE","title":"People"}]},"values":{"issuetype":{"name":"Type","editHtml":"\n\n\n\n <div class=\"field-group aui-field-issuetype\" >\n <label for=\"searcher-type\">Type</label> <select class=\"select js-default-checkboxmultiselect\"\n id=\"searcher-type\"\n multiple=\"multiple\"\n name=\"type\"\n data-max-inline-results-displayed=\"100\"\n data-placeholder-text=\"Find Issue Types...\">\n <optgroup>\n \n <option class=\" \"\n id=\"type_-2\"\n title=\"All Standard Issue Types\"\n value=\"-2\">All Standard Issue Types</option>\n \n <option class=\" \"\n id=\"type_-3\"\n title=\"All Sub-Task Issue Types\"\n value=\"-3\">All Sub-Task Issue Types</option>\n </optgroup>\n\n <optgroup label=\"Standard Issue Types\">\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11815&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_10002\"\n title=\"Add New Device / OS\"\n value=\"10002\">Add New Device / OS</option>\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11803&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_1\"\n title=\"Bug\"\n value=\"1\">Bug</option>\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11821&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_10200\"\n title=\"Help\"\n value=\"10200\">Help</option>\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11810&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_4\"\n title=\"Improvement\"\n value=\"4\">Improvement</option>\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11808&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_10100\"\n title=\"Library Bug\"\n value=\"10100\">Library Bug</option>\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11811&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_2\"\n title=\"New Feature\"\n value=\"2\">New Feature</option>\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11814&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_10001\"\n title=\"Paid Support\"\n value=\"10001\">Paid Support</option>\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11822&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_10000\"\n title=\"Vendor Bug\"\n value=\"10000\">Vendor Bug</option>\n </optgroup>\n\n <optgroup label=\"Sub-Task Issue Types\">\n \n <option class=\" imagebacked 10300 \"\n data-icon=\"/secure/viewavatar?size=xsmall&avatarId=11816&avatarType=issuetype\"\n data-fallback-icon=\"/images/icons/issuetypes/blank.png\"\n id=\"type_5\"\n title=\"Sub-task\"\n value=\"5\">Sub-task</option>\n </optgroup>\n </select>\n </div>\n ","validSearcher":true,"isShown":true},"project":{"name":"Project","editHtml":" \n <div class=\"field-group aui-field-project\" >\n <label for=\"searcher-pid\">Project</label> <select class=\"js-project-checkboxmultiselect\"\n data-placeholder-text=\"Find Projects...\"\n id=\"searcher-pid\"\n multiple=\"multiple\"\n name=\"pid\">\n <optgroup label=\"Recent Projects\">\n </optgroup>\n <optgroup label=\"All Projects\" >\n \n <option data-icon=\"/secure/projectavatar?pid=10000&size=small\"\n title=\"Observium\"\n value=\"10000\">\n Observium (OBS)\n </option>\n </optgroup>\n </select>\n </div>\n \n\n","validSearcher":true,"isShown":true},"assignee":{"name":"Assignee","editHtml":"\n \n <div class=\"field-group aui-field-userlist\" >\n <label for=\"searcher-assigneeSelect\">Assignee</label> <fieldset rel=\"assignee\" class=\"hidden user-group-searcher-params\">\n </fieldset>\n <select class=\"js-usergroup-checkboxmultiselect\" multiple=\"multiple\" id=\"assignee\" name=\"assignee\" data-placeholder-text=\"Enter username or group\">\n <optgroup>\n <option class=\"headerOption\" data-icon=\"https://jira.observium.org/secure/useravatar?size=xsmall&avatarId=10123\" value=\"empty\" title=\"Unassigned\">Unassigned</option>\n </optgroup>\n <optgroup>\n </optgroup>\n </select>\n <input type=\"hidden\" name=\"check_prev_assignee\" value=\"true\">\n </div>\n \n","validSearcher":true,"isShown":true},"status":{"name":"Status","editHtml":"\n <div class=\"field-group aui-field-constants\" >\n <label for=\"searcher-status\">Status</label> <select class=\"select js-default-checkboxmultiselectstatuslozenge\"\n data-placeholder-text=\"Find Statuses...\"\n id=\"searcher-status\"\n multiple=\"multiple\"\n name=\"status\"\n data-max-inline-results-displayed=\"100\"\n data-status-lozenge=\"true\">\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/open.png\" value=\"1\" title=\"Open\" data-simple-status=\"{"id":"1","name":"Open","description":"The issue is open and ready for the assignee to start work on it.","iconUrl":"/images/icons/statuses/open.png","statusCategory":{"id":2,"key":"new","colorName":"default"}}\">Open</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/generic.png\" value=\"10000\" title=\"Pending Response\" data-simple-status=\"{"id":"10000","name":"Pending Response","description":"Awaiting for the user's response.","iconUrl":"/images/icons/statuses/generic.png","statusCategory":{"id":2,"key":"new","colorName":"default"}}\">Pending Response</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/inprogress.png\" value=\"3\" title=\"In Progress\" data-simple-status=\"{"id":"3","name":"In Progress","description":"This issue is being actively worked on at the moment by the assignee.","iconUrl":"/images/icons/statuses/inprogress.png","statusCategory":{"id":4,"key":"indeterminate","colorName":"inprogress"}}\">In Progress</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/reopened.png\" value=\"4\" title=\"Reopened\" data-simple-status=\"{"id":"4","name":"Reopened","description":"This issue was once resolved, but the resolution was deemed incorrect. From here issues are either marked assigned or resolved.","iconUrl":"/images/icons/statuses/reopened.png","statusCategory":{"id":2,"key":"new","colorName":"default"}}\">Reopened</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/resolved.png\" value=\"5\" title=\"Resolved\" data-simple-status=\"{"id":"5","name":"Resolved","description":"A resolution has been taken, and it is awaiting verification by reporter. From here issues are either reopened, or are closed.","iconUrl":"/images/icons/statuses/resolved.png","statusCategory":{"id":3,"key":"done","colorName":"success"}}\">Resolved</option>\n <option class=\"imagebacked\" data-icon=\"/images/icons/statuses/closed.png\" value=\"6\" title=\"Closed\" data-simple-status=\"{"id":"6","name":"Closed","description":"The issue is considered finished, the resolution is correct. Issues which are closed can be reopened.","iconUrl":"/images/icons/statuses/closed.png","statusCategory":{"id":3,"key":"done","colorName":"success"}}\">Closed</option>\n <option class=\"imagebacked\" data-icon=\"/\" value=\"10100\" title=\"To Do\" data-simple-status=\"{"id":"10100","name":"To Do","description":"","iconUrl":"/","statusCategory":{"id":2,"key":"new","colorName":"default"}}\">To Do</option>\n <option class=\"imagebacked\" data-icon=\"/\" value=\"10101\" title=\"In Review\" data-simple-status=\"{"id":"10101","name":"In Review","description":"","iconUrl":"/","statusCategory":{"id":4,"key":"indeterminate","colorName":"inprogress"}}\">In Review</option>\n <option class=\"imagebacked\" data-icon=\"/\" value=\"10102\" title=\"Done\" data-simple-status=\"{"id":"10102","name":"Done","description":"","iconUrl":"/","statusCategory":{"id":3,"key":"done","colorName":"success"}}\">Done</option>\n </select>\n </div>\n \n","validSearcher":true,"isShown":true},"labels":{"name":"Label","viewHtml":" <div class=\"searcherValue\">\n \n <label class=\"fieldLabel\" for=\"fieldlabels\">Label:</label><span id=\"fieldlabels\" class=\"fieldValue\">\n \n accesspoint\n</span></div>\n","editHtml":"\n <div class=\"field-group aui-field-labels\" >\n <label for=\"searcher-labels\">Labels</label> <select class=\"js-label-checkboxmultiselect\" multiple=\"multiple\" id=\"searcher-labels\" name=\"labels\" data-placeholder-text=\"Find Labels...\">\n <option value=\"accesspoint\" title=\"accesspoint\" selected=\"selected\">accesspoint</option>\n </select>\n </div>\n \n","jql":"labels = accesspoint","validSearcher":true,"isShown":true}}}
[{"id":-1,"name":"My open issues","jql":"assignee = currentUser() AND resolution = Unresolved order by updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":true},{"id":-2,"name":"Reported by me","jql":"reporter = currentUser() order by created DESC","isSystem":true,"sharePermissions":[],"requiresLogin":true},{"id":-4,"name":"All issues","jql":"order by created DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-5,"name":"Open issues","jql":"resolution = Unresolved order by priority DESC,updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-9,"name":"Done issues","jql":"statusCategory = Done order by updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-3,"name":"Viewed recently","jql":"issuekey in issueHistory() order by lastViewed DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-6,"name":"Created recently","jql":"created >= -1w order by created DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-7,"name":"Resolved recently","jql":"resolutiondate >= -1w order by updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false},{"id":-8,"name":"Updated recently","jql":"updated >= -1w order by updated DESC","isSystem":true,"sharePermissions":[],"requiresLogin":false}]
Using this on a master and slave aruba 3400 controller, when viewing the "Access points" tab on the controller host page it show "noauth" on the graphs and if you click on the graph you get a "You do are not authorized to view this page" message. I am logged in as a level 10 user on SVN revision 3835.
Here is the url that I am not permitted to view:
http://observium/graphs/to=1364490153/type=accesspoints_numasoclients/from=1363885353/
and screenshots of the errors here: http://dl.dropbox.com/u/5551808/Screenshots/s.png and http://dl.dropbox.com/u/5551808/Screenshots/t.png
If this needs to be a new bug report let me know.