felimwhiteley / libsrvrmgrd-osx

Automatically exported from code.google.com/p/libsrvrmgrd-osx
5 stars 2 forks source link

Extension for Xsan monitoring #11

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
This is not an issue, but an added feature. On Mac OS X Servers with Xsan, 
servermgrd will present a new service, 'xsan'. I have taken the liberty to add 
this to the osxServices variable in check_osx_server:

# Module Configuration
osxServices = {
    'afp': ['currentConnections'],
    'calendar': [],
    'dhcp': ['numDHCPLeases', 'numConfiguredStaticMaps', 'timeOfSnapShot', 'numActiveStaticMaps'],
    'dirserv': ['timState', 'ldapdState', 'kdcStatus', 'lookupdState', 'passwordServiceState', 'netinfodState', 'netinfodParentState'],
    'dns': ['zonesAllocated', 'SOAQueriesInProgress', 'transfersRunning', 'transfersDeferred'],
    'ftp': ['realConnectionCount', 'anonymousAccessPermitted', 'anonymousConnectionCount'],
    'ipfilter': [],
    'jabber': ['serviceMode', 'jabberdState', 'mucState', 'proxyState'],
    'mysql': ['currentConnections', 'currentThroughput'],
    'nat': ['activeICMP', 'activeTCP', 'activeUDP'],
    'netboot': [],
    'nfs': ['nsfd', 'mountd', 'portmap', 'rpc.lockd'],
    'pcast': ['onlineCameras', 'totalCameras', 'currentJobs', 'totalJobs'],
    'print': ['currentJobs', 'currentQueues'],
    'qtss': ['stateAFP', 'stateDHCP', 'stateHTTP', 'stateNFS', 'stateTFTP'],
    'radius': [],
    'smb': ['currentConnections'],
    'swupdate': ['numOfMirroredPkg', 'numOfEnbabledPkg'],
    'teams': [],
    'vpn': [],
    'web': ['apacheState', 'proxyState', 'totalKBytes', 'totalRequests'],
    'webobjects': [],
    'xgrid': {'agentStatus': ['status', 'activeCPUPower'], 'controllerStatus': ['status', 'workingCPUPower']},
    'xsan': {'perfDispatchMicroseconds', 'perfFunctionMicroseconds'}
}

Tested and works. This is a very nice plugin, thank you very much! (:

Original issue reported on code.google.com by e%wulff....@gtempaccount.com on 26 Jul 2011 at 4:40

GoogleCodeExporter commented 9 years ago
Ah that's great. Thanks very much! Is there any chance you could send me one of 
the temp files for it by running the plugin in debug mode? I'll add this in for 
the next release though. If you want to give me your name I can credit you?

Félim

Original comment by felimwhiteley on 27 Jul 2011 at 7:36

GoogleCodeExporter commented 9 years ago
Any chance of those debug files at all? Be handy for getting some debug/test 
output.

Original comment by felimwhiteley on 5 Sep 2011 at 7:13

GoogleCodeExporter commented 9 years ago
Hi, I can now help you test 10.7 support, as well as the Xsan feature. I need 
10.7 support, and I need Xsan support, so... ;)

Eirik Wulff (:

Original comment by ei...@wulff.biz on 14 Nov 2011 at 6:40

GoogleCodeExporter commented 9 years ago
Hi Eirik, 

That's great news :) Ok for Xsan could you using a browser go to the device 
address, lets say it's 10.0.0.10, an admin user is xsanadmin with a password of 
s3cur3. Using a browser go to:

https://10.0.0.10:311/

There will be a list of modules and in there there will hopefully be on with 
xsan in the name. Click on it and it should list a set of actions. Could you 
send me a list of those actions? Each time you select one it will generate XML.

Essentially I need that XML. This is how we generate the queries.

Thanks for you help! I'll have some 10.7 instructions in issue 13 if you have a 
look in there soon.

Original comment by felimwhiteley on 15 Nov 2011 at 11:38

GoogleCodeExporter commented 9 years ago
OK, pretty simple. This is from a 10.6.8 Server, and a long list it is... Most 
of it is probably for Xsan Admin, but here it is:

Get State:
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getState</string>
</dict>
</plist>

Get Computer Properties
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getComputerProperties</string>
    <key>includeLUNs</key>
    <false/>
</dict>
</plist>

tailFile
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
       <key>command</key>
       <string>tailFile</string>
       <key>path</key>
       <string>/var/log/system.log</string>
       <key>offset</key>
       <integer>0</integer>
       <key>amount</key>
       <integer>10000</integer>
</dict>
</plist>

tailFile with filters
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
       <key>command</key>
       <string>tailFile</string>
       <key>path</key>
       <string>/var/log/system.log</string>
       <key>offset</key>
       <integer>0</integer>
       <key>amount</key>
       <integer>10000</integer>
       <key>withFilters</key>
       <array>
           <string>Operation</string>
       </array>
</dict>
</plist>

Get Log Paths
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getLogPaths</string>
</dict>
</plist>

Get LUN information
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getLUNs</string>
</dict>
</plist>

Refresh LUN Information
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>refreshLUNs</string>
</dict>
</plist>

Get History data
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getHistory</string>
    <key>identifier</key>
    <string>system</string>
    <key>timeScale</key>
    <integer>3600</integer>
</dict>
</plist>

Get History data information
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getHistoryInfo</string>
</dict>
</plist>

Get Volume information
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getVolumes</string>
</dict>
</plist>

Get Volume State
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getVolumeState</string>
    <key>name</key>
    <string>SANVolume</string>
    <key>variant</key>
    <string>withDetails</string>
</dict>
</plist>

Set Volume State
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>setVolumeState</string>
    <key>name</key>
    <string>SANVolume</string>
    <key>state</key>
    <string>START</string>
</dict>
</plist>

Delete Volumes
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>deleteVolumes</string>
    <key>volumeNames</key>
    <array>
        <string>SANVolume</string>
    </array>
</dict>
</plist>

change Stripe Group Settings
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>changeStripeGroupSettings</string>
    <key>volumes</key>
    <array>
        <dict>
            <key>Name</key>
            <string>SANVolume</string>
            <key>StripeGroups</key>
            <array>
                <dict>
                    <key>StripeGroup</key>
                    <string>somePool</string>
                    <key>Exclusive</key>
                    <false/>
                </dict>
            </array>
        </dict>
    </array>
    <key>update</key>
    <false/>
</dict>
</plist>

Change Volume Settings
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>changeVolumeSettings</string>
    <key>volumes</key>
    <array>
        <dict>
            <key>Name</key>
            <string>SANVolume</string>
        </dict>
    </array>
    <string>update</string>
    <false/>
</dict>
</plist>

Expand Volume
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>expandVolume</string>
    <key>update</key>
    <false/>
    <key>volume</key>
    <dict>
        <key>Name</key>
        <string>SANVolume</string>
        <key>DiskTypes</key>
        <array>
            <dict>
                <key>DiskType</key>
                <string>NewLunType</string>
                <key>SectorSize</key>
                <integer>512</integer>
                <key>Sectors</key>
                <integer>1048576000</integer>
            </dict>
        </array>
        <key>Disks</key>
        <array>
            <dict>
                <key>Disk</key>
                <string>NewLun</string>
                <key>Status</key>
                <true/>
                <key>Type</key>
                <string>NewLunType</string>
            </dict>
        </array>
        <key>StripeGroups</key>
        <array>
            <dict>
                <key>Affinity</key>
                <string>NewPool</string>
                <key>Exclusive</key>
                <false/>
                <key>Journal</key>
                <false/>
                <key>Metadata</key>
                <false/>
                <key>MultiPathMethod</key>
                <string>Rotate</string>
                <key>Nodes</key>
                <array>
                    <dict>
                        <key>NodeDiskDevice</key>
                        <string>NewLun</string>
                        <key>NodeRotationIndex</key>
                        <integer>0</integer>
                    </dict>
                </array>
                <key>Read</key>
                <true/>
                <key>Status</key>
                <true/>
                <key>StripeBreadth</key>
                <integer>256</integer>
                <key>StripeGroup</key>
                <string>NewPool</string>
                <key>Write</key>
                <true/>
            </dict>
        </array>
    </dict>
</dict>
</plist>

Rename Volume
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>renameVolume</string>
    <key>oldName</key>
    <string>MyVolume</string>
    <key>newName</key>
    <string>NewVolume</string>
</dict>
</plist>

reinitialize Volumes
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>reinitializeVolumes</string>
    <key>volumes</key>
    <array>
        <string>SANVolume</string>
    </array>
</dict>
</plist>

Get Quota Information
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getQuotas</string>
    <key>name</key>
    <string>SANVolume</string>
    <key>withAllDiskUsage</key>
    <false/>
</dict>
</plist>

Set User/Group quotas
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>setQuotas</string>
    <key>name</key>
    <string>SANVolume</string>
    <key>quotas</key>
    <array>
        <dict>
            <key>type</key>
            <string>user</string>
            <key>name</key>
            <string>userName</string>
            <key>softLimit</key>
            <integer>10737418240</integer>
            <key>hardLimit</key>
            <integer>10737418240</integer>
            <key>timeLimit</key>
            <integer>60</integer>
        </dict>
    </array>
    <key>withAllDiskUsage</key>
    <false/>
</dict>
</plist>

Delete quotas
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>deleteQuotas</string>
    <key>name</key>
    <string>SANVolume</string>
    <key>quotas</key>
    <array>
        <dict>
            <key>type</key>
            <string>user</string>
            <key>name</key>
            <string>userName</string>
        </dict>
    </array>
    <key>withAllDiskUsage</key>
    <false/>
</dict>
</plist>

Mount/unmount volume
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>mountVolume</string>
    <key>name</key>
    <string>SANVolume</string>
    <key>showVolume</key>
    <integer>2</integer>
    <key>forgetVolume</key>
    <false/>
</dict>
</plist>

Get Mount information
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getMounts</string>
    <key>name</key>
    <string>SANVolume</string>
</dict>
</plist>

Get Mount Options
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getMountOptions</string>
    <key>name</key>
    <string>SANVolume</string>
</dict>
</plist>

Do Idle
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>doIdle</string>
    <key>count</key>
    <integer>0</integer>
</dict>
</plist>

Preflight Lisence
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>preflyLicense</string>
    <key>license</key>
    <string>xsan-xxx-xxx-x-xxx-xxx-xxx-xxx-xxx-xxx-x</string>
    <key>organization</key>
    <string></string>
    <key>registeredTo</key>
    <string></string>
</dict>
</plist>

Set license
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>setLicense</string>
    <key>license</key>
    <dict>
        <key>license</key>
        <string>xsan-xxx-xxx-x-xxx-xxx-xxx-xxx-xxx-xxx-x</string>
        <key>organization</key>
        <string></string>
        <key>registeredTo</key>
        <string></string>
    </dict>
</dict>
</plist>

Clear configuration settings
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>clearConfiguration</string>
</dict>
</plist>

Delete license
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>deleteLicense</string>
</dict>
</plist>

Get Open Directory Records
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getOpenDirectoryRecords</string>
    <key>nodePath</key>
    <string>/Search</string>
    <key>recordTypesArray</key>
    <array>
        <string>dsRecTypeStandard:Users</string>
    </array>
    <key>attributeTypesArray</key>
    <array>
        <string>dsAttrTypeStandard:RecordName</string>
        <string>dsAttrTypeStandard:UniqueID</string>
        <string>dsAttrTypeStandard:PrimaryGroupID</string>
        <string>dsAttrTypeStandard:RealName</string>
        <string>dsAttrTypeStandard:AppleMetaNodeLocation</string>
        <string>dsAttrTypeStandard:RecordType</string>
    </array>
    <key>patternKey</key>
    <string>nameStartsWith</string>
    <key>patternText</key>
    <string></string>
    <key>maxRecords</key>
    <integer>100</integer>
</dict>
</plist>

Get Affinity for File/Folder
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getAffinity</string>
    <key>volume</key>
    <string>volumeName</string>
    <key>path</key>
    <string>filePath</string>
</dict>
</plist>

Set affinity for file/folder
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getAffinity</string>
    <key>volume</key>
    <string>volumeName</string>
    <key>path</key>
    <string>filePath</string>
</dict>
</plist>

Get notifications types
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getNotificationsTypes</string>
</dict>
</plist>

Get Notifications Configuration
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getNotificationsConfiguration</string>
</dict>
</plist>

Get Notifications Configuration
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>setNotificationsConfiguration</string>
    <key>config</key>
    <dict>
        <key>Config goes here</key>
        <string>Fill it all in</string>
    </dict>
</dict>
</plist>

Send Test Notification
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>sendNotification</string>
    <key>messageType</key>
    <string>freeSpace</string>
    <key>messageSubject</key>
    <string>Xsan Loves you</string>
    <key>messageBody</key>
    <string>Xsan loves storing your data VERY VERY MUCH.</string>
    <key>config</key>
    <dict>
        <key>OPTIONAL config goes in this dict</key>
        <string>Either remove this config dict or shove in a full notifications config.</string>
    </dict>
</dict>
</plist>

Configure Network Interface
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>configureNetworkInterface</string>
    <key>port</key>
    <string>en0</string>
    <key>address</key>
    <string>10.0.0.50</string>
    <key>subnetMask</key>
    <string>255.255.0.0</string>
    <key>router</key>
    <string></string>
    <key>addressFamily</key>
    <string>IPv4</string>
</dict>
</plist>

Get Asset Notes
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getNotes</string>
    <key>notes</key>
    <array>
        <dict>
            <key>class</key>
            <string>Volume</string>
            <key>name</key>
            <string>SANVolume</string>
        </dict>
    </array>
</dict>
</plist>

Set Asset Notes
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>setNotes</string>
    <key>notes</key>
    <array>
        <dict>
            <key>class</key>
            <string>Volume</string>
            <key>name</key>
            <string>SANVolume</string>
            <key>contents</key>
            <string>Insert your comment here.</string>
        </dict>
    </array>
</dict>
</plist>

Get All Asset Notes
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>getAllNotes</string>
    <key>classes</key>
    <array>
        <string>Volume</string>
    </array>
</dict>
</plist>

Rename Asset Notes
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>renameNotes</string>
    <key>notes</key>
    <array>
        <dict>
            <key>class</key>
            <string>Volume</string>
            <key>oldName</key>
            <string>SANVolume</string>
            <key>newName</key>
            <string>XsanVol</string>
        </dict>
    </array>
</dict>
</plist>

Send Failover Notification
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>sendFailover</string>
    <key>volume</key>
    <string>volumeName</string>
    <key>hostname</key>
    <string>hostname</string>
</dict>
</plist>

Preflight Replica
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>preflightReplica</string>
    <key>masterAddress</key>
    <string></string>
    <key>masterRootPassword</key>
    <string></string>
    <key>dirAdminName</key>
    <string></string>
    <key>dirAdminPassword</key>
    <string></string>
</dict>
</plist>

Run dot_clean
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>runDotClean</string>
    <key>volumeName</key>
    <string>MyVolume</string>
</dict>
</plist>

Read Command Progress
<?xml version="1.0" encoding="UTF-8"?>
<plist version="0.9">
<dict>
    <key>command</key>
    <string>readProgress</string>
    <key>volumeName</key>
    <string>MyVolume</string>
</dict>
</plist>

Original comment by ei...@wulff.biz on 15 Nov 2011 at 12:11

GoogleCodeExporter commented 9 years ago
That's a massive help! Thanks Eirik, I'll go through these and get updates out 
asap.

Original comment by felimwhiteley on 15 Nov 2011 at 4:00

GoogleCodeExporter commented 9 years ago
Sorry for the delay in this Eirik. I't sbeen crazy hectic at the moment. I've 
an update coming in next hour, also I'll be working on this more full time. The 
vesion I'll let you grab will be fairly basic, it's mainly so I can pull some 
debug from your machine and build the plugin around it. 

Original comment by felimwhiteley on 14 Dec 2011 at 10:37

GoogleCodeExporter commented 9 years ago
Hi Eirik,

Could you download the following and run it with the DEBUG option:

http://libsrvrmgrd-osx.googlecode.com/svn/trunk/check_osx_server
http://libsrvrmgrd-osx.googlecode.com/svn/trunk/srvrmgrdIO.py

This should create files in /tmp that I can then parse for useful info. Again 
sorry for the delay!

Original comment by felimwhiteley on 14 Dec 2011 at 11:02