<?xml version="1.0" encoding="UTF-8"?>
<hibernate-generic datetime="2026-02-04 08:35:58">
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637814</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[2008M2 *Deployed on 11-Apr-2008]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670564</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">3707731</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">3707732</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">3707733</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604634</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604636</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604638</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604639</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604640</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">4849685</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2008-05-02 08:15:36.643</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:43:44.513</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637815</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637817</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637819</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637821</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17858815</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<collection name="comments"><element class="Comment" package="com.atlassian.confluence.pages"><id name="id">19038486</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[M1 February 2012]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17891559</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777311</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-07-07 20:40:04.910</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">17858817</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17858819</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579806</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579809</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">17825865</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162859</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195625</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293799</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293800</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293801</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-07 09:28:44.627</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162860</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162861</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162862</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162863</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162864</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162865</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162866</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162867</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Space" package="com.atlassian.confluence.spaces">
<id name="id">2064386</id>
<property name="name"><![CDATA[Oasis Support Engineering]]></property>
<property name="key"><![CDATA[O3S]]></property>
<property name="description" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">1835089</id>
</property>
<property name="homePage" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="permissions"><element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4816897</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4816898</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4816899</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4816900</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4816901</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4816902</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">4816903</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">19300604</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406571</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406572</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406573</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406574</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406575</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406576</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406577</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406578</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406579</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406580</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406581</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406582</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406583</id>
</element>
<element class="SpacePermission" package="com.atlassian.confluence.security"><id name="id">34406584</id>
</element>
</collection>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.967</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:27:07.373</property>
<property name="spaceType">global</property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">2097157</id>
<property name="context"><![CDATA[O3S]]></property>
<property name="key"><![CDATA[atlassian.confluence.css.resource.counter]]></property>
<property name="value"><![CDATA[<int>2</int>]]></property>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">2097156</id>
<property name="context"><![CDATA[O3S]]></property>
<property name="key"><![CDATA[atlassian.confluence.theme.settings]]></property>
<property name="value"><![CDATA[<map>
  <entry>
    <string>theme.key</string>
    <string></string>
  </entry>
</map>]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835140</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[M1 November 2007]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867904</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777176</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777177</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777178</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933374</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933375</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933376</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933377</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933379</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933382</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293795</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293797</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604633</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:25:50.720</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835141</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835142</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835143</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835145</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835147</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835149</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835150</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835151</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835153</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162855</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162857</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579784</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16777265</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16810033</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 20:44:53.467</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">16777266</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16777268</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16777269</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16777277</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16777279</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16777283</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18252364</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">26640533</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">26640535</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">26640537</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">26640539</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">26640540</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973840</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973841</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973842</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973843</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973844</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973845</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973846</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973847</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973848</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973849</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973850</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973851</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973852</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973853</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973854</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973855</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973856</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973826</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973827</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973828</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973829</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973830</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">26837003</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">26837004</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">26837005</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">26837006</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973832</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973833</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973834</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973835</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973836</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973837</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973838</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973839</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973857</id>
</element>
</collection>
</object>
<object class="ConfluenceBandanaRecord" package="com.atlassian.confluence.setup.bandana">
<id name="id">2097158</id>
<property name="context"><![CDATA[O3S]]></property>
<property name="key"><![CDATA[atlassian.confluence.space.settings]]></property>
<property name="value"><![CDATA[<com.atlassian.confluence.setup.settings.SpaceSettings>
  <spaceKey>O3S</spaceKey>
  <disableLogo>false</disableLogo>
  <colourSchemesSettings>
    <colourSchemeType>global</colourSchemeType>
  </colourSchemesSettings>
</com.atlassian.confluence.setup.settings.SpaceSettings>]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835120</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[Deployments]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867884</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933362</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933364</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933365</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293763</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293764</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 16:12:37.030</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 16:12:37.030</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579793</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</element>
</collection>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[Support Engineering Upgrades]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645308</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777237</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:01:15.480</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:01:15.480</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579795</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579793</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579793</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[February 3, 2012]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645310</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777238</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777239</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777240</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777241</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777242</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:04:08.647</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:17:48.607</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579797</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841670</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841671</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841672</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841673</id>
</element>
<element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">18841674</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17858807</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[2011M2H]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17891551</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-07-07 12:34:06.707</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-07-07 15:21:24.070</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">17858810</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798591</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[Iridium1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9831335</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2009-05-18 09:01:01.490</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2009-05-18 09:01:01.490</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162834</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<collection name="comments"><element class="Comment" package="com.atlassian.confluence.pages"><id name="id">3637249</id>
</element>
<element class="Comment" package="com.atlassian.confluence.pages"><id name="id">3637250</id>
</element>
<element class="Comment" package="com.atlassian.confluence.pages"><id name="id">3637251</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195600</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292305</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292306</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292307</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292308</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292309</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292310</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292311</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292312</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292313</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292314</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292315</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">33292316</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604481</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604483</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604513</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">28180486</id>
</element>
</collection>
<property name="version">74</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.180</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162837</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162838</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162839</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162840</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162842</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162843</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162844</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162852</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162854</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162856</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162871</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162888</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162925</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162926</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162928</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162929</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114498</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259082</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259084</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259086</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259091</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259111</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259114</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259252</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259254</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259256</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259316</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259318</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">6259320</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">7766129</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372106</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372126</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372155</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9372156</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797946</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797971</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798092</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798154</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798168</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10356341</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10911784</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10911785</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">10911787</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11240264</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11240266</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11240272</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11240442</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11240443</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11240445</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796614</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796616</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796617</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796677</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796683</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796685</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">11796687</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15631231</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15631233</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15631235</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15631237</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15631239</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15631240</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">15631247</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17236075</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17236076</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17236077</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579771</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579959</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579961</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579962</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18580006</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">33095686</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">33095687</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835112</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[Tasks]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867876</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">1901044</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933355</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933357</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 14:02:09.923</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 14:02:09.923</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114486</id>
<property name="parent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<collection name="ancestors"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[Mooring Processing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179957</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2008-04-02 11:57:23.537</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:38:46.177</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114488</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579801</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">3309673</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835090</id>
<collection name="children"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835112</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835120</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3114486</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9798591</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17858807</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579793</id>
</element>
</collection>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867854</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777298</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777299</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777300</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777301</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777302</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777303</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777304</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777305</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777306</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777307</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777308</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777309</id>
</element>
<element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">18777310</id>
</element>
</collection>
<collection name="referralLinks"><element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933327</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933328</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933332</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933333</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933335</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933336</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933338</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933341</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933343</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933344</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933345</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933346</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933348</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933349</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933350</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933351</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933353</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933354</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933358</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933363</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933378</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933380</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">1933381</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293761</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293794</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293796</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293798</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">2293897</id>
</element>
<element class="ReferralLink" package="com.atlassian.confluence.links"><id name="id">3604637</id>
</element>
</collection>
<property name="version">62</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.727</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835096</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835098</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835099</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835100</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835101</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835102</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835103</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835104</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835113</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835114</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835119</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835121</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835122</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835123</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835124</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835125</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835126</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835127</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835128</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835129</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835130</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835131</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835132</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835133</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835134</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835135</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835136</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835137</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835138</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835139</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835144</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835146</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835148</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">1835152</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162698</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">2162853</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">3637823</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797895</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">9797896</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">16777281</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17858805</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">17858813</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579768</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579770</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579775</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579777</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579778</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579779</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579780</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579782</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579783</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579785</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579786</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579788</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579790</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579791</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579802</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579804</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579805</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579807</id>
</element>
<element class="Page" package="com.atlassian.confluence.pages"><id name="id">18579808</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="attachments"><element class="Attachment" package="com.atlassian.confluence.pages"><id name="id">9928721</id>
</element>
</collection>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835135</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867899</id>
</element>
</collection>
<property name="version">26</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:34:19.473</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162863</id>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195629</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:30:17.300</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835136</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867900</id>
</element>
</collection>
<property name="version">27</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 16:41:02.103</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798168</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830922</id>
</element>
</collection>
<property name="version">39</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-05-04 12:54:39.500</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162864</id>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195630</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:31:28.897</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604483</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/SSDS/ProjectDocuments]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-11 08:28:15.053</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-11 08:28:15.053</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835137</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867901</id>
</element>
</collection>
<property name="version">28</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-04 10:28:13.733</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162865</id>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195631</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:31:55.103</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835138</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867902</id>
</element>
</collection>
<property name="version">29</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-04 10:32:15.457</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162866</id>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195632</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:38:35.127</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835131</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867895</id>
</element>
</collection>
<property name="version">22</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:32:25.597</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835132</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867896</id>
</element>
</collection>
<property name="version">23</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:32:42.727</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162860</id>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195626</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:28:36.237</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835133</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867897</id>
</element>
</collection>
<property name="version">24</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:32:54.100</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162861</id>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195627</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:29:08.927</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835134</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867898</id>
</element>
</collection>
<property name="version">25</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:33:24.667</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162862</id>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195628</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:29:45.570</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835143</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867907</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:35:45.217</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162871</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195637</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-11-06 16:19:29.250</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835144</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867908</id>
</element>
</collection>
<property name="version">31</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:19:57.550</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835145</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867909</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:36:11.650</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835146</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867910</id>
</element>
</collection>
<property name="version">32</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:38:57.210</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835139</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867903</id>
</element>
</collection>
<property name="version">30</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-04 10:53:55.393</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162867</id>
<property name="title"><![CDATA[Bogus yyyyddd error files....]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195633</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-11-06 16:28:36.237</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-07 09:27:54.463</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835141</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867905</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:24:44.267</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835142</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867906</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:31:31.527</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604481</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/dosearchsite.action?searchQuery.queryString=oasis+ssds&searchQuery.spaceKey=conf_global]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-11 08:27:15.047</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-11 08:27:15.047</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292307</id>
<property name="destinationPageTitle"><![CDATA[//mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835119</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867883</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 14:04:37.560</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292306</id>
<property name="destinationPageTitle"><![CDATA[//docs.mbari.org/internal/se-ie-doc/systems/oasis/m1-mooring-turn/]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835122</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867886</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 16:14:49.213</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292305</id>
<property name="destinationPageTitle"><![CDATA[//bitbucket.org/mbari/se-ie-doc/src/master/docs/systems/oasis/m1-mooring-turn.md]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835121</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867885</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 16:12:18.260</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835128</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867892</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:31:23.457</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777241</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:17:48.630</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:17:48.630</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162888</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195654</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-11-07 11:09:32.407</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835127</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867891</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:31:10.700</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">33095687</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">33161223</id>
</element>
</collection>
<property name="version">73</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:09:39.617</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259082</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226300</id>
</element>
</collection>
<property name="version">18</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-04-03 20:17:25.087</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777240</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:17:48.630</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:17:48.630</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835130</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867894</id>
</element>
</collection>
<property name="version">21</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:31:59.423</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835129</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867893</id>
</element>
</collection>
<property name="version">20</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-10-03 16:31:40.740</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777242</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:17:48.630</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:17:48.630</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835124</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867888</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 16:28:06.237</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777237</id>
<property name="destinationPageTitle"><![CDATA[February 3, 2012]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579793</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:01:15.530</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:01:15.530</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835123</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867887</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 16:18:25.353</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777239</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:17:48.630</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:17:48.630</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">33095686</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">33161222</id>
</element>
</collection>
<property name="version">72</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2012-03-01 08:11:15.897</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835126</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867890</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 16:29:18.180</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777238</id>
<property name="destinationPageTitle"><![CDATA[]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:17:48.630</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:17:48.630</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835125</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867889</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 16:28:54.587</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">9928721</id>
<property name="fileName"><![CDATA[OASIS_TURNS.doc]]></property>
<property name="contentType"><![CDATA[application/msword]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2009-04-29 12:35:51.870</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2009-04-29 12:35:51.870</property>
<property name="fileSize">39936</property>
<property name="comment"><![CDATA[]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292316</id>
<property name="destinationPageTitle"><![CDATA[//new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259084</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226302</id>
</element>
</collection>
<property name="version">19</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-05 09:19:29.207</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259086</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226304</id>
</element>
</collection>
<property name="version">20</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-05 10:35:07.903</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292312</id>
<property name="destinationPageTitle"><![CDATA[//new-ssds.mbari.org:8080/ssds/faces/explorer.jsp]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292313</id>
<property name="destinationPageTitle"><![CDATA[//new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16810033</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation *coredata as user 'coredata'.*

*NOTE: in all text and diagrams "ROOTDIR" = /u/coredata/moorings/downloads&nbsp;*
* cd to ROOTDIR
* Scripts and executables are in ROOTDIR/bin
* Downloaded data go to /mbari/oasis_coredata/deployments/m1/yyyymm/raw (where yyymm=year and month of start of deployment)
* Extracted data ascii instrument data files go to mooring-specific dirs at /mbari/oasis_coredata/deployments/m1/yyyymm/m1 and are ingested into ssds (m1 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See \~/cron.coredata OR do a crontab \-l to see current schedule

*NOTE: in all text and diagrams "ROOTDIR" = /u/coredata/moorings/downloads*
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below.
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292314</id>
<property name="destinationPageTitle"><![CDATA[//dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292315</id>
<property name="destinationPageTitle"><![CDATA[//dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292308</id>
<property name="destinationPageTitle"><![CDATA[//dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292309</id>
<property name="destinationPageTitle"><![CDATA[With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the ]]></property>
<property name="destinationSpaceKey"><![CDATA[Note]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259091</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226309</id>
</element>
</collection>
<property name="version">21</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-05 11:44:19.407</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292310</id>
<property name="destinationPageTitle"><![CDATA[Instrument Swap on Oasis Mooring]]></property>
<property name="destinationSpaceKey"><![CDATA[SSDS]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">33292311</id>
<property name="destinationPageTitle"><![CDATA[main\]]></property>
<property name="destinationSpaceKey"><![CDATA[SSDS]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2021-06-14 16:10:18.227</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2021-06-14 16:10:18.227</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798154</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830908</id>
</element>
</collection>
<property name="version">38</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-05-01 09:32:48.407</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835153</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867917</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 15:07:20.360</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835152</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867916</id>
</element>
</collection>
<property name="version">34</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:42:05.107</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9831335</id>
<property name="body"><![CDATA[iridium beacons on M1 and M2

iridium contract/subscription is managed by?\\

iridium1 acct on tsunami was set up by Pat Allen to receive emails from beacons

cronjob run by iridium1 execs shell script to process data (emails)&nbsp; into tsunami//oasis/iridum1 directories\\
{noformat}
[8] % whoami
iridium1
[9] % crontab -l
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /oasis/iridium/processiridium

[10] %

{noformat}
Note: Im not sure processiridium is working correctly - looks like it should be pruning the text0nnnnn files \-rs\\

here is the script
{noformat}
 if [ -s /var/mail/iridium1 ]
        then
/bin/cp /var/mail/iridium1 /oasis/iridium/iridium1/incoming

/usr/local/bin/ripmime -i /oasis/iridium/iridium1/incoming -d /oasis/iridium/iri
dium1
rm /oasis/iridium/iridium1/textfile0
DT=`/bin/date +%y%m%d`
if [ -f /oasis/iridium/iridium1/*.sbd ]
        then
cat -r /oasis/iridium/iridium1/*.sbd /oasis/iridium/newline >>/oasis/iridium/iri
dium1/$DT

rm /oasis/iridium/iridium1/*.sbd
fi

cat  /oasis/iridium/iridium1/textfile* >>/oasis/iridium/iridium1/text$DT
rm /oasis/iridium/iridium1/textfile*
rm /oasis/iridium/iridium1/incoming
/bin/cp /dev/null /var/mail/iridium1
fi


{noformat}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798591</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835151</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867915</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:51:11.567</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835150</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867914</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:49:45.767</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835149</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867913</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:40:58.863</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835148</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867912</id>
</element>
</collection>
<property name="version">33</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:40:22.797</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835147</id>
<property name="title"><![CDATA[2007M1]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867911</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 14:39:39.500</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259111</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226328</id>
</element>
</collection>
<property name="version">22</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-05 16:47:55.890</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259114</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226331</id>
</element>
</collection>
<property name="version">23</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-08 11:46:13.127</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777309</id>
<property name="destinationPageTitle"><![CDATA[2008M2 *Deployed on 11-Apr-2008]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777308</id>
<property name="destinationPageTitle"><![CDATA[M1 February 2012]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777311</id>
<property name="destinationPageTitle"><![CDATA[M1 February 2012]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.743</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.743</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777310</id>
<property name="destinationPageTitle"><![CDATA[2011M2H]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15631247</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663997</id>
</element>
</collection>
<property name="version">63</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-01-31 16:35:23.767</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">1901044</id>
<property name="destinationPageTitle"><![CDATA[Wishlist]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835112</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 14:02:10.007</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 14:02:10.007</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579959</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645467</id>
</element>
</collection>
<property name="version">68</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:16:05.513</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579962</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645470</id>
</element>
</collection>
<property name="version">70</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2012-02-28 12:23:09.070</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579961</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645469</id>
</element>
</collection>
<property name="version">69</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2012-02-28 12:12:17.610</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777301</id>
<property name="destinationPageTitle"><![CDATA[Mooring Processing]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777300</id>
<property name="destinationPageTitle"><![CDATA[M1,M2 and OA Downloads]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777303</id>
<property name="destinationPageTitle"><![CDATA[//oceana.mbari.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10140&status=1]]></property>
<property name="destinationSpaceKey"><![CDATA[https]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777302</id>
<property name="destinationPageTitle"><![CDATA[OASIS Mooring turn]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777305</id>
<property name="destinationPageTitle"><![CDATA[Other]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777304</id>
<property name="destinationPageTitle"><![CDATA[Support Engineering Upgrades]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777307</id>
<property name="destinationPageTitle"><![CDATA[M1 November 2007]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777306</id>
<property name="destinationPageTitle"><![CDATA[OASIS Support Engineering Wiki]]></property>
<property name="destinationSpaceKey"><![CDATA[O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18580006</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645514</id>
</element>
</collection>
<property name="version">71</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2012-02-28 12:23:38.710</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">3309673</id>
<property name="fileName"><![CDATA[MooringDataFlow.png]]></property>
<property name="contentType"><![CDATA[image/png]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114486</id>
</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2008-04-02 11:58:05.017</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2008-04-02 11:58:05.017</property>
<property name="fileSize">118329</property>
<property name="comment"><![CDATA[Mooring Processing Overview]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114498</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179968</id>
</element>
</collection>
<property name="version">17</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-11-16 14:05:58.687</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777298</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777299</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 16:41:13.737</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:13.737</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15631233</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663984</id>
</element>
</collection>
<property name="version">58</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-01-31 16:24:04.077</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15631231</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663982</id>
</element>
</collection>
<property name="version">57</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-04-06 11:10:57.857</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162837</id>
<property name="title"><![CDATA[Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195603</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-10-29 10:49:47.743</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15631237</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663988</id>
</element>
</collection>
<property name="version">60</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-01-31 16:27:21.090</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162838</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195604</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-10-29 10:52:13.493</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">7766129</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">7798893</id>
</element>
</collection>
<property name="version">30</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-10-08 14:59:56.053</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15631235</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663986</id>
</element>
</collection>
<property name="version">59</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-01-31 16:25:52.380</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162842</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195608</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-10-29 13:44:18.087</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15631240</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663991</id>
</element>
</collection>
<property name="version">62</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-01-31 16:34:39.300</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162839</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195605</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-10-29 11:04:37.773</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">15631239</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">15663990</id>
</element>
</collection>
<property name="version">61</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-01-31 16:33:24.957</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">28180486</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[https://mbarimail.mbari.org/zimbra/]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"/><property name="creationDate">2015-08-27 10:26:15.050</property>
<property name="lastModifierName"/><property name="lastModificationDate">2015-08-27 10:26:15.050</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162840</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195606</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-10-29 12:39:03.793</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162844</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195610</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-10-30 13:57:14.710</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162843</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195609</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-10-29 15:43:04.510</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162854</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195620</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-11-06 15:42:37.510</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162853</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195619</id>
</element>
</collection>
<property name="version">36</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-16 12:15:03.307</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3114488</id>
<property name="title"><![CDATA[Mooring Processing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3179959</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2008-04-02 11:57:23.537</property>
<property name="lastModifierName"><![CDATA[brian]]></property>
<property name="lastModificationDate">2008-04-02 11:57:23.537</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114486</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162852</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195618</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-10-30 16:15:00.757</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162857</id>
<property name="title"><![CDATA[2007M1 *Deployed on 6-Nov-2007]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195623</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:16:15.747</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162856</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195622</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-11-06 16:13:38.160</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162855</id>
<property name="title"><![CDATA[2007M1 *scheduled for deployment on 7-Nov-2007]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195621</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 15:10:00.637</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406571</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:45.257</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:45.257</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406572</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[REMOVEATTACHMENT]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.107</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.107</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867884</id>
<property name="body"><![CDATA[2007M1]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835120</id>
</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406579</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[SETSPACEPERMISSIONS]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406580</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[SETPAGEPERMISSIONS]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406577</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[REMOVEPAGE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406578</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406575</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[EXPORTSPACE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867876</id>
<property name="body"><![CDATA[h3. [wishlist|Wishlist]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835112</id>
</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406576</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[REMOVEMAIL]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406573</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[EXPORTPAGE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.107</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.107</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406574</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867904</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
# [SSDS_instruments.xls|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/SSDS_instruments.xls?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11240264</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11273004</id>
</element>
</collection>
<property name="version">44</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-10-20 10:06:09.023</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11240266</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11273006</id>
</element>
</collection>
<property name="version">45</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-03-05 10:00:16.680</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372155</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404896</id>
</element>
</collection>
<property name="version">33</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-03-09 11:49:00.577</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372156</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404897</id>
</element>
</collection>
<property name="version">34</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-03-09 15:43:48.720</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11240272</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11273012</id>
</element>
</collection>
<property name="version">46</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-03-05 10:04:28.970</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867854</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [Mooring Processing]
# [OASIS Mooring turn]

h3. Development

# [JIRA Tasks|https://oceana.mbari.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10140&status=1]
# [Support Engineering Upgrades]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|M1 February 2012]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933354</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/Tasks]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 14:02:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 14:02:15.023</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18252364</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18285122</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:47:07.843</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17858817</id>
<property name="title"><![CDATA[2011 M1 October]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17891561</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-07-07 20:40:04.910</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-07-07 20:40:04.910</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933355</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=O3S&title=Tasks&linkCreation=true&fromPageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835112</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 14:02:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 14:02:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933357</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/OASIS3+Support+Engineering+Wiki]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835112</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 14:03:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-12-19 12:53:15.027</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17858813</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17891557</id>
</element>
</collection>
<property name="version">42</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-07-07 12:32:05.323</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933358</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 14:04:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 14:04:15.023</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">17825865</id>
<property name="fileName"><![CDATA[2011-M1 Sensor.doc]]></property>
<property name="contentType"><![CDATA[application/msword]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-07-07 20:40:42.443</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-07-07 20:40:42.443</property>
<property name="fileSize">23552</property>
<property name="comment"><![CDATA[From Mike Kelley]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933362</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=1835120]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835120</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 16:13:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 16:13:15.017</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933363</id>
<property name="viewCount">4</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/Deployments]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 16:13:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:45:15.020</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933364</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=O3S&title=Deployments&linkCreation=true&fromPageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835120</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 16:13:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 16:13:15.023</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933365</id>
<property name="viewCount">6</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/OASIS3+Support+Engineering+Wiki]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835120</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 16:13:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:45:15.027</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17858819</id>
<property name="title"><![CDATA[2011 M1 October]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17891563</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-07-07 20:40:04.910</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-07-07 20:41:45.867</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17891551</id>
<property name="body"><![CDATA[Some notes from the deployment of the new Hybrid buoy (M46044):

Originally, the old M2 was going to go silent and then be recovered, but that slipped a few months, so Francisco wanted the old M2 turned back on.

h3. Re-enabling old M2

h5. SSDS enabling

After Rich did all the changes to enable the M2 downloads and then moved the M2H over the M46044, I made the following changes to enable the SSDS processing:

# Created XML for 1379 and 1796
# Changed the ssds.cfg on the M]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858807</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933338</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/pages/listpages-dirview.action?key=O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:19:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:57:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933341</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=O3S&title=Meeting+with+Chris%2C+June+11%2C+2007&linkCreation=true&fromPageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:26:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 16:15:15.030</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933343</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=O3S&title=ProjectDocuments&linkCreation=true&fromPageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:26:15.033</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:26:15.033</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777176</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 09:25:50.740</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:25:50.740</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777177</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 09:25:50.740</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:25:50.740</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933345</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action?spacesSelectedTab=new]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:32:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:32:15.020</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">18777178</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/SSDS_instruments.xls?rev=1.1;content-type=text%2Fplain]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 09:25:50.740</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:25:50.740</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162698</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195465</id>
</element>
</collection>
<property name="version">35</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-05 15:10:00.633</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933344</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=O3S&title=Tasks&linkCreation=true&fromPageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:27:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:27:15.017</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17858810</id>
<property name="title"><![CDATA[2011M2H]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17891554</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-07-07 12:34:06.707</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-07-07 12:34:06.707</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858807</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933346</id>
<property name="viewCount">20</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/OASIS3+Support+Engineering+Wiki]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:32:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:48:15.040</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933349</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/viewpageattachments.action?pageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:35:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:35:15.017</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933348</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/pages/pageinfo.action?pageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:35:15.013</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:40:15.017</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933351</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action?spacesSelectedTab=all]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:40:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-10 09:10:15.053</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17858805</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17891549</id>
</element>
</collection>
<property name="version">41</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:45:44.547</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933350</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/spaces/spaceadmin.action?key=O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:40:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:40:15.023</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933353</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/spaces/spacepermissions.action?key=O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 14:01:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 14:01:15.020</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835114</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867878</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 14:03:53.797</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293761</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/listorphanedpages.action?key=O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-10 09:10:15.043</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-10 09:10:15.043</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835113</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867877</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:29:44.357</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835102</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867866</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:25:19.313</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835101</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867865</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:19:35.230</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293764</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/pageinfo.action?pageId=1835120]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835120</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-10 13:10:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-10 13:10:15.030</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835100</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867864</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:18:50.080</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293763</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/Deployments]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835120</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-10 13:09:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-10 13:11:15.017</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835099</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867863</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:15:36.680</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17236077</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17268842</id>
</element>
</collection>
<property name="version">66</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-06-01 16:36:13.000</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835104</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867868</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:29:04.477</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17236076</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17268841</id>
</element>
</collection>
<property name="version">65</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-06-01 16:34:40.200</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835103</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867867</id>
</element>
</collection>
<property name="version">7</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:28:07.080</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">17236075</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">17268840</id>
</element>
</collection>
<property name="version">64</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2011-02-01 09:10:15.647</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645310</id>
<property name="body"><![CDATA[h5. Attendees

# Rich Schramm
# Kevin Gomes

h5. Notes

This meeting was to start sketching out what needs to be done to simply the OASIS data processing flows.

h5. Whiteboard images

# [Board Section 1|^idea.pdf]
# [Board Section 2|^idea-1.pdf]
# [Board Section 3|^idea-2.pdf]
# [Board Section 4|^idea-3.pdf]
# [Board Section 5|^idea-4.pdf]

h5. Action Items

# Define the routing key topologies for data streams (including monitoring, logging, etc. to setup for DataProbe type consumer).
# Take the mapping file from OASIS2SSDS and parse so that extract on tsunami side can construct google protocol buffer messages and publish to RabbitMQ
# Create consumers (or extend MARS consumers) to write message to SSDS tables.
# Move processing that happens in OASIS2SSDS to consumer so that two data streams can be produced.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645308</id>
<property name="body"><![CDATA[In 2012, the Support Engineering Upgrades project set out to clean up, simplify and solidify the OASIS data processing flow to ensure more robust core mooring data.

h5. Design Meetings

# [February 3, 2012]
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579793</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933377</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/2007M1]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 14:40:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-05 14:40:15.020</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17891559</id>
<property name="body"><![CDATA[This document details the notes associated with the M1 Mooring turn for October 2011.

h5. Schedule

|| Milestone || Date ||
| Initial Configuration | 7/7 |
| Final Science Instrument list | 7/15 |
| Instruments Due | 7/29 |
| Oasis Software development| 7/18 - 8/9 |
| Buoy Mechanical modifications | 7/18 - 8/9 |
| Oasis Code Freeze | 8/10 |
| System Testing | 8/11 - 8/24 |
| Sensor installation | 8/25 - 9/20 |
| Dockside Testing | 9/21- 26 |
| Load on Pt Sur | 9/27 |
| Deployment and Recovery | 9/28 |

h5. Sensor Listing

Here is a [Word Doc|M1 February 2012^2011-M1 Sensor.doc] that details the sensors to be deployed on the M1 Mooring in October.  I converted that to a table here:

|| SENSOR || SERIAL NO || SSDS || LOCATION ||
| Oasis-3 | | | tower |
| E-meter | 041342 | 1602 | tower |
| Grnd fault | 2 | 1403 | tower |
| GPS | 80721087 |1468 | tower |
| Radio (Viper?) | | | tower |
| Metsys | 1 | 1397 | tower |
| Windbird | 8 | | tower |
| Sonic | A224007 | | tower |
| AT/RH | 93250 | | tower |
| AsimetLWR | 305 | 1251 | tower |
| AsimetSWR | 338 | 1250 | tower |
| HyperOCR | 229 | 1450 | tower |
| WETStar | 236 | 1425 | tower |
| pCO2 | IRG2-154 | 1743 | tower |
| EK-60 | | | tower |
| ISUS | N/A | 1678 | elevator |
| MicroCAT | 3424 | 1358 | elevator |
| ADCP | 1384 | 1352 | elevator |
| ADCPpower | 010 | | elevator |
| HydroScat | H2010336 | 1390 | elevator |
| HSshutter | SS031014 | | elevator |
| Pump (fluor) | 52578 | | elevator |
| Optode | 131 | 1552 | elevator |
| pH (self-contained) | | | elevator |
| MicroCAT | 3531 | 1314 | 10m cage |
| HyperOCR-Ed | 228 | 1451 | 10m cage |
| Bioshutter | 063 | | 10m cage |
| HyperOCR-Lu | 203 | 1452 | 10m cage |
| Bioshutter | 064 | | 10m cage |
| EK-60 transducer | | | 10m cage |
| MicroCAT | 3777 | 1356 | 20m cage |
| HyperOCR-Ed | 295 | 1625 | 20m cage |
| Bioshutter | 094 | | 20m cage |
| HyperOCR-Lu | 254 | 1627 | 20m cage |
| Bioshutter | 096 | | 20m cage |
| HydroScat-2 | H2061255 | 1629 | 215m nilspin |
| UIM | 0067 | 1489 | 215m nilspin |
| ECO-FLNTUSB | 237 | 1470 | 215m nilspin |
| Deep O2 | | | 215m nilspin |
| SBE-37-IM at 40 | | | |
| SBE-37-IM at 60p | | | |
| SBE-37-IM at 80 | | | |
| SBE-37-IM at 100p | | | |
| SBE-37-IM at 150 | | | |
| SBE-37-IM at 200p | | | |
| SBE-37-IM at 250 | | | |
| SBE-37-IM at 300p | | | |]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933376</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/listpages-dirview.action?key=O3S&openId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 14:40:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-05 14:40:15.017</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835098</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867862</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:13:58.883</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="SpaceDescription" package="com.atlassian.confluence.spaces">
<id name="id">1835089</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867853</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.963</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:27:07.373</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">1835105</id>
</element>
<element class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">18579787</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
<collection name="labellings"><element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">29523973</id>
</element>
<element class="Labelling" package="com.atlassian.confluence.labels"><id name="id">30867463</id>
</element>
</collection>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933375</id>
<property name="viewCount">12</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=1835140]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 14:32:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:14:15.047</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933374</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=O3S&fromPageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 14:25:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-05 14:25:15.023</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">1835096</id>
<property name="title"><![CDATA[Home]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867860</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 12:37:04.993</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933381</id>
<property name="viewCount">9</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/2007M1+*scheduled+for+deployment+on+7-Nov-2007]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 15:10:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-11-06 16:15:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933380</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=1835140]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 15:10:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-05 15:10:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933379</id>
<property name="viewCount">40</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/OASIS3+Support+Engineering+Wiki]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 14:41:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:12:15.023</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933378</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/2007M1]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 14:41:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-05 15:08:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933382</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/2007M1+*scheduled+for+deployment+on+7-Nov-2007]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-05 15:12:15.013</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-05 15:12:15.013</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4816900</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 11:01:08.433</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 11:01:08.433</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796677</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829436</id>
</element>
</collection>
<property name="version">53</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2010-04-02 10:08:04.107</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4816899</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[COMMENT]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 11:01:08.433</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 11:01:08.433</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4816898</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[CREATEATTACHMENT]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 11:01:08.433</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 11:01:08.433</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4816897</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 11:00:58.290</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 11:00:58.290</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604634</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/copypage.action?idOfPageToCopy=1835140&spaceKey=O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-05-02 08:16:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:16:15.023</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604636</id>
<property name="viewCount">4</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=3637814]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-05-02 08:21:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:44:15.030</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604637</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/2008M2+*Deployed+on+11-Apr-2008]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-05-02 08:26:15.037</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:47:15.020</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604638</id>
<property name="viewCount">3</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/OASIS3+Support+Engineering+Wiki]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-05-02 08:35:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:49:15.017</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604639</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/2008M2+*Deployed+on+11-Apr-2008]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-05-02 08:38:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:38:15.030</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604640</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-05-02 11:34:15.057</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 11:34:15.057</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293897</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action?spacesSelectedTab=all&maxRecentlyUpdatedPageCount=20]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-12-19 12:55:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-12-19 12:55:15.027</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4816903</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[EXPORTSPACE]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 11:01:08.437</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 11:01:08.437</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4816901</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 11:01:08.433</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 11:01:08.433</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">4816902</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[EXPORTPAGE]]></property>
<property name="group"><![CDATA[Onsite Distribution List]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2008-06-03 11:01:08.437</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2008-06-03 11:01:08.437</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670564</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/2008m2.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/oasis.cfg?rev=1.1;content-type=text%2Fplain]
# [SSDS_instruments.xls|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/2008M2_SSDS_ID.xls?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259256</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226466</id>
</element>
</collection>
<property name="version">26</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-30 12:52:01.997</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">26640539</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">26673296</id>
</element>
</collection>
<property name="version">11</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 15:06:32.530</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">26640540</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">26673297</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 15:08:08.857</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259252</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226462</id>
</element>
</collection>
<property name="version">24</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-08 13:32:01.407</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">3637250</id>
<property name="page" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670018</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"/><property name="creationDate">2008-04-11 09:40:14.197</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-11 09:40:14.197</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9798092</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830848</id>
</element>
</collection>
<property name="version">37</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-04-30 09:59:36.093</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">3637249</id>
<property name="page" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670017</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"/><property name="creationDate">2008-04-11 09:37:55.507</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-11 09:37:55.507</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259254</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226464</id>
</element>
</collection>
<property name="version">25</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-30 12:30:06.547</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">3637251</id>
<property name="page" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670019</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">3702785</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"/><property name="creationDate">2008-04-11 10:09:26.827</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-11 10:09:26.827</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">26640533</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">26673290</id>
</element>
</collection>
<property name="version">8</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-09-27 17:07:10.363</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">26640537</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">26673294</id>
</element>
</collection>
<property name="version">10</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 15:05:37.410</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">26640535</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">26673292</id>
</element>
</collection>
<property name="version">9</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 14:50:19.417</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179957</id>
<property name="body"><![CDATA[h2. Mooring Processing overview

!MooringDataFlow.png!]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114486</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841674</id>
<property name="fileName"><![CDATA[idea-4.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:05:55.423</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:05:55.423</property>
<property name="fileSize">179795</property>
<property name="comment"><![CDATA[Board 5]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796683</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829442</id>
</element>
</collection>
<property name="version">54</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-04-06 10:37:50.593</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796685</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829444</id>
</element>
</collection>
<property name="version">55</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-04-06 10:57:48.203</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841671</id>
<property name="fileName"><![CDATA[idea-1.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:05:22.957</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:05:22.957</property>
<property name="fileSize">178009</property>
<property name="comment"><![CDATA[Board 2]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841670</id>
<property name="fileName"><![CDATA[idea.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:05:12.660</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:05:12.660</property>
<property name="fileSize">177301</property>
<property name="comment"><![CDATA[Board 1]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796687</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829446</id>
</element>
</collection>
<property name="version">56</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-04-06 11:06:05.993</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841673</id>
<property name="fileName"><![CDATA[idea-3.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:05:46.727</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:05:46.727</property>
<property name="fileSize">162966</property>
<property name="comment"><![CDATA[Board 4]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">18841672</id>
<property name="fileName"><![CDATA[idea-2.pdf]]></property>
<property name="contentType"><![CDATA[application/pdf]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:05:32.747</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:05:32.747</property>
<property name="fileSize">185506</property>
<property name="comment"><![CDATA[Board 3]]></property>
<property name="attachmentVersion">1</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">3707733</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/2008M2_SSDS_ID.xls?rev=1.1;content-type=text%2Fplain]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2008-05-02 08:43:44.520</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:43:44.520</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796617</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829376</id>
</element>
</collection>
<property name="version">52</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2010-04-02 10:04:21.063</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">3707732</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/oasis.cfg?rev=1.1;content-type=text%2Fplain]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2008-05-02 08:43:44.520</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:43:44.520</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796616</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829375</id>
</element>
</collection>
<property name="version">51</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2010-04-02 10:00:23.907</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11796614</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11829373</id>
</element>
</collection>
<property name="version">50</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-03-17 11:47:56.387</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">19038486</id>
<property name="page" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</property>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">19071252</id>
</element>
</collection>
<collection name="outgoingLinks"><element class="OutgoingLink" package="com.atlassian.confluence.links"><id name="id">19138271</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2012-04-16 13:52:05.600</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2012-04-16 13:52:36.423</property>
<property name="versionComment"><![CDATA[]]></property>
<collection name="historicalVersions"><element class="Comment" package="com.atlassian.confluence.pages"><id name="id">19038487</id>
</element>
</collection>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195600</id>
<property name="body"><![CDATA[(!)
(!)
(!)
(!)
(!) WARNING: This page is now located in the SE-IE Markdown Git project located [here|https://bitbucket.org/mbari/se-ie-doc/src/master/docs/systems/oasis/m1-mooring-turn.md]. You can check out that project, edit the documentation and push back to BitBucket and it will automatically be deployed on [MBARI's documenation site|https://docs.mbari.org/internal/se-ie-doc/systems/oasis/m1-mooring-turn/]
(!)
(!)
(!)
(!)

This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|SSDS:Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[SSDS:main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 
41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M1 deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC
# Confirm that the processing executed properly.  Sometimes mangled timestamp data weasels its way into the data stream causing instrument netcdf files to be named with bogus start dates.  (This can also happen during a deployment and is one of the maintenance tasks one should follow to keep the data flowing to where it needs to go.)  The combine__.pl scripts will then create the OceanSITES formatted files encompassing the dates of all the instrument netcdf files.  Incorrect instrument file names will create incorrect OS_MBARI* file names causing CenCOOS and NDBC/Ifremer to complain about the correctly named file not being updated with new data.  The fix involves a purging of the bad files, double checking the metadata in SSDS and reprocessing, with perhaps additional checks in the instrument processing perl code to skip over bad records.  This is best done at the Unix command line by cd'ing to the deployment directory, e.g. 
{noformat}
cd /mbari/deployments/m1/201010
ls -lrt
{noformat}
and removing files that have bogus dates that do not represent the deployment start date.  You should also remove all the directories and files in the gifs/ subdirectory.  These will all get recreated when you run DStoNetCDF.pl and the combine__.pl scripts.  With luck, simply removing the bad files and rerunning the processing scripts will fix things.  If not, identify where the bad dates are coming from and fix as appropriate.


Mike McCann (First edit: 30 October 2007, Last updated: 1 March 2012)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933327</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/spaces/createspace-start.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 12:37:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 12:37:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933328</id>
<property name="viewCount">75</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 12:38:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:49:15.013</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933333</id>
<property name="viewCount">14</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/Home]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:12:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:26:15.023</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933332</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/listpages-dirview.action?key=O3S&openId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:12:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-10-03 13:12:15.023</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933335</id>
<property name="viewCount">14</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/Wishlist]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:12:15.030</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:47:15.023</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">1933336</id>
<property name="viewCount">29</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=1835090]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-10-03 13:14:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:46:15.023</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10356341</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10389056</id>
</element>
</collection>
<property name="version">40</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-05-04 13:58:10.527</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406583</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[EDITBLOG]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406584</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[EDITSPACE]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406581</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[REMOVECOMMENT]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">34406582</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[REMOVEBLOG]]></property>
<property name="group"/><property name="userName"><![CDATA[kgomes]]></property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2026-02-04 08:34:59.108</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2026-02-04 08:34:59.108</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293796</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/OASIS3+Support+Engineering+Wiki?showChildren=false]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-11-06 16:14:15.020</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-11-06 16:14:15.020</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293797</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/OASIS3+Support+Engineering+Wiki?showChildren=true]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-11-06 16:14:15.043</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-11-06 16:14:15.043</property>
</object>
<object class="SpacePermission" package="com.atlassian.confluence.security">
<id name="id">19300604</id>
<property name="space" class="Space" package="com.atlassian.confluence.spaces"><id name="id">2064386</id>
</property>
<property name="type"><![CDATA[VIEWSPACE]]></property>
<property name="group"><![CDATA[U_Employees]]></property>
<property name="userName"/><property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-06-18 17:29:23.133</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-06-18 17:29:23.133</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195625</id>
<property name="body"><![CDATA[{noformat}
From: Schramm, Rich rich@mbari.org
Sent: Tuesday, November 06, 2007 3:26 PM
To: Oasis Mooring Discussion List
Subject: oasis occasional bogus oasis timestamp explanation...
Several OSG folks have mentioned annoyance at some of the wacko time-stamped
files that getcreated because of occasional garbled transmissions. The oasis
system is remarkably able tore-request the missing records on subsequent
downloads, however there are occasionally somegenerated garbage files that
remain to be manually cleaned out. I believe I understand where they are
sneaking through the extraction process and what wewould need to do to
fix it should we wish too. This 'fix' would not effect the raw datafiles,
only the generated errors files.

In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410
The code snippet below runs in a while-loop and when errors are encountered
it kicks out ofwherever its at using a "continue" to cause the loop to
seek-out the next sync byte in theraw stream... It appears while there
are checks for bad record types etc. The only time checkis for time=0L
(see (klh)08Aug01 below)

My suspicion is that the occasional garbled timestamp passes the unix conversion
to a "valid" gmt but is nonsense to us. The fix would be to reject times "too old"
or into the future by adding a test immediately afterKents 0 test and prior to
computing a new value for the global 'itime'. (we don't want to allowitime to
get set to bogus yyyyddd  because its used to generate filenames...hence the
problem....)"into the future" is easily determined from the cpu clock... what
a reasonable "too old" would need to be decided though we are trying to
clip wild things like more than a couple of years ago... If we don't want
to fix the extract - no biggie as far as Im concerned, we can just tuck this
bit of knowledge away for future reference Thoughts anyone.-Rich:
:
:
:
hdr.log_type = buffer0;
hdr.log_nmbr = getHdrWord(&buffer1, fileType);
hdr.log_len = getHdrWord(&buffer3, fileType);
hdr.log_time = getHdrLong(&buffer5, fileType);tp = gmtime( (time_t *)&hdr.log_time );
/* Error check for bad header (klh) 08aug01*/
if(tp==0L) { print_error("Invalid header log time in %s, record %d (type %d)\n", filename, hdr.log_nmbr,hdr.log_type);continue; } if ( y2k )
itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;
else
itime = (1000 * tp->tm_year) + tp->tm_yday + 1;dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)
+ (60 * tp->tm_min) + tp->tm_sec) / 86400.0;len_got = cc - 9; /* compute amount of log data gotten*/
if ( len_got > 0 )
   memmove( buffer, buffer + 9, sizeof(buffer) - 9 );
else if ( len_got < 0 ) /* Move log data to start of buffer*/
{
  printf("Incomplete record header in %s, record %d (type %d)\n",
    filename, hdr.log_nmbr,hdr.log_type);
  continue;
}
:
:
:
:
{noformat}
{noformat}

{noformat}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293794</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/login.action?os_destination=%2Fdisplay%2FO3S%2FOASIS3%2BSupport%2BEngineering%2BWiki]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-11-06 16:13:15.023</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:11:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293795</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/recentlyupdated.action?key=O3S]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-11-06 16:14:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-11-06 16:14:15.017</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293800</id>
<property name="viewCount">8</property>
<property name="url"><![CDATA[http://oceana:8081/pages/editpage.action?pageId=2162859]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-11-06 16:29:15.043</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-11-07 09:29:15.020</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293801</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/Wishlist]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-11-07 09:23:15.120</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-11-07 09:23:15.120</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">3707731</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/2008m2.can?rev=1.1;content-type=text%2Fplain]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2008-05-02 08:43:44.520</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:43:44.520</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293798</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/2007M1+*Deployed+on+6-Nov-2007]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-11-06 16:17:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-11-06 16:26:15.027</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">2293799</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/pages/createpage.action?spaceKey=O3S&fromPageId=1835091]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162859</id>
</property>
<property name="creatorName"/><property name="creationDate">2007-11-06 16:29:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2007-11-06 16:29:15.027</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">26837005</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 15:12:44.687</property>
<property name="fileSize">21450</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">25</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">26837004</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 14:55:06.207</property>
<property name="fileSize">21614</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">24</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16777269</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16810037</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 07:49:47.603</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">26837003</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 11:00:27.190</property>
<property name="fileSize">21723</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">23</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16777268</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16810036</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 06:27:37.890</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973855</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:57:43.597</property>
<property name="fileSize">21851</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">21</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973854</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:49:37.647</property>
<property name="fileSize">21733</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">20</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637817</id>
<property name="title"><![CDATA[2008M2 *Deployed on 11-Apr-2008]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670567</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2008-05-02 08:15:36.643</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:20:25.903</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973857</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:41:52.577</property>
<property name="fileSize">39069</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">9</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973856</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:58:39.607</property>
<property name="fileSize">21959</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">22</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637815</id>
<property name="title"><![CDATA[2008M2 *Deployed on ?-Apr-2008]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670565</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2008-05-02 08:15:36.643</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:15:36.643</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797946</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830713</id>
</element>
</collection>
<property name="version">35</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-03-09 15:44:12.127</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16777266</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16810034</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 06:27:16.287</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16777283</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16810051</id>
</element>
</collection>
<property name="version">6</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:39:24.230</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10911787</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944554</id>
</element>
</collection>
<property name="version">43</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-10-20 09:56:17.793</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637821</id>
<property name="title"><![CDATA[2008M2 *Deployed on 11-Apr-2008]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670571</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2008-05-02 08:15:36.643</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:37:28.877</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16777277</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16810045</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 07:53:38.250</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372126</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404870</id>
</element>
</collection>
<property name="version">32</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-03-09 09:47:31.360</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637819</id>
<property name="title"><![CDATA[2008M2 *Deployed on 11-Apr-2008]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670569</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2008-05-02 08:15:36.643</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:24:18.157</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16777281</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16810049</id>
</element>
</collection>
<property name="version">40</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2009-04-29 12:37:52.620</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604513</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[http://oceana:8081/dashboard.action]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-17 08:22:15.067</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-17 08:22:15.067</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">26837006</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 11:08:06.987</property>
<property name="fileSize">39931</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">10</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">16777279</id>
<property name="title"><![CDATA[M1,M2 and OA Downloads]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">16810047</id>
</element>
</collection>
<property name="version">5</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:16.287</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:36:40.353</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">3637823</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">3670573</id>
</element>
</collection>
<property name="version">37</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:13:13.433</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973829</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 07:48:30.010</property>
<property name="fileSize">15616</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">4</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973828</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 07:33:05.637</property>
<property name="fileSize">12913</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">3</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973827</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 07:07:37.473</property>
<property name="fileSize">8131</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">2</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973826</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 06:27:37.837</property>
<property name="fileSize">133</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">1</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973825</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 15:20:04.863</property>
<property name="fileSize">20765</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">26</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973837</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:28:54.987</property>
<property name="fileSize">38864</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">6</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973836</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:28:46.660</property>
<property name="fileSize">38864</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">5</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973835</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 08:27:31.127</property>
<property name="fileSize">14667</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">4</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973834</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 08:25:22.937</property>
<property name="fileSize">13696</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">3</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973833</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 08:11:56.917</property>
<property name="fileSize">6922</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">2</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973832</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 07:53:38.250</property>
<property name="fileSize">133</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">1</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973831</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2014-07-21 15:22:41.117</property>
<property name="fileSize">39543</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">11</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797971</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830737</id>
</element>
</collection>
<property name="version">36</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-04-29 15:21:07.837</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973830</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 07:50:45.037</property>
<property name="fileSize">15617</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">5</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973844</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:13:01.487</property>
<property name="fileSize">18404</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">10</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973845</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:14:26.427</property>
<property name="fileSize">18413</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">11</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973842</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:06:20.957</property>
<property name="fileSize">18323</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">8</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973843</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:09:28.840</property>
<property name="fileSize">18322</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">9</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973840</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 07:51:25.637</property>
<property name="fileSize">15615</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">6</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973841</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:03:58.173</property>
<property name="fileSize">18297</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">7</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973838</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:31:09.460</property>
<property name="fileSize">38857</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">7</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9372106</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9404851</id>
</element>
</collection>
<property name="version">31</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-11-24 10:05:07.423</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973839</id>
<property name="fileName"><![CDATA[Oasis Vipr Download Sequence]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 07:53:38.250</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 09:40:45.637</property>
<property name="fileSize">38863</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">8</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973831</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973852</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:44:23.227</property>
<property name="fileSize">21737</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">18</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973853</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:44:47.110</property>
<property name="fileSize">21740</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">19</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973850</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:28:11.077</property>
<property name="fileSize">19747</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">16</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973851</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:40:34.223</property>
<property name="fileSize">21672</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">17</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973848</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-04-15 10:23:22.243</property>
<property name="fileSize">18463</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">14</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973849</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-04-15 10:25:18.437</property>
<property name="fileSize">18478</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">15</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973846</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:15:05.750</property>
<property name="fileSize">18405</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">12</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="Attachment" package="com.atlassian.confluence.pages">
<id name="id">16973847</id>
<property name="fileName"><![CDATA[OASIS Downloads]]></property>
<property name="contentType"><![CDATA[text/xml]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777265</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2011-04-15 06:27:37.837</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2011-04-15 10:18:43.920</property>
<property name="fileSize">18454</property>
<property name="comment"><![CDATA[DO NOT EDIT THIS ATTACHMENT.  YOU WILL RUIN YOUR DIAGRAM!]]></property>
<property name="attachmentVersion">13</property>
<property name="originalVersion" class="Attachment" package="com.atlassian.confluence.pages"><id name="id">16973825</id>
</property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">4849685</id>
<property name="viewCount">1</property>
<property name="url"><![CDATA[https://oceana.mbari.org/confluence/display/O3S/OASIS3+Support+Engineering+Wiki]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637814</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-06-03 13:15:15.017</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-06-03 13:15:15.017</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579804</id>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645318</id>
</element>
</collection>
<property name="version">58</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:39:09.343</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579805</id>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645319</id>
</element>
</collection>
<property name="version">59</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:40:12.230</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579806</id>
<property name="title"><![CDATA[2011 M1 October]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645320</id>
</element>
</collection>
<property name="version">3</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-07-07 20:40:04.910</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-07-07 20:52:18.727</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579807</id>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645321</id>
</element>
</collection>
<property name="version">60</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:40:27.637</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579808</id>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645322</id>
</element>
</collection>
<property name="version">61</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:41:04.237</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579809</id>
<property name="title"><![CDATA[M1 October 2011]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645323</id>
</element>
</collection>
<property name="version">4</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2011-07-07 20:40:04.910</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:40:27.650</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858815</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579788</id>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645303</id>
</element>
</collection>
<property name="version">54</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:26:52.010</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579790</id>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645305</id>
</element>
</collection>
<property name="version">55</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:28:45.737</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579791</id>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645306</id>
</element>
</collection>
<property name="version">56</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:44:15.057</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162926</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195692</id>
</element>
</collection>
<property name="version">14</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-11-16 08:41:58.810</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162925</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195691</id>
</element>
</collection>
<property name="version">13</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2007-11-09 15:42:05.530</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579797</id>
<property name="title"><![CDATA[February 3, 2012]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645312</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[kgomes]]></property>
<property name="creationDate">2012-02-03 12:04:08.647</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 12:04:08.647</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579795</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797896</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830664</id>
</element>
</collection>
<property name="version">39</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2009-04-29 12:37:23.333</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162929</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195695</id>
</element>
</collection>
<property name="version">16</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-11-16 11:52:15.517</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">9797895</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">9830663</id>
</element>
</collection>
<property name="version">38</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2008-05-02 08:46:05.477</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">2162928</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">2195694</id>
</element>
</collection>
<property name="version">15</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2007-11-16 10:21:10.833</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579802</id>
<property name="title"><![CDATA[OASIS Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645316</id>
</element>
</collection>
<property name="version">57</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 11:55:21.913</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579801</id>
<property name="title"><![CDATA[Mooring Processing]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645315</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[brian]]></property>
<property name="creationDate">2008-04-02 11:57:23.537</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 16:38:46.150</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114486</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259316</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226519</id>
</element>
</collection>
<property name="version">27</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-09-30 12:53:19.247</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="ReferralLink" package="com.atlassian.confluence.links">
<id name="id">3604633</id>
<property name="viewCount">2</property>
<property name="url"><![CDATA[http://oceana:8081/display/O3S/2007M1+*Deployed+on+6-Nov-2007]]></property>
<property name="sourceContent" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-05-02 08:14:15.027</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-05-02 08:14:15.027</property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259318</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226521</id>
</element>
</collection>
<property name="version">28</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-10-08 13:19:15.573</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579771</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645286</id>
</element>
</collection>
<property name="version">67</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:16:05.400</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">6259320</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">6226523</id>
</element>
</collection>
<property name="version">29</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2008-10-08 14:30:26.127</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579777</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645292</id>
</element>
</collection>
<property name="version">46</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:17:01.527</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11240445</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11273182</id>
</element>
</collection>
<property name="version">49</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-03-16 21:28:47.483</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579778</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645293</id>
</element>
</collection>
<property name="version">47</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:20:42.827</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579775</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645290</id>
</element>
</collection>
<property name="version">45</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:15:18.437</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11240443</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11273180</id>
</element>
</collection>
<property name="version">48</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-03-16 21:27:25.397</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579782</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645297</id>
</element>
</collection>
<property name="version">50</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:23:13.327</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579779</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645294</id>
</element>
</collection>
<property name="version">48</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:20:49.303</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579780</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645295</id>
</element>
</collection>
<property name="version">49</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:21:11.363</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579785</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645300</id>
</element>
</collection>
<property name="version">52</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:25:50.710</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10911785</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944552</id>
</element>
</collection>
<property name="version">42</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-10-20 08:16:56.887</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579786</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645301</id>
</element>
</collection>
<property name="version">53</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:26:14.190</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">10911784</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">10944551</id>
</element>
</collection>
<property name="version">41</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2009-09-30 11:07:38.320</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579783</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645298</id>
</element>
</collection>
<property name="version">51</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:25:09.793</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579784</id>
<property name="title"><![CDATA[2007M1 *Deployed on 6-Nov-2007]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645299</id>
</element>
</collection>
<property name="version">12</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-05 14:24:44.267</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-11-06 16:24:38.987</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835140</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">11240442</id>
<property name="title"><![CDATA[OASIS Mooring turn]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">11273179</id>
</element>
</collection>
<property name="version">47</property>
<property name="creatorName"><![CDATA[mccann]]></property>
<property name="creationDate">2007-10-29 10:49:47.743</property>
<property name="lastModifierName"><![CDATA[mccann]]></property>
<property name="lastModificationDate">2010-03-05 10:18:00.237</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162834</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579770</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645285</id>
</element>
</collection>
<property name="version">44</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2012-02-03 09:13:53.413</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="Page" package="com.atlassian.confluence.pages">
<id name="id">18579768</id>
<property name="title"><![CDATA[OASIS3 Support Engineering Wiki]]></property>
<collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645283</id>
</element>
</collection>
<property name="version">43</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.993</property>
<property name="lastModifierName"><![CDATA[kgomes]]></property>
<property name="lastModificationDate">2011-07-07 20:36:45.507</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835090</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830908</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadta, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798154</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645467</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|SSDS:Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[SSDS:main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 
41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M1 deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579959</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645470</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|SSDS:Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[SSDS:main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 
41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M1 deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

# Confirm that the processing executed properly.  Sometimes mangled timestamp data weasels its way into the data stream causing instrument netcdf files to be named with bogus start dates.  (This can also happen during a deployment and is one of the maintenance tasks one should follow to keep the data flowing to where it needs to go.)  The combine__.pl scripts will then create the OceanSITES formatted files encompassing the dates of all the instrument netcdf files.  Incorrect instrument file names will create incorrect OS_MBARI* file names causing CenCOOS and NDBC/Ifremer to complain about the correctly named file not being updated with new data.  The fix involves a purging of the bad files, double checking the metadata in SSDS and reprocessing, with perhaps additional checks in the instrument processing perl code to skip over bad records.  This is best done at the Unix command line by cd'ing to the deployment directory, e.g. 
{noformat}
cd /mbari/deployments/m1/201010
ls -lrt
{noformat}
and removing files that have bogus dates that do not represent the deployment start date.  You should also remove all the files directories and files in the gifs/ subdirectory.  These will all get recreated when you run DStoNetCDF.pl and the combine__.pl scripts.  With luck simply removing the bad files and rerunning the processing scripts will fix things.  If not, identify where the bad dates are coming from and fix as appropriate.


Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579962</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645469</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|SSDS:Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[SSDS:main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 
41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M1 deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

# Confirm that the processing executed properly.  Sometimes mangled timestamp data weasels its way into the data stream causing instrument netcdf files to be named with bogus start dates.  (This can also happen during a deployment and is one of the maintenance tasks one should follow to keep the data flowing to where it needs to go.)  The combine__.pl scripts will then create the OceanSITES formatted files encompassing the dates of all the instrument netcdf files.  Incorrect instrument file names will create incorrect OS_MBARI* file names causing CenCOOS and NDBC/Ifremer to complain about the correctly named file not being updated with new data.  The fix involves a purging of the bad files, double checking the metadata in SSDS and reprocessing, with perhaps additional checks in the instrument processing perl code to skip over bad records.  This is best done at the Unix command line by cd'ing to the deployment directory, e.g. 
{noformat}
cd /mbari/deployments/m1/201010
ls -lrt
{noformat}

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579961</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16810034</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation tsunami as user 'oasisa'.
* Scripts and executables are in /oasis/bin
* Downloaded data go to /oasis/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /oasis/m1 /oasis/m2 etc. and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See /oasis/bin/oasis.cron or do a crontab \-l to see current schedule
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777266</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11273182</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11240445</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11273180</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11240443</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11273179</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11240442</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16810037</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation tsunami as user 'oasisa'.
* Scripts and executables are in /oasis/bin
* Downloaded data go to /oasis/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /oasis/m1 /oasis/m2 etc. and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See /oasis/bin/oasis.cron or do a crontab \-l to see current schedule
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}

\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777269</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16810036</id>
<property name="body"><![CDATA[{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Oasis downloads an are run via cron on workstation tsunami as user 'oasisa'.
* Scripts and executables are in /oasis/bin
* Downloaded data go to /oasis/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /oasis/m1 /oasis/m2 etc. and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See /oasis/bin/oasis.cron or do a crontab \-l to see current schedule
\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777268</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16810049</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]
## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployments

# [2007M1 *Deployed on 6-Nov-2007]

# [2008M2 *Deployed on 11-Apr-2008]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777281</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16810047</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation tsunami as user 'oasisa'.
* Scripts and executables are in /oasis/bin
* Downloaded data go to /oasis/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /oasis/m1 /oasis/m2 etc. and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See /oasis/bin/oasis.cron or do a crontab \-l to see current schedule
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below... currently only OA1 and OA2 have viprs. Old teledesigns differ mainly that tcp only goes to Mt Toro, so the connection is immeadiate, and also the getdata command gets all records instead of chunks of 30. (30 recored chunks were added to vipr downloads to allow radio buffers to empty before power gets yanked...

&nbsp; &nbsp;
\\
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777279</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16810045</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation tsunami as user 'oasisa'.
* Scripts and executables are in /oasis/bin
* Downloaded data go to /oasis/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /oasis/m1 /oasis/m2 etc. and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See /oasis/bin/oasis.cron or do a crontab \-l to see current schedule
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}

\\
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777277</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">16810051</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation tsunami as user 'oasisa'.
* Scripts and executables are in /oasis/bin
* Downloaded data go to /oasis/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /oasis/m1 /oasis/m2 etc. and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See /oasis/bin/oasis.cron or do a crontab \-l to see current schedule
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below... currently only OA1 and OA2 have viprs.

Old teledesigns differ mainly in that:
* tcp only goes to Mt Toro, so the connection is immeadiate so now timeout loop on connection
* the getdata command gets all records instead of chunks of 30. (30 record chunks were added to vipr downloads to allow radio tcp buffers to empty before power gets yanked)
* teledesign download uses uuencode (vipr download is straight binary mode)

&nbsp; &nbsp;
\\
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">16777283</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830848</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadta, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 29 April 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798092</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867910</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [MtToro Cfg|http://oceana.shore.mbari.org/ProjectLibrary/Microwave/toro%20sub%20net.xls]
## [Other]

h3. Deployments


h4. 2007M1

# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835146</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867909</id>
<property name="body"><![CDATA[Roadmap
{{What's where on OASIS-3}}

{{09/28/07}}

{{\_____________________________________________________________________________\_}}

{{CAN #2 Default 0 4 7 0 4 1 4 4}}

{{Current assignment: M1 PwrPerm: 0000 0100 0111 0000 0100 0001 0100 0100}}

{{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 10M uCat-------+&nbsp;&nbsp;&nbsp; \|\|\|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \|&nbsp; \|&nbsp;&nbsp;&nbsp; \|}}

{{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HR2-----------------+\|\|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \|&nbsp;&nbsp;\|&nbsp;&nbsp;&nbsp; \|}}

{{ISUS-----------------+\| \| \| \| \|}}

{{20M uCat--------------\+ \| \| \| \|}}

{{Frequency: 461.400MHZ \| \| \| \|}}

{{(orange) 0M uCat-----------------------\+ \| \| \|}}

{{GF Board # 0 HR3----------------------------------\+ \| \|}}

{{Metsys----------------------------------\+ \|}}

{{ADCP-----------------------------------------\+}}

{{Bin to Hex:}}

{{Inductive Modem Serial # 529 0000=0 0001=1 1000=8 1001=9}}

0010=2 0011=3 1010=A 1011=B

0100=4 0101=5 1100=C 1101=D

0110=6 0111=7 1110=E 1111=F

Instrument Power bit Serial Port UART Connector Analog Notes

(Local)

Terminal - 0 0 1A

Spare - - - 1B

Spare - - - 1C

Spare Serial 5 5 4 1D

Tower Wetstar 13 - - 1E 5

Battery/emeter - 4 4 1F Note 4

(Top Deck)

Radio 1 1 1 2A (External)

GPS 12 12 5 2B (External)

\* Metsys 6 6 4 2C

Asimet LWR 15 15 5 2D

Asimet HRH 7 7 4 2E

Asimet SWR 23 23 6 2F

(Mid Deck)

OCR 10 10 4 3A

OCR Data Dwn - - - 3B

\* HR3 8 8 4 3C

Echo Sounder 11 11 5 3D

pCO2 3 3 3 3E

pCO2 Pump 9 (9) (4) 3F

(Elevator Cage)

\* ISUS 21 21 6 4A

\* 0M ser. uCat 14 14 5 4B

\* ADCP 2 2 2 4C

HS2 16 16 5 4D

SBE Pump 19 (19) (6) 4E

Optode 24 24 6 4F

(Secondary Elevator Cage)

Not Installed - - - 5A

Not Installed - - - 5B

Not Installed - - - 5C

Not Installed - - - 5D

Not Installed - - - 5E

Not Installed - - - 5F

(10 Meter Cage)

10M OCR - - - 6A

Spare Serial 17 17 5 6B

T-String 27 27 7 6C Wired in parallel

200m HS2 28 28 7 6C Wired in parallel

\* HR2 22 22 6 6D

\* 10M ser. uCat 26 26 7 6E

\* 20M ser. uCat 20 20 6 6F

(20 Meter Cage)

Not Installed - - - 7A

Not Installed - - - 7B

Not Installed - - - 7C

Not Installed - - - 7D

Not Installed - - - 7E

Not Installed - - - 7F

(Spare Connector)

Not Installed - - - 8A

Not Installed - - - 8B

Not Installed - - - 8C

Not Installed - - - 8D

Not Installed - - - 8E

Not Installed - - - 8F

Ground Fault 25 25 7 -

OASIS - - - - 0-3 Note 3

Notes: 1.

2.

3. Temperature, batt voltage, pressure

4. GND-1,PWR-2,E-Meter RXD-3,SW GND-4

\* Instrument is power permed

Uart Cheat:

0 Dedicated to Console 4 Ports 4-10

1 Dedicated to Radio 5 Ports 11-17

2 Dedicated to ADCP 6 Ports 18-24

3 Dedicated to PCO2 7 Ports 25-31
}}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835145</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867908</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [MtToro Cfg|http://oceana.shore.mbari.org/ProjectLibrary/Microwave/toro%20sub%20net.xls]
## [Other]

h3. Deployments


h4. 2007M1

# revised&nbsp;roadmap
# preliminary&nbsp;[roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835144</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867907</id>
<property name="body"><![CDATA[Roadmap
{{What's where on OASIS-3}}

{{09/28/07}}

{{\_____________________________________________________________________________\_}}

{{CAN #2 Default 0 4 7 0 4 1 4 4}}

{{Current assignment: M1 PwrPerm: 0000 0100 0111 0000 0100 0001 0100 0100}}

{{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }}{{{}10M uCat-------+&nbsp;&nbsp;&nbsp; \|\|\|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \|&nbsp; \|&nbsp;&nbsp;&nbsp; \|}}

{{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HR2-----------------+\|\|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \|&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \|&nbsp;&nbsp;\|&nbsp;&nbsp;&nbsp; \|}}

{{ISUS-----------------+\| \| \| \| \|}}

{{20M uCat--------------\+ \| \| \| \|}}

{{Frequency: 461.400MHZ \| \| \| \|}}

{{(orange) 0M uCat-----------------------\+ \| \| \|}}

{{GF Board # 0 HR3----------------------------------\+ \| \|}}

{{Metsys----------------------------------\+ \|}}

{{ADCP-----------------------------------------\+}}

{{Bin to Hex:}}

{{Inductive Modem Serial # 529 0000=0 0001=1 1000=8 1001=9}}

0010=2 0011=3 1010=A 1011=B

0100=4 0101=5 1100=C 1101=D

0110=6 0111=7 1110=E 1111=F

Instrument Power bit Serial Port UART Connector Analog Notes

(Local)

Terminal - 0 0 1A

Spare - - - 1B

Spare - - - 1C

Spare Serial 5 5 4 1D

Tower Wetstar 13 - - 1E 5

Battery/emeter - 4 4 1F Note 4

(Top Deck)

Radio 1 1 1 2A (External)

GPS 12 12 5 2B (External)

\* Metsys 6 6 4 2C

Asimet LWR 15 15 5 2D

Asimet HRH 7 7 4 2E

Asimet SWR 23 23 6 2F

(Mid Deck)

OCR 10 10 4 3A

OCR Data Dwn - - - 3B

\* HR3 8 8 4 3C

Echo Sounder 11 11 5 3D

pCO2 3 3 3 3E

pCO2 Pump 9 (9) (4) 3F

(Elevator Cage)

\* ISUS 21 21 6 4A

\* 0M ser. uCat 14 14 5 4B

\* ADCP 2 2 2 4C

HS2 16 16 5 4D

SBE Pump 19 (19) (6) 4E

Optode 24 24 6 4F

(Secondary Elevator Cage)

Not Installed - - - 5A

Not Installed - - - 5B

Not Installed - - - 5C

Not Installed - - - 5D

Not Installed - - - 5E

Not Installed - - - 5F

(10 Meter Cage)

10M OCR - - - 6A

Spare Serial 17 17 5 6B

T-String 27 27 7 6C Wired in parallel

200m HS2 28 28 7 6C Wired in parallel

\* HR2 22 22 6 6D

\* 10M ser. uCat 26 26 7 6E

\* 20M ser. uCat 20 20 6 6F

(20 Meter Cage)

Not Installed - - - 7A

Not Installed - - - 7B

Not Installed - - - 7C

Not Installed - - - 7D

Not Installed - - - 7E

Not Installed - - - 7F

(Spare Connector)

Not Installed - - - 8A

Not Installed - - - 8B

Not Installed - - - 8C

Not Installed - - - 8D

Not Installed - - - 8E

Not Installed - - - 8F

Ground Fault 25 25 7 -

OASIS - - - - 0-3 Note 3

Notes: 1.

2.

3. Temperature, batt voltage, pressure

4. GND-1,PWR-2,E-Meter RXD-3,SW GND-4

\* Instrument is power permed

Uart Cheat:

0 Dedicated to Console 4 Ports 4-10

1 Dedicated to Radio 5 Ports 11-17

2 Dedicated to ADCP 6 Ports 18-24

3 Dedicated to PCO2 7 Ports 25-31
}}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835143</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867914</id>
<property name="body"><![CDATA[# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835150</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867913</id>
<property name="body"><![CDATA[
# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835149</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867912</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [MtToro Cfg|http://oceana.shore.mbari.org/ProjectLibrary/Microwave/toro%20sub%20net.xls]
## [Other]

h3. Deployments


h4. 2007M1
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835148</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867911</id>
<property name="body"><![CDATA[Roadmap]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835147</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867917</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835153</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867916</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [MtToro Cfg|http://oceana.shore.mbari.org/ProjectLibrary/Microwave/toro%20sub%20net.xls]
## [Other]

h3. Deployments

# [2007M1]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835152</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867915</id>
<property name="body"><![CDATA[# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835151</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867887</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments

h4. 2007M1
# Roadmap
# oasis.cfg


h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835123</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867888</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# [Roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New Folder/OSG_Library/New Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835124</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867889</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# roadmap
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835125</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867890</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New Folder/OSG_Library/New Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835126</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867883</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835119</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645323</id>
<property name="body"><![CDATA[This document details the notes associated with the M1 Mooring turn for October 2011.

h5. Schedule

|| Milestone || Date ||
| Initial Configuration | 7/7 |
| Final Science Instrument list | 7/15 |
| Instruments Due | 7/29 |
| Oasis Software development| 7/18 - 8/9 |
| Buoy Mechanical modifications | 7/18 - 8/9 |
| Oasis Code Freeze | 8/10 |
| System Testing | 8/11 - 8/24 |
| Sensor installation | 8/25 - 9/20 |
| Dockside Testing | 9/21- 26 |
| Load on Pt Sur | 9/27 |
| Deployment and Recovery | 9/28 |

h5. Sensor Listing

Here is a [Word Doc|M1 October 2011^2011-M1 Sensor.doc] that details the sensors to be deployed on the M1 Mooring in October.  I converted that to a table here:

|| SENSOR || SERIAL NO || SSDS || LOCATION ||
| Oasis-3 | | | tower |
| E-meter | 041342 | 1602 | tower |
| Grnd fault | 2 | 1403 | tower |
| GPS | 80721087 |1468 | tower |
| Radio (Viper?) | | | tower |
| Metsys | 1 | 1397 | tower |
| Windbird | 8 | | tower |
| Sonic | A224007 | | tower |
| AT/RH | 93250 | | tower |
| AsimetLWR | 305 | 1251 | tower |
| AsimetSWR | 338 | 1250 | tower |
| HyperOCR | 229 | 1450 | tower |
| WETStar | 236 | 1425 | tower |
| pCO2 | IRG2-154 | 1743 | tower |
| EK-60 | | | tower |
| ISUS | N/A | 1678 | elevator |
| MicroCAT | 3424 | 1358 | elevator |
| ADCP | 1384 | 1352 | elevator |
| ADCPpower | 010 | | elevator |
| HydroScat | H2010336 | 1390 | elevator |
| HSshutter | SS031014 | | elevator |
| Pump (fluor) | 52578 | | elevator |
| Optode | 131 | 1552 | elevator |
| pH (self-contained) | | | elevator |
| MicroCAT | 3531 | 1314 | 10m cage |
| HyperOCR-Ed | 228 | 1451 | 10m cage |
| Bioshutter | 063 | | 10m cage |
| HyperOCR-Lu | 203 | 1452 | 10m cage |
| Bioshutter | 064 | | 10m cage |
| EK-60 transducer | | | 10m cage |
| MicroCAT | 3777 | 1356 | 20m cage |
| HyperOCR-Ed | 295 | 1625 | 20m cage |
| Bioshutter | 094 | | 20m cage |
| HyperOCR-Lu | 254 | 1627 | 20m cage |
| Bioshutter | 096 | | 20m cage |
| HydroScat-2 | H2061255 | 1629 | 215m nilspin |
| UIM | 0067 | 1489 | 215m nilspin |
| ECO-FLNTUSB | 237 | 1470 | 215m nilspin |
| Deep O2 | | | 215m nilspin |
| SBE-37-IM at 40 | | | |
| SBE-37-IM at 60p | | | |
| SBE-37-IM at 80 | | | |
| SBE-37-IM at 100p | | | |
| SBE-37-IM at 150 | | | |
| SBE-37-IM at 200p | | | |
| SBE-37-IM at 250 | | | |
| SBE-37-IM at 300p | | | |]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579809</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867885</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]
# [Deployments]

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835121</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867886</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]
# [Memos and Minutes|Project Memos Minutes]
## [Meeting with Chris, June 11, 2007]
## [ESP GUI Demo and Questions|2007_09_05]

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835122</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645320</id>
<property name="body"><![CDATA[This document details the notes associated with the M1 Mooring turn for October 2011.

h5. Schedule

|| Milestone || Date ||
| Initial Configuration | 7/7 |
| Final Science Instrument list | 7/15 |
| Instruments Due | 7/29 |
| Oasis Software development| 7/18 - 8/9 |
| Buoy Mechanical modifications | 7/18 - 8/9 |
| Oasis Code Freeze | 8/10 |
| System Testing | 8/11 - 8/24 |
| Sensor installation | 8/25 - 9/20 |
| Dockside Testing | 9/21- 26 |
| Load on Pt Sur | 9/27 |
| Deployment and Recovery | 9/28 |

h5. Sensor Listing

Here is a [Word Doc|^2011-M1 Sensor.doc] that details the sensors to be deployed on the M1 Mooring in October.  I converted that to a table here:

|| SENSOR || SERIAL NO || SSDS || LOCATION ||
| Oasis-3 | | | tower |
| E-meter | 041342 | 1602 | tower |
| Grnd fault | 2 | 1403 | tower |
| GPS | 80721087 |1468 | tower |
| Radio (Viper?) | | | tower |
| Metsys | 1 | 1397 | tower |
| Windbird | 8 | | tower |
| Sonic | A224007 | | tower |
| AT/RH | 93250 | | tower |
| AsimetLWR | 305 | 1251 | tower |
| AsimetSWR | 338 | 1250 | tower |
| HyperOCR | 229 | 1450 | tower |
| WETStar | 236 | 1425 | tower |
| pCO2 | IRG2-154 | 1743 | tower |
| EK-60 | | | tower |
| ISUS | N/A | 1678 | elevator |
| MicroCAT | 3424 | 1358 | elevator |
| ADCP | 1384 | 1352 | elevator |
| ADCPpower | 010 | | elevator |
| HydroScat | H2010336 | 1390 | elevator |
| HSshutter | SS031014 | | elevator |
| Pump (fluor) | 52578 | | elevator |
| Optode | 131 | 1552 | elevator |
| pH (self-contained) | | | elevator |
| MicroCAT | 3531 | 1314 | 10m cage |
| HyperOCR-Ed | 228 | 1451 | 10m cage |
| Bioshutter | 063 | | 10m cage |
| HyperOCR-Lu | 203 | 1452 | 10m cage |
| Bioshutter | 064 | | 10m cage |
| EK-60 transducer | | | 10m cage |
| MicroCAT | 3777 | 1356 | 20m cage |
| HyperOCR-Ed | 295 | 1625 | 20m cage |
| Bioshutter | 094 | | 20m cage |
| HyperOCR-Lu | 254 | 1627 | 20m cage |
| Bioshutter | 096 | | 20m cage |
| HydroScat-2 | H2061255 | 1629 | 215m nilspin |
| UIM | 0067 | 1489 | 215m nilspin |
| ECO-FLNTUSB | 237 | 1470 | 215m nilspin |
| Deep O2 | | | 215m nilspin |
| SBE-37-IM at 40 | | | |
| SBE-37-IM at 60p | | | |
| SBE-37-IM at 80 | | | |
| SBE-37-IM at 100p | | | |
| SBE-37-IM at 150 | | | |
| SBE-37-IM at 200p | | | |
| SBE-37-IM at 250 | | | |
| SBE-37-IM at 300p | | | |]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579806</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645319</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [Mooring Processing]
# [OASIS Mooring turn]

h3. Development

# [JIRA Tasks|https://oceana.mbari.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10140&status=1]
# [Support Engineering Upgrades]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|2011 M1 October]
## [February 2012|M1 February 2012]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579805</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645322</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [Mooring Processing]
# [OASIS Mooring turn]

h3. Development

# [JIRA Tasks|https://oceana.mbari.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10140&status=1]
# [Support Engineering Upgrades]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|M1 October 2011]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579808</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645321</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [Mooring Processing]
# [OASIS Mooring turn]

h3. Development

# [JIRA Tasks|https://oceana.mbari.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10140&status=1]
# [Support Engineering Upgrades]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|M1 October 2011]
## [February 2012|M1 February 2012]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579807</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645316</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

# [JIRA Tasks|https://oceana.mbari.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10140&status=1]
# [Support Engineering Upgrades]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|2011 M1 October]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579802</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645315</id>
<property name="body"><![CDATA[h2. Mooring Processing overview

!MooringDataFlow.png!]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579801</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867877</id>
<property name="body"><![CDATA[h1. OASIS3&nbsp;Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks]
# [Developer Documentation]

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835113</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645318</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [Mooring Processing]
# [OASIS Mooring turn]

h3. Development

# [JIRA Tasks|https://oceana.mbari.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10140&status=1]
# [Support Engineering Upgrades]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|2011 M1 October]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579804</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867878</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist][]
# [Developer Documentation]

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835114</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867903</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [MtToro Cfg|http://oceana.shore.mbari.org/ProjectLibrary/Microwave/toro%20sub%20net.xls]
## [Other]

h3. Deployments


h4. 2007M1

# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835139</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226523</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /hosts/tornado_vol0/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query like this where the DataProducer.id is >= the id of the new platform, e.g.:
{noformat}

{noformat}
# ;sd;s
# &nbsp;

# &nbsp;

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# &nbsp;
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DStoNetCDF.pl \-mooring parameter from 'M?Test' to 'M?', where ? is the mooring number. If the month has changed since the test deployment was started then also update the DDIR shell variable with the correct YYYMM.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 8 October 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259320</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867906</id>
<property name="body"><![CDATA[Roadmap
{{What's where on OASIS-3}}

09/28/07

\_____________________________________________________________________________\_

CAN #2 Default 0 4 7 0 4 1 4 4

Current assignment: M1 PwrPerm: 0000 0100 0111 0000 0100 0001 0100 0100

10M uCat-------\+ \|\|\| \| \| \| \|

HR2-----------------+\|\| \| \| \| \|

ISUS-----------------+\| \| \| \| \|

20M uCat--------------\+ \| \| \| \|

Frequency: 461.400MHZ \| \| \| \|

(orange) 0M uCat-----------------------\+ \| \| \|

GF Board # 0 HR3----------------------------------\+ \| \|

Metsys----------------------------------\+ \|

ADCP-----------------------------------------\+

Bin to Hex:

Inductive Modem Serial # 529 0000=0 0001=1 1000=8 1001=9

0010=2 0011=3 1010=A 1011=B

0100=4 0101=5 1100=C 1101=D

0110=6 0111=7 1110=E 1111=F

Instrument Power bit Serial Port UART Connector Analog Notes

(Local)

Terminal - 0 0 1A

Spare - - - 1B

Spare - - - 1C

Spare Serial 5 5 4 1D

Tower Wetstar 13 - - 1E 5

Battery/emeter - 4 4 1F Note 4

(Top Deck)

Radio 1 1 1 2A (External)

GPS 12 12 5 2B (External)

\* Metsys 6 6 4 2C

Asimet LWR 15 15 5 2D

Asimet HRH 7 7 4 2E

Asimet SWR 23 23 6 2F

(Mid Deck)

OCR 10 10 4 3A

OCR Data Dwn - - - 3B

\* HR3 8 8 4 3C

Echo Sounder 11 11 5 3D

pCO2 3 3 3 3E

pCO2 Pump 9 (9) (4) 3F

(Elevator Cage)

\* ISUS 21 21 6 4A

\* 0M ser. uCat 14 14 5 4B

\* ADCP 2 2 2 4C

HS2 16 16 5 4D

SBE Pump 19 (19) (6) 4E

Optode 24 24 6 4F

(Secondary Elevator Cage)

Not Installed - - - 5A

Not Installed - - - 5B

Not Installed - - - 5C

Not Installed - - - 5D

Not Installed - - - 5E

Not Installed - - - 5F

(10 Meter Cage)

10M OCR - - - 6A

Spare Serial 17 17 5 6B

T-String 27 27 7 6C Wired in parallel

200m HS2 28 28 7 6C Wired in parallel

\* HR2 22 22 6 6D

\* 10M ser. uCat 26 26 7 6E

\* 20M ser. uCat 20 20 6 6F

(20 Meter Cage)

Not Installed - - - 7A

Not Installed - - - 7B

Not Installed - - - 7C

Not Installed - - - 7D

Not Installed - - - 7E

Not Installed - - - 7F

(Spare Connector)

Not Installed - - - 8A

Not Installed - - - 8B

Not Installed - - - 8C

Not Installed - - - 8D

Not Installed - - - 8E

Not Installed - - - 8F

Ground Fault 25 25 7 -

OASIS - - - - 0-3 Note 3

Notes: 1.

2.

3. Temperature, batt voltage, pressure

4. GND-1,PWR-2,E-Meter RXD-3,SW GND-4

\* Instrument is power permed

Uart Cheat:

0 Dedicated to Console 4 Ports 4-10

1 Dedicated to Radio 5 Ports 11-17

2 Dedicated to ADCP 6 Ports 18-24

3 Dedicated to PCO2 7 Ports 25-31
}}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835142</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867905</id>
<property name="body"><![CDATA[Roadmap]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835141</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867900</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835136</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867899</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835135</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867902</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [MtToro Cfg]
## [Other]

h3. Deployments


h4. 2007M1

# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835138</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867901</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]
Microwave

h3. Deployments


h4. 2007M1

# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/2007m1.can]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835137</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867896</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments

# [hello|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/OSG_Library/New Folder/2007m1.can]

h4. 2007M1

# [http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/OSG_Library/New Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835132</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867895</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments

# [hello|http://www.mbari.org]

h4. 2007M1

# [http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/OSG_Library/New Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835131</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867898</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# [roadmap|http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/OSG_Library/New%20Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835134</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867897</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments

# [hello|http://oceana.shore.mbari.org]

h4. 2007M1

# [http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/OSG_Library/New Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835133</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">19071252</id>
<property name="body"><![CDATA[Oasis cfg file and app are in CVS at
http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/deployments/2012M1/]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">19038486</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867892</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# ["http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New Folder/OSG_Library/New Folder/2007m1.can"]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835128</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867891</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# [http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New Folder/OSG_Library/New Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835127</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226519</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program you may want to take a printout of the ssds.cfg file over to the actual Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.
# If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DStoNetCDF.pl \-mooring parameter from 'M?Test' to 'M?', where ? is the mooring number. If the month has changed since the test deployment was started then also update the DDIR shell variable with the correct YYYMM.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 30 September 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259316</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867894</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# [http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/OSG_Library/New Folder/2007m1.can.html]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835130</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867893</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# [Developer Documentation]

h3. Deployments


h4. 2007M1

# [http://oceana.shore.mbari.org/ProjectLibrary/OSG_Library/New%20Folder/OSG_Library/New Folder/2007m1.can]
# oasis.cfg

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835129</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226521</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:
{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.
{quote}
&nbsp;
{quote}
The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program you may want to take a printout of the ssds.cfg file over to the actual Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.
# If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DStoNetCDF.pl \-mooring parameter from 'M?Test' to 'M?', where ? is the mooring number. If the month has changed since the test deployment was started then also update the DDIR shell variable with the correct YYYMM.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 30 September 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259318</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670018</id>
<property name="body"><![CDATA[Also, Kevin indicates it is necessary to 'touch' all of the xml files in /hosts/tornado_vol0/ssdsdata/mooring/m?/200?/xml/

as part of the turn process to make the new xml ingest.]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">3637250</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670017</id>
<property name="body"><![CDATA[On the day of the turn...

the place you change the "top-level deployment name" is on elvis as ssdsadmin. In the /hosts/tornado_vol0/ssdsdata/mooring/m?/200?/xml/nnnn.xml where nnnn.xml is the device id for the oasis buoy itself (the fiberglass doughnut....). Also looks like you set the startDate there as well. Not sure if the startDate can be set later or does it have to be correct from the get-go...\\]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">3637249</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">26673290</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation *tsunami as user 'oasisa'.*
* cd to /oasis..
* Scripts and executables are in /oasis/bin
* Downloaded data go to /oasis/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /oasis/m1 /oasis/m2 etc. and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See /oasis/bin/oasis.cron or do a crontab \-l to see current schedule
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below... currently only OA1 and OA2 have viprs.

Old teledesigns differ mainly in that:
* tcp only goes to Mt Toro, so the connection is immediate so no timeout loop on connection
* the getdata command gets all records instead of chunks of 30. (30 record chunks were added to vipr downloads to allow radio tcp buffers to empty before power gets yanked)
* teledesign download uses uuencode (vipr download is straight binary mode)

&nbsp; &nbsp;
\\
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">26640533</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867853</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">1835089</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">26673296</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation *coredata as user 'coredata'.*

*NOTE: in all text and diagrams "ROOTDIR" = /u/coredata/moorings/downloads&nbsp;*
* cd to ROOTDIR
* Scripts and executables are in ROOTDIR/bin
* Downloaded data go to /mbari/oasis_coredata/deployments/m1/yyyymm/raw (where yyymm=year and moth of start of deployment)
* Extracted data ascii instrument data files go to mooring-specific dirs at /mbari/oasis_coredata/deployments/m1/yyyymm/m1 and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See \~/cron.coredata OR do a crontab \-l to see current schedule

*NOTE: in all text and diagrams "ROOTDIR" = /u/coredata/moorings/downloads*
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below..

Old teledesigns differ mainly in that:
* tcp only goes to Mt Toro, so the connection is immediate so no timeout loop on connection
* the getdata command gets all records instead of chunks of 30. (30 record chunks were added to vipr downloads to allow radio tcp buffers to empty before power gets yanked)
* teledesign download uses uuencode (vipr download is straight binary mode)

&nbsp; &nbsp;
\\
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">26640539</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">26673297</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation *coredata as user 'coredata'.*

*NOTE: in all text and diagrams "ROOTDIR" = /u/coredata/moorings/downloads&nbsp;*
* cd to ROOTDIR
* Scripts and executables are in ROOTDIR/bin
* Downloaded data go to /mbari/oasis_coredata/deployments/m1/yyyymm/raw (where yyymm=year and moth of start of deployment)
* Extracted data ascii instrument data files go to mooring-specific dirs at /mbari/oasis_coredata/deployments/m1/yyyymm/m1 and are ingested into ssds (m1 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See \~/cron.coredata OR do a crontab \-l to see current schedule

*NOTE: in all text and diagrams "ROOTDIR" = /u/coredata/moorings/downloads*
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below.
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">26640540</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">26673292</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation *coredata as user 'coredata'.*
* cd to \~/moorings/downloads
* Scripts and executables are in \~/moorings/downloads/bin
* Downloaded data go to /mbari/oasis_coredata/deployments/m1/yyyymm/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /mbari/oasis_coredata/deployments/m1/yyyymm/m1 and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See \~/cron.coredata OR do a crontab \-l to see current schedule
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below..

Old teledesigns differ mainly in that:
* tcp only goes to Mt Toro, so the connection is immediate so no timeout loop on connection
* the getdata command gets all records instead of chunks of 30. (30 record chunks were added to vipr downloads to allow radio tcp buffers to empty before power gets yanked)
* teledesign download uses uuencode (vipr download is straight binary mode)

&nbsp; &nbsp;
\\
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">26640535</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">26673294</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation *coredata as user 'coredata'.*

*NOTE: in all text and diagrams "ROOTDIR" = /u/coredata/moorings/downloads&nbsp;*
* cd to ROOTDIR
* Scripts and executables are in ROOTDIR/bin
* Downloaded data go to /mbari/oasis_coredata/deployments/m1/yyyymm/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /mbari/oasis_coredata/deployments/m1/yyyymm/m1 and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See \~/cron.coredata OR do a crontab \-l to see current schedule

*NOTE: in all text and diagrams "ROOTDIR" = /u/coredata/moorings/downloads*

{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below..

Old teledesigns differ mainly in that:
* tcp only goes to Mt Toro, so the connection is immediate so no timeout loop on connection
* the getdata command gets all records instead of chunks of 30. (30 record chunks were added to vipr downloads to allow radio tcp buffers to empty before power gets yanked)
* teledesign download uses uuencode (vipr download is straight binary mode)

&nbsp; &nbsp;
\\
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">26640537</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867868</id>
<property name="body"><![CDATA[h1. Project Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks]
# [Developer Documentation]

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835104</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867867</id>
<property name="body"><![CDATA[h1. Project Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks]
# [Developer Documentation]

h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835103</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867866</id>
<property name="body"><![CDATA[
h1. Project Pages


h3. WishList
*[*Support WISHLIST*|Wishlist]*



h3. Other Documents

# [Documents|ProjectDocuments]
# [Memos and Minutes|Project Memos Minutes]
## [Meeting with Chris, June 11, 2007]
## [ESP GUI Demo and Questions|2007_09_05]
# [Presentations|ProjectPresentations]
# [Tasks]
# [Data Model]
# [Developer Documentation]

h3. Bug Tracking
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835102</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867865</id>
<property name="body"><![CDATA[h1. *[*Support WISHLIST*|Wishlist]*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835101</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867864</id>
<property name="body"><![CDATA[h1. *Support* *[*WISHLIST*|Wishlist]*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835100</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830737</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadta, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 29 April 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797971</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867863</id>
<property name="body"><![CDATA[h1. *[*WISHLIST*|Wishlist]*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835099</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867862</id>
<property name="body"><![CDATA[*[*WISHLIST*|Wishlist]*]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835098</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867860</id>
<property name="body"><![CDATA[This is the home page for the Oasis3Support space.]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">1835096</id>
</property>
</object>
<object class="SpaceDescription" package="com.atlassian.confluence.spaces">
<id name="id">1835105</id>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">1867869</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.963</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 12:37:04.963</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">1835089</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830713</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /hosts/tornado_vol0/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query like this where the DataProducer.id is >= the id of the new platform, e.g.:
{noformat}

{noformat}
# ;sd;s
# &nbsp;

# &nbsp;

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# &nbsp;
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 8 October 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797946</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17891549</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]
## [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployments

# [2007M1 *Deployed on 6-Nov-2007]

# [2008M2 *Deployed on 11-Apr-2008]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858805</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11273004</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11240264</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17891554</id>
<property name="body"><![CDATA[Some notes from the deployment of the new Hybrid buoy (M46044):

Originally, the old M2 was going to go silent and then 
h3. Re-enabling old M2]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858810</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11273006</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11240266</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226464</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program you may want to take a printout of the ssds.cfg file over to the actual Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.
# If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DStoNetCDF.pl \-mooring parameter from 'M?Test' to 'M?', where ? is the mooring number. If the month has changed since the test deployment was started then also update the DDIR shell variable with the correct YYYMM.
# Monitor the SSDS processing web page (e.g. http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 30 September 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259254</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226466</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program you may want to take a printout of the ssds.cfg file over to the actual Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.
# If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DStoNetCDF.pl \-mooring parameter from 'M?Test' to 'M?', where ? is the mooring number. If the month has changed since the test deployment was started then also update the DDIR shell variable with the correct YYYMM.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 30 September 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259256</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11273012</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11240272</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226462</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## &nbsp;Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259252</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17268840</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M! deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17236075</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17268842</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M! deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17236077</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17268841</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M! deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17236076</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645294</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Docs

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# [2007M1 *Deployed on 6-Nov-2007]
# [2008M2 *Deployed on 11-Apr-2008]
# [2011M2H]
# [2011 M1 October]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579779</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645293</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml

h3. Operational Docs

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# [2007M1 *Deployed on 6-Nov-2007]
# [2008M2 *Deployed on 11-Apr-2008]
# [2011M2H]
# [2011 M1 October]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579778</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645292</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]

h3. Operational Docs

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# [2007M1 *Deployed on 6-Nov-2007]
# [2008M2 *Deployed on 11-Apr-2008]
# [2011M2H]
# [2011 M1 October]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579777</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645298</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

# [*Support WISHLIST*|Wishlist]
# [Tasks|Wishlist]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2001|2007M1 *Deployed on 6-Nov-2007]
## [October 2011|2011 M1 October]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579783</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18285122</id>
<property name="body"><![CDATA[Oasis downloads an are run via cron on workstation *tsunami as user 'oasisa'.*
* cd to /oasis..
* Scripts and executables are in /oasis/bin
* Downloaded data go to /oasis/raw
* Extracted data ascii instrument data files go to mooring-specific dirs at /oasis/m1 /oasis/m2 etc. and are ingested into ssds (m1&m2 only)

&nbsp;Downloads occur typically hourly at the top of the hour.&nbsp; See /oasis/bin/oasis.cron or do a crontab \-l to see current schedule
{gliffy:name=OASIS Downloads|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}
Approx timeline for downloads via vipr radio is shown below... currently only OA1 and OA2 have viprs.

Old teledesigns differ mainly in that:
* tcp only goes to Mt Toro, so the connection is immeadiate so now timeout loop on connection
* the getdata command gets all records instead of chunks of 30. (30 record chunks were added to vipr downloads to allow radio tcp buffers to empty before power gets yanked)
* teledesign download uses uuencode (vipr download is straight binary mode)

&nbsp; &nbsp;
\\
{gliffy:name=Oasis Vipr Download Sequence|space=O3S|page=M1,M2 and OA Downloads|pageid=16777265|align=left|size=L}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18252364</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645297</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

# [*Support WISHLIST*|Wishlist]*
# [Tasks|Wishlist]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# [2007M1 *Deployed on 6-Nov-2007]
# [2008M2 *Deployed on 11-Apr-2008]
# [2011M2H]
# [2011 M1 October]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579782</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645295</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# [2007M1 *Deployed on 6-Nov-2007]
# [2008M2 *Deployed on 11-Apr-2008]
# [2011M2H]
# [2011 M1 October]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579780</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645286</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 
41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M1 deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579771</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645285</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]

h3. Development

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]
## [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployments

# [2007M1 *Deployed on 6-Nov-2007]
# [2008M2 *Deployed on 11-Apr-2008]
# [2011M2H]
# [2011 M1 October]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579770</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645283</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]
## [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployments

# [2007M1 *Deployed on 6-Nov-2007]
# [2008M2 *Deployed on 11-Apr-2008]
# [2011M2H]
# [2011 M1 October]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579768</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645290</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]

h3. Operational Docs

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]

h3. Development

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# [2007M1 *Deployed on 6-Nov-2007]
# [2008M2 *Deployed on 11-Apr-2008]
# [2011M2H]
# [2011 M1 October]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579775</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17891557</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]
## [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployments

# [2007M1 *Deployed on 6-Nov-2007]

# [2008M2 *Deployed on 11-Apr-2008]

# [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858813</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830663</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]

h3. Deployments

# [2007M1 *Deployed on 6-Nov-2007]

# [2008M2 *Deployed on 11-Apr-2008]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797895</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830664</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]
## Note attachment on this page for OASIS_TURNS.doc

h3. Deployments

# [2007M1 *Deployed on 6-Nov-2007]

# [2008M2 *Deployed on 11-Apr-2008]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9797896</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17891561</id>
<property name="body"><![CDATA[This document details the notes associated with the M1 Mooring turn for October 2011.

h5. Schedule

|| Milestone || Date ||
| Initial Configuration | 7/7 |
| Final Science Instrument list | 7/15 |
| Instruments Due | 7/29 |
| Oasis Software development| 7/18 - 8/9 |
| Buoy Mechanical modifications | 7/18 - 8/9 |
| Oasis Code Freeze | 8/10 |
| System Testing | 8/11 - 8/24 |
| Sensor installation | 8/25 - 9/20 |
| Dockside Testing | 9/21- 26 |
| Load on Pt Sur | 9/27 |
| Deployment and Recovery | 9/28 |

h5. Sensor Listing

Here is a]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858817</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645312</id>
<property name="body"><![CDATA[h5. Whiteboard images


h5. Action Items

# Define the routing key topologies for data streams (including monitoring, logging, etc. to setup for DataProbe type consumer).
# Take the mapping file from OASIS2SSDS and parse so that extract on tsunami side can construct google protocol buffer messages and publish to RabbitMQ
# Create consumers (or extend MARS consumers) to write message to SSDS tables.
# Move processing that happens in OASIS2SSDS to consumer so that two data streams can be produced.

]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579797</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645301</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

# [*Support WISHLIST*|Wishlist]
# [Tasks|Wishlist]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|2011 M1 October]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579786</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">17891563</id>
<property name="body"><![CDATA[This document details the notes associated with the M1 Mooring turn for October 2011.

h5. Schedule

|| Milestone || Date ||
| Initial Configuration | 7/7 |
| Final Science Instrument list | 7/15 |
| Instruments Due | 7/29 |
| Oasis Software development| 7/18 - 8/9 |
| Buoy Mechanical modifications | 7/18 - 8/9 |
| Oasis Code Freeze | 8/10 |
| System Testing | 8/11 - 8/24 |
| Sensor installation | 8/25 - 9/20 |
| Dockside Testing | 9/21- 26 |
| Load on Pt Sur | 9/27 |
| Deployment and Recovery | 9/28 |

h5. Sensor Listing

Here is a [Word Doc|^2011-M1 Sensor.doc] that details the sensors to be deployed on the M1 Mooring in October]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">17858819</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645299</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
# [SSDS_instruments.xls|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/SSDS_instruments.xls?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579784</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645300</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

# [*Support WISHLIST*|Wishlist]
# [Tasks|Wishlist]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2001|M1 November 2007]
## [October 2011|2011 M1 October]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579785</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645305</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

# [Tasks|Wishlist]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|2011 M1 October]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579790</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645306</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

# [JIRA Tasks|https://oceana.mbari.org/jira/secure/IssueNavigator.jspa?reset=true&pid=10140&status=1]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|2011 M1 October]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579791</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645303</id>
<property name="body"><![CDATA[Welcome to the support pages for the OASIS Mooring Systems. This confluence space documents the various aspects of the OASIS controllers and the moorings that are run by them.  This space contains many technical documents related to the OASIS systems as well as operation procedures and logs as well.

h3. Design Documents

# [MBARI OASIS3 Mooring Guide|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/doc/html/index.html?revision=1.2&content-type=text%2Fhtml]
# [OASIS To SSDS Documentation|http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/DPforSSDS/oasis/doc/html/index.html?revision=1.1&content-type=text%2Fhtml]

h3. Operational Documents

# [OASIS Hourly Downloads|O3S:M1,M2 and OA Downloads]
# [OASIS Mooring turn]

h3. Development

# [*Support WISHLIST*|Wishlist]
# [Tasks|Wishlist]

h3. Other Documents

# Developer Documentation
## [Other]

## Note attachment on this page for [OASIS Support Engineering Wiki^OASIS_TURNS.doc]

h3. Deployment Logs

# M1 Mooring
## [November 2007|M1 November 2007]
## [October 2011|2011 M1 October]

# M2 Mooring
## [April 2008|2008M2 *Deployed on 11-Apr-2008]

# M46044 Mooring
## [2011M2H]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18579788</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663982</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=34496&p2Type=Date&p2Value=2010-04-03T22:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=2010-04-03T23:00:00Z&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment. 
# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file. 
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html">200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html">201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15631231</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663986</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.

Here's another example for the October 2010 M1 turn:
{code}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|
{code}
# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html" >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html" >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15631235</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663984</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=34496&p2Type=Date&p2Value=2010-04-03T22:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=2010-04-03T23:00:00Z&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment. 

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|
{noformat}
# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file. 
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html">200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html">201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15631233</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663990</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.

Here's another example for the October 2010 M1 turn:
{code}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 41197.
{code}
# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15631239</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663988</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.

Here's another example for the October 2010 M1 turn:
{code}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|
{code}
# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15631237</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663991</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{code}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 41197.)
{code}

h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15631240</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">19138271</id>
<property name="destinationPageTitle"><![CDATA[//moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/deployments/2012M1/]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Comment" package="com.atlassian.confluence.pages"><id name="id">19038486</id>
</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2012-04-16 13:52:36.423</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2012-04-16 13:52:36.423</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195654</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.

# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn



So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008&nbsp; SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162888</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">15663997</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 41197.)
{noformat}

h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir /mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">15631247</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670571</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/2008m2.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/oasis.cfg?rev=1.1;content-type=text%2Fplain]
# [SSDS_instruments.xls|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/SSDS_instruments.xls?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637821</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226331</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp]by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt.
## &nbsp;

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259114</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670573</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]

h3. Deployments

# [2007M1 *deployed on 6-Nov-2007]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637823</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404851</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /hosts/tornado_vol0/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query like this where the DataProducer.id is >= the id of the new platform, e.g.:
{noformat}

{noformat}
# ;sd;s
# &nbsp;

# &nbsp;

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# &nbsp;
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 8 October 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372106</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670565</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
# [SSDS_instruments.xls|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/SSDS_instruments.xls?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637815</id>
</property>
</object>
<object class="SpaceDescription" package="com.atlassian.confluence.spaces">
<id name="id">18579787</id>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">18645302</id>
</element>
</collection>
<property name="version">2</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2007-10-03 12:37:04.963</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2007-10-03 13:41:39.093</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">1835089</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670567</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
# [SSDS_instruments.xls|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/SSDS_instruments.xls?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637817</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226328</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the platform deployment XML file; its Deployment element should contain name and startDate attributes so that the parent deployment may be found in the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259111</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670569</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2008M2/oasis.cfg?rev=1.1;content-type=text%2Fplain]
# [SSDS_instruments.xls|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/SSDS_instruments.xls?rev=1.1;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3637819</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195691</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.

# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn



So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008&nbsp; SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).  
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162925</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179959</id>
<property name="body"><![CDATA[h2. Mooring Processing overview]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114488</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195692</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008&nbsp; SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162926</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195694</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete on the wrong instrument deployment.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008&nbsp; SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162928</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195695</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete on the wrong instrument deployment.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008&nbsp; SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162929</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3179968</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008&nbsp; SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">3114498</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226309</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. The one exception is the platform deployment XML file; its Deployment element should contain name and startDate attributes so that the parent deployment may be found in the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd, will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259091</id>
</property>
</object>
<object class="OutgoingLink" package="com.atlassian.confluence.links">
<id name="id">3702785</id>
<property name="destinationPageTitle"><![CDATA[//oceana.shore.mbari.org:8082/browse/CD-10]]></property>
<property name="destinationSpaceKey"><![CDATA[http]]></property>
<property name="sourceContent" class="Comment" package="com.atlassian.confluence.pages"><id name="id">3637251</id>
</property>
<property name="creatorName"/><property name="creationDate">2008-04-11 10:09:26.830</property>
<property name="lastModifierName"/><property name="lastModificationDate">2008-04-11 10:09:26.830</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195618</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. &nbsp;Procedure:

# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Test by ....

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162852</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829376</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 27122
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796617</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829375</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 27122
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK 
FROM [ssdsdba].[DataProducer]   
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796616</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829373</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796614</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195610</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. &nbsp;Procedure:

# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}

Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Create a top-level mooring deployment xml file

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162844</id>
</property>
</object>
<object class="Comment" package="com.atlassian.confluence.pages">
<id name="id">19038487</id>
<property name="title"/><collection name="bodyContents"><element class="BodyContent" package="com.atlassian.confluence.core"><id name="id">19071253</id>
</element>
</collection>
<property name="version">1</property>
<property name="creatorName"><![CDATA[rich]]></property>
<property name="creationDate">2012-04-16 13:52:05.600</property>
<property name="lastModifierName"><![CDATA[rich]]></property>
<property name="lastModificationDate">2012-04-16 13:52:05.600</property>
<property name="versionComment"><![CDATA[]]></property>
<property name="originalVersion" class="Comment" package="com.atlassian.confluence.pages"><id name="id">19038486</id>
</property>
<property name="contentStatus"><![CDATA[current]]></property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195609</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. &nbsp;Procedure:

# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove and time or location information and check back into CVS. Copy the files in the xml subdirectory.
# Create a top-level mooring deployment xml file
# Edit

an instrument on an OASIS mooring in order to keep the metadata and data all lined up in SSDS. The easiest way is to try to do these steps exactly when they actually do the instrument swap. The reason is that due to the fact that the data from the instrument is downloaded to the same file in the OASIS directory so there is no way (currently) to automate some sort of notice that the instrument has been swapped. An external process reads that raw data file from the instrument, looks up the device ID from a shore-side configuration file and then publishes that data to SSDS under that device ID. If the timing is not right, some extra steps need to be taken. These steps will assume that the timing is correct and I will add steps at the end in case this is being done after the swap happened (usually the case).
# Get new device ID of the new instrument to be installed.
# Check out the XML for that instrument from the 'puckxml' project in CVS.
# Use an XML editor like XML Spy or oXygen to open the XML file.
# Make sure the schema location at the top of the XML file points to:
## [http://new-ssds.mbari.org/ssds-docs/xml/schema/SSDS_Metadata.xsd]
# Run the editor's validation on the XML.
# If it does not validate, fix errors
# Remove any deployment attributes from the <Deployment> tag.  For instance any nominalLat/Lon/Depth.
# If the <Deployment> tag has a 'name' attribute, make sure it does not have any deployment specific information in it. For example, 'ISUS Deployment' is better than 'M2 ISUS Deployment'. The reason for removing any deployment information from the XML is so that when the device moves to a different mooring, the user should not have to edit the XML. The goal is to get all the XML to a point where it never needs to be edited when an instrument is deployed (unless something in the way the data stream is generated from the instrument changes).
# Go to the SSDS Device pages and verify that the all the device information (mfg, model, serial number, name, type, etc.) matches what is currently in SSDS. If any of those are different it will update the device information in SSDS when the XML comes in the data stream.
# Verify RecordDescription and RecordVariables look correct. I usually go to the raw data pages in SSDS and bring up the last few packets from the device just to verify that the number of columns and bufferSeparator look about right.
# Check any changes to the XML back into CVS.
# Copy the XML to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\xml directory
# Go to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\cfg directory.
# This next step is the one that needs to be timed with the mooring turn.  When the old instrument is shutdown:
## Open the ssds.cfg file in a text editor
## Find the line that shows the currently deployed instrument and copy it to a line just below it. For example, if we are replacing the GPS, it might look like this before:
{panel:title=Before Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
and this after:
{panel:title=After Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Now change the new line to have the correct device ID and the correct XML file URL
{panel:title=After Device ID update}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# To clean up the previous deployment information, put start and end dates after the XML URL
{panel:title=After Adding Start/End dates}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,2007/04/25 16:21:58,2007/08/01 10:00:00,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Save the cfg file.
{note:title=Saving the file will make the change take hold}When the ssds.cfg file changes (saved) is when the OASIS2SSDS processing will pick up the instrument change. Now, the next time it runs it will pick up the instrument change, grab the XML file from the 'xml' directory and publish it to SSDS. It will then publish all data under the new device ID.
{note}
# Edit the metadata in SSDS to put a close date on the old instrument deployment in SSDS. Currently I do that using Enterprise Manager.

h5. If this is being done after the fact the next steps will also need to be taken.

# After the new deployment shows up in SSDS, the start time for the new deployment will need to be edited to match the actual time the instrument was swapped.
# Also because the data was being published under the incorrect device ID, it will need to be moved from one database table in SSDS_Data on Solstice to another table.
## The first thing that I do is grab the timestamp from the last packet sent from the old device in the raw data page on SSDS.
## For example, I go to: [http://new-ssds.mbari.org:8080/ssds/siamRawDataStep1.jsp]and enter the old device ID and set the number of packets back to make sure it goes far enough back to cover the actual time of the instrument swap. Then click on 'Next->'.
## Once the raw data shows up, find the last packet from the old device and grab the 'SIAM Timestamp' value (not the date/time) as that will be used in the Enterprise Manager query.
## Open Enterprise Manager and navigate to the 'SSDS_Data' database on Solstice.
## Browse the tables and find the table with the device ID of the old device and right click on it and select 'Open Table->Return all rows'.
## Click on the 'SQL' button in Enterprise Manager to bring up the SQL pane. It should show the basic query which should look something like this:
{noformat}
SELECT     *
FROM         [1416]
{noformat}
## Now add the where clause to pick only the data that is after the timestamp you grabbed from the last packet on the web page.
{note:title=Timestamps in SQL are in Seconds}A quick note here, the 'SIAM Timestamp' on the raw data page is actually in milliseconds and the database column is in seconds so you will have to remove the last three digits of the 'SIAM Timestamp' before putting it in this query.
{note}
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Run this query by clicking the run button '\!' in Enterprise Manager.
## Look over the results to make sure they look about right (usually you are looking for the length of the return which should be much shorter). You can actually use a count query to see how many rows this query will return. A count query would look like:
{noformat}
SELECT    count(*)
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Once you know the query is correct, copy it to the clipboard and close the query window in Enterprise Manager.
## Navigate to the table of the device you want to copy the data into and right click and select 'All Tasks->Import Data...' which will fire up the DTS wizard.
### Click on 'Next>'
### For the Data Source database choose Solstice
### Select the 'SSDS_Data' database (note you should have permissions to do all this and use your windows authentication)
### Click on 'Next>'
### The destination configuration should be already to go (Solistice and SSDS_Data database).
### Click on 'Next>'
### Select 'Use a query to specify the data to transfer'
### Click on 'Next>'
### Paste the query from your clipboard into the 'Query Statement' window (You can click on 'Parse' if you want a quick sanity check)
### Click on 'Next>'
### Click on the 'Results' entry under the 'Destination' column which will enable a drop down box.
### Choose the table of the newly installed device where you will be copying the data to.
### Click on 'Next>'
### Click on 'Next>'
### Click on 'Finish' which will copy the data.
### Once that is done, open the table of the old instrument and the SQL pane so that we can construct the delete query on the old data.
### Paste in the select query and verify it is the same data you copied over:
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
### If it looks good, click on the 'Change Query type ...' button in Enterprise Manager and select 'Delete'. This will change the query to a delete query.
### Run the query by click on the run '\!' button.  That will remove all the data from the old instrument.

That's it ... whew\!

Kevin Gomes (August 3, 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162843</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195608</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. &nbsp;Procedure:

# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file
# &nbsp;Get the most recent XML file for each instrument from the CVS module
# Edit

an instrument on an OASIS mooring in order to keep the metadata and data all lined up in SSDS. The easiest way is to try to do these steps exactly when they actually do the instrument swap. The reason is that due to the fact that the data from the instrument is downloaded to the same file in the OASIS directory so there is no way (currently) to automate some sort of notice that the instrument has been swapped. An external process reads that raw data file from the instrument, looks up the device ID from a shore-side configuration file and then publishes that data to SSDS under that device ID. If the timing is not right, some extra steps need to be taken. These steps will assume that the timing is correct and I will add steps at the end in case this is being done after the swap happened (usually the case).
# Get new device ID of the new instrument to be installed.
# Check out the XML for that instrument from the 'puckxml' project in CVS.
# Use an XML editor like XML Spy or oXygen to open the XML file.
# Make sure the schema location at the top of the XML file points to:
## [http://new-ssds.mbari.org/ssds-docs/xml/schema/SSDS_Metadata.xsd]
# Run the editor's validation on the XML.
# If it does not validate, fix errors
# Remove any deployment attributes from the <Deployment> tag.  For instance any nominalLat/Lon/Depth.
# If the <Deployment> tag has a 'name' attribute, make sure it does not have any deployment specific information in it. For example, 'ISUS Deployment' is better than 'M2 ISUS Deployment'. The reason for removing any deployment information from the XML is so that when the device moves to a different mooring, the user should not have to edit the XML. The goal is to get all the XML to a point where it never needs to be edited when an instrument is deployed (unless something in the way the data stream is generated from the instrument changes).
# Go to the SSDS Device pages and verify that the all the device information (mfg, model, serial number, name, type, etc.) matches what is currently in SSDS. If any of those are different it will update the device information in SSDS when the XML comes in the data stream.
# Verify RecordDescription and RecordVariables look correct. I usually go to the raw data pages in SSDS and bring up the last few packets from the device just to verify that the number of columns and bufferSeparator look about right.
# Check any changes to the XML back into CVS.
# Copy the XML to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\xml directory
# Go to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\cfg directory.
# This next step is the one that needs to be timed with the mooring turn.  When the old instrument is shutdown:
## Open the ssds.cfg file in a text editor
## Find the line that shows the currently deployed instrument and copy it to a line just below it. For example, if we are replacing the GPS, it might look like this before:
{panel:title=Before Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
and this after:
{panel:title=After Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Now change the new line to have the correct device ID and the correct XML file URL
{panel:title=After Device ID update}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# To clean up the previous deployment information, put start and end dates after the XML URL
{panel:title=After Adding Start/End dates}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,2007/04/25 16:21:58,2007/08/01 10:00:00,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Save the cfg file.
{note:title=Saving the file will make the change take hold}When the ssds.cfg file changes (saved) is when the OASIS2SSDS processing will pick up the instrument change. Now, the next time it runs it will pick up the instrument change, grab the XML file from the 'xml' directory and publish it to SSDS. It will then publish all data under the new device ID.
{note}
# Edit the metadata in SSDS to put a close date on the old instrument deployment in SSDS. Currently I do that using Enterprise Manager.

h5. If this is being done after the fact the next steps will also need to be taken.

# After the new deployment shows up in SSDS, the start time for the new deployment will need to be edited to match the actual time the instrument was swapped.
# Also because the data was being published under the incorrect device ID, it will need to be moved from one database table in SSDS_Data on Solstice to another table.
## The first thing that I do is grab the timestamp from the last packet sent from the old device in the raw data page on SSDS.
## For example, I go to: [http://new-ssds.mbari.org:8080/ssds/siamRawDataStep1.jsp]and enter the old device ID and set the number of packets back to make sure it goes far enough back to cover the actual time of the instrument swap. Then click on 'Next->'.
## Once the raw data shows up, find the last packet from the old device and grab the 'SIAM Timestamp' value (not the date/time) as that will be used in the Enterprise Manager query.
## Open Enterprise Manager and navigate to the 'SSDS_Data' database on Solstice.
## Browse the tables and find the table with the device ID of the old device and right click on it and select 'Open Table->Return all rows'.
## Click on the 'SQL' button in Enterprise Manager to bring up the SQL pane. It should show the basic query which should look something like this:
{noformat}
SELECT     *
FROM         [1416]
{noformat}
## Now add the where clause to pick only the data that is after the timestamp you grabbed from the last packet on the web page.
{note:title=Timestamps in SQL are in Seconds}A quick note here, the 'SIAM Timestamp' on the raw data page is actually in milliseconds and the database column is in seconds so you will have to remove the last three digits of the 'SIAM Timestamp' before putting it in this query.
{note}
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Run this query by clicking the run button '\!' in Enterprise Manager.
## Look over the results to make sure they look about right (usually you are looking for the length of the return which should be much shorter). You can actually use a count query to see how many rows this query will return. A count query would look like:
{noformat}
SELECT    count(*)
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Once you know the query is correct, copy it to the clipboard and close the query window in Enterprise Manager.
## Navigate to the table of the device you want to copy the data into and right click and select 'All Tasks->Import Data...' which will fire up the DTS wizard.
### Click on 'Next>'
### For the Data Source database choose Solstice
### Select the 'SSDS_Data' database (note you should have permissions to do all this and use your windows authentication)
### Click on 'Next>'
### The destination configuration should be already to go (Solistice and SSDS_Data database).
### Click on 'Next>'
### Select 'Use a query to specify the data to transfer'
### Click on 'Next>'
### Paste the query from your clipboard into the 'Query Statement' window (You can click on 'Parse' if you want a quick sanity check)
### Click on 'Next>'
### Click on the 'Results' entry under the 'Destination' column which will enable a drop down box.
### Choose the table of the newly installed device where you will be copying the data to.
### Click on 'Next>'
### Click on 'Next>'
### Click on 'Finish' which will copy the data.
### Once that is done, open the table of the old instrument and the SQL pane so that we can construct the delete query on the old data.
### Paste in the select query and verify it is the same data you copied over:
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
### If it looks good, click on the 'Change Query type ...' button in Enterprise Manager and select 'Delete'. This will change the query to a delete query.
### Run the query by click on the run '\!' button.  That will remove all the data from the old instrument.

That's it ... whew\!

Kevin Gomes (August 3, 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162842</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195606</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

&nbsp;Procedure:
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (need to reference email from OSG for the correct numbers):
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
# &nbsp;
# Edit

an instrument on an OASIS mooring in order to keep the metadata and data all lined up in SSDS. The easiest way is to try to do these steps exactly when they actually do the instrument swap. The reason is that due to the fact that the data from the instrument is downloaded to the same file in the OASIS directory so there is no way (currently) to automate some sort of notice that the instrument has been swapped. An external process reads that raw data file from the instrument, looks up the device ID from a shore-side configuration file and then publishes that data to SSDS under that device ID. If the timing is not right, some extra steps need to be taken. These steps will assume that the timing is correct and I will add steps at the end in case this is being done after the swap happened (usually the case).
# Get new device ID of the new instrument to be installed.
# Check out the XML for that instrument from the 'puckxml' project in CVS.
# Use an XML editor like XML Spy or oXygen to open the XML file.
# Make sure the schema location at the top of the XML file points to:
## [http://new-ssds.mbari.org/ssds-docs/xml/schema/SSDS_Metadata.xsd]
# Run the editor's validation on the XML.
# If it does not validate, fix errors
# Remove any deployment attributes from the <Deployment> tag.  For instance any nominalLat/Lon/Depth.
# If the <Deployment> tag has a 'name' attribute, make sure it does not have any deployment specific information in it. For example, 'ISUS Deployment' is better than 'M2 ISUS Deployment'. The reason for removing any deployment information from the XML is so that when the device moves to a different mooring, the user should not have to edit the XML. The goal is to get all the XML to a point where it never needs to be edited when an instrument is deployed (unless something in the way the data stream is generated from the instrument changes).
# Go to the SSDS Device pages and verify that the all the device information (mfg, model, serial number, name, type, etc.) matches what is currently in SSDS. If any of those are different it will update the device information in SSDS when the XML comes in the data stream.
# Verify RecordDescription and RecordVariables look correct. I usually go to the raw data pages in SSDS and bring up the last few packets from the device just to verify that the number of columns and bufferSeparator look about right.
# Check any changes to the XML back into CVS.
# Copy the XML to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\xml directory
# Go to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\cfg directory.
# This next step is the one that needs to be timed with the mooring turn.  When the old instrument is shutdown:
## Open the ssds.cfg file in a text editor
## Find the line that shows the currently deployed instrument and copy it to a line just below it. For example, if we are replacing the GPS, it might look like this before:
{panel:title=Before Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
and this after:
{panel:title=After Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Now change the new line to have the correct device ID and the correct XML file URL
{panel:title=After Device ID update}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# To clean up the previous deployment information, put start and end dates after the XML URL
{panel:title=After Adding Start/End dates}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,2007/04/25 16:21:58,2007/08/01 10:00:00,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Save the cfg file.
{note:title=Saving the file will make the change take hold}When the ssds.cfg file changes (saved) is when the OASIS2SSDS processing will pick up the instrument change. Now, the next time it runs it will pick up the instrument change, grab the XML file from the 'xml' directory and publish it to SSDS. It will then publish all data under the new device ID.
{note}
# Edit the metadata in SSDS to put a close date on the old instrument deployment in SSDS. Currently I do that using Enterprise Manager.

h5. If this is being done after the fact the next steps will also need to be taken.

# After the new deployment shows up in SSDS, the start time for the new deployment will need to be edited to match the actual time the instrument was swapped.
# Also because the data was being published under the incorrect device ID, it will need to be moved from one database table in SSDS_Data on Solstice to another table.
## The first thing that I do is grab the timestamp from the last packet sent from the old device in the raw data page on SSDS.
## For example, I go to: [http://new-ssds.mbari.org:8080/ssds/siamRawDataStep1.jsp]and enter the old device ID and set the number of packets back to make sure it goes far enough back to cover the actual time of the instrument swap. Then click on 'Next->'.
## Once the raw data shows up, find the last packet from the old device and grab the 'SIAM Timestamp' value (not the date/time) as that will be used in the Enterprise Manager query.
## Open Enterprise Manager and navigate to the 'SSDS_Data' database on Solstice.
## Browse the tables and find the table with the device ID of the old device and right click on it and select 'Open Table->Return all rows'.
## Click on the 'SQL' button in Enterprise Manager to bring up the SQL pane. It should show the basic query which should look something like this:
{noformat}
SELECT     *
FROM         [1416]
{noformat}
## Now add the where clause to pick only the data that is after the timestamp you grabbed from the last packet on the web page.
{note:title=Timestamps in SQL are in Seconds}A quick note here, the 'SIAM Timestamp' on the raw data page is actually in milliseconds and the database column is in seconds so you will have to remove the last three digits of the 'SIAM Timestamp' before putting it in this query.
{note}
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Run this query by clicking the run button '\!' in Enterprise Manager.
## Look over the results to make sure they look about right (usually you are looking for the length of the return which should be much shorter). You can actually use a count query to see how many rows this query will return. A count query would look like:
{noformat}
SELECT    count(*)
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Once you know the query is correct, copy it to the clipboard and close the query window in Enterprise Manager.
## Navigate to the table of the device you want to copy the data into and right click and select 'All Tasks->Import Data...' which will fire up the DTS wizard.
### Click on 'Next>'
### For the Data Source database choose Solstice
### Select the 'SSDS_Data' database (note you should have permissions to do all this and use your windows authentication)
### Click on 'Next>'
### The destination configuration should be already to go (Solistice and SSDS_Data database).
### Click on 'Next>'
### Select 'Use a query to specify the data to transfer'
### Click on 'Next>'
### Paste the query from your clipboard into the 'Query Statement' window (You can click on 'Parse' if you want a quick sanity check)
### Click on 'Next>'
### Click on the 'Results' entry under the 'Destination' column which will enable a drop down box.
### Choose the table of the newly installed device where you will be copying the data to.
### Click on 'Next>'
### Click on 'Next>'
### Click on 'Finish' which will copy the data.
### Once that is done, open the table of the old instrument and the SQL pane so that we can construct the delete query on the old data.
### Paste in the select query and verify it is the same data you copied over:
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
### If it looks good, click on the 'Change Query type ...' button in Enterprise Manager and select 'Delete'. This will change the query to a delete query.
### Run the query by click on the run '\!' button.  That will remove all the data from the old instrument.

That's it ... whew\!

Kevin Gomes (August 3, 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162840</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404897</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what it in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /hosts/tornado_vol0/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query like this where the DataProducer.id is >= the id of the new platform, e.g.:
{noformat}

{noformat}
# ;sd;s
# &nbsp;

# &nbsp;

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# &nbsp;
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 8 October 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372156</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195605</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007"

an instrument on an OASIS mooring in order to keep the metadata and data all lined up in SSDS. The easiest way is to try to do these steps exactly when they actually do the instrument swap. The reason is that due to the fact that the data from the instrument is downloaded to the same file in the OASIS directory so there is no way (currently) to automate some sort of notice that the instrument has been swapped. An external process reads that raw data file from the instrument, looks up the device ID from a shore-side configuration file and then publishes that data to SSDS under that device ID. If the timing is not right, some extra steps need to be taken. These steps will assume that the timing is correct and I will add steps at the end in case this is being done after the swap happened (usually the case).
# Get new device ID of the new instrument to be installed.
# Check out the XML for that instrument from the 'puckxml' project in CVS.
# Use an XML editor like XML Spy or oXygen to open the XML file.
# Make sure the schema location at the top of the XML file points to:
## [http://new-ssds.mbari.org/ssds-docs/xml/schema/SSDS_Metadata.xsd]
# Run the editor's validation on the XML.
# If it does not validate, fix errors
# Remove any deployment attributes from the <Deployment> tag.  For instance any nominalLat/Lon/Depth.
# If the <Deployment> tag has a 'name' attribute, make sure it does not have any deployment specific information in it. For example, 'ISUS Deployment' is better than 'M2 ISUS Deployment'. The reason for removing any deployment information from the XML is so that when the device moves to a different mooring, the user should not have to edit the XML. The goal is to get all the XML to a point where it never needs to be edited when an instrument is deployed (unless something in the way the data stream is generated from the instrument changes).
# Go to the SSDS Device pages and verify that the all the device information (mfg, model, serial number, name, type, etc.) matches what is currently in SSDS. If any of those are different it will update the device information in SSDS when the XML comes in the data stream.
# Verify RecordDescription and RecordVariables look correct. I usually go to the raw data pages in SSDS and bring up the last few packets from the device just to verify that the number of columns and bufferSeparator look about right.
# Check any changes to the XML back into CVS.
# Copy the XML to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\xml directory
# Go to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\cfg directory.
# This next step is the one that needs to be timed with the mooring turn.  When the old instrument is shutdown:
## Open the ssds.cfg file in a text editor
## Find the line that shows the currently deployed instrument and copy it to a line just below it. For example, if we are replacing the GPS, it might look like this before:
{panel:title=Before Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
and this after:
{panel:title=After Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Now change the new line to have the correct device ID and the correct XML file URL
{panel:title=After Device ID update}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# To clean up the previous deployment information, put start and end dates after the XML URL
{panel:title=After Adding Start/End dates}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,2007/04/25 16:21:58,2007/08/01 10:00:00,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Save the cfg file.
{note:title=Saving the file will make the change take hold}When the ssds.cfg file changes (saved) is when the OASIS2SSDS processing will pick up the instrument change. Now, the next time it runs it will pick up the instrument change, grab the XML file from the 'xml' directory and publish it to SSDS. It will then publish all data under the new device ID.
{note}
# Edit the metadata in SSDS to put a close date on the old instrument deployment in SSDS. Currently I do that using Enterprise Manager.

h5. If this is being done after the fact the next steps will also need to be taken.

# After the new deployment shows up in SSDS, the start time for the new deployment will need to be edited to match the actual time the instrument was swapped.
# Also because the data was being published under the incorrect device ID, it will need to be moved from one database table in SSDS_Data on Solstice to another table.
## The first thing that I do is grab the timestamp from the last packet sent from the old device in the raw data page on SSDS.
## For example, I go to: [http://new-ssds.mbari.org:8080/ssds/siamRawDataStep1.jsp]and enter the old device ID and set the number of packets back to make sure it goes far enough back to cover the actual time of the instrument swap. Then click on 'Next->'.
## Once the raw data shows up, find the last packet from the old device and grab the 'SIAM Timestamp' value (not the date/time) as that will be used in the Enterprise Manager query.
## Open Enterprise Manager and navigate to the 'SSDS_Data' database on Solstice.
## Browse the tables and find the table with the device ID of the old device and right click on it and select 'Open Table->Return all rows'.
## Click on the 'SQL' button in Enterprise Manager to bring up the SQL pane. It should show the basic query which should look something like this:
{noformat}
SELECT     *
FROM         [1416]
{noformat}
## Now add the where clause to pick only the data that is after the timestamp you grabbed from the last packet on the web page.
{note:title=Timestamps in SQL are in Seconds}A quick note here, the 'SIAM Timestamp' on the raw data page is actually in milliseconds and the database column is in seconds so you will have to remove the last three digits of the 'SIAM Timestamp' before putting it in this query.
{note}
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Run this query by clicking the run button '\!' in Enterprise Manager.
## Look over the results to make sure they look about right (usually you are looking for the length of the return which should be much shorter). You can actually use a count query to see how many rows this query will return. A count query would look like:
{noformat}
SELECT    count(*)
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Once you know the query is correct, copy it to the clipboard and close the query window in Enterprise Manager.
## Navigate to the table of the device you want to copy the data into and right click and select 'All Tasks->Import Data...' which will fire up the DTS wizard.
### Click on 'Next>'
### For the Data Source database choose Solstice
### Select the 'SSDS_Data' database (note you should have permissions to do all this and use your windows authentication)
### Click on 'Next>'
### The destination configuration should be already to go (Solistice and SSDS_Data database).
### Click on 'Next>'
### Select 'Use a query to specify the data to transfer'
### Click on 'Next>'
### Paste the query from your clipboard into the 'Query Statement' window (You can click on 'Parse' if you want a quick sanity check)
### Click on 'Next>'
### Click on the 'Results' entry under the 'Destination' column which will enable a drop down box.
### Choose the table of the newly installed device where you will be copying the data to.
### Click on 'Next>'
### Click on 'Next>'
### Click on 'Finish' which will copy the data.
### Once that is done, open the table of the old instrument and the SQL pane so that we can construct the delete query on the old data.
### Paste in the select query and verify it is the same data you copied over:
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
### If it looks good, click on the 'Change Query type ...' button in Enterprise Manager and select 'Delete'. This will change the query to a delete query.
### Run the query by click on the run '\!' button.  That will remove all the data from the old instrument.

That's it ... whew\!

Kevin Gomes (August 3, 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162839</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195604</id>
<property name="body"><![CDATA[This is the procedure to take when OSG swaps an instrument on an OASIS mooring in order to keep the metadata and data all lined up in SSDS. The easiest way is to try to do these steps exactly when they actually do the instrument swap. The reason is that due to the fact that the data from the instrument is downloaded to the same file in the OASIS directory so there is no way (currently) to automate some sort of notice that the instrument has been swapped. An external process reads that raw data file from the instrument, looks up the device ID from a shore-side configuration file and then publishes that data to SSDS under that device ID. If the timing is not right, some extra steps need to be taken. These steps will assume that the timing is correct and I will add steps at the end in case this is being done after the swap happened (usually the case).
# Get new device ID of the new instrument to be installed.
# Check out the XML for that instrument from the 'puckxml' project in CVS.
# Use an XML editor like XML Spy or oXygen to open the XML file.
# Make sure the schema location at the top of the XML file points to:
## [http://new-ssds.mbari.org/ssds-docs/xml/schema/SSDS_Metadata.xsd]
# Run the editor's validation on the XML.
# If it does not validate, fix errors
# Remove any deployment attributes from the <Deployment> tag.  For instance any nominalLat/Lon/Depth.
# If the <Deployment> tag has a 'name' attribute, make sure it does not have any deployment specific information in it. For example, 'ISUS Deployment' is better than 'M2 ISUS Deployment'. The reason for removing any deployment information from the XML is so that when the device moves to a different mooring, the user should not have to edit the XML. The goal is to get all the XML to a point where it never needs to be edited when an instrument is deployed (unless something in the way the data stream is generated from the instrument changes).
# Go to the SSDS Device pages and verify that the all the device information (mfg, model, serial number, name, type, etc.) matches what is currently in SSDS. If any of those are different it will update the device information in SSDS when the XML comes in the data stream.
# Verify RecordDescription and RecordVariables look correct. I usually go to the raw data pages in SSDS and bring up the last few packets from the device just to verify that the number of columns and bufferSeparator look about right.
# Check any changes to the XML back into CVS.
# Copy the XML to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\xml directory
# Go to the \\Tornado\ssdsdata\mooring(m1\|m2)\YYYY\cfg directory.
# This next step is the one that needs to be timed with the mooring turn.  When the old instrument is shutdown:
## Open the ssds.cfg file in a text editor
## Find the line that shows the currently deployed instrument and copy it to a line just below it. For example, if we are replacing the GPS, it might look like this before:
{panel:title=Before Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
and this after:
{panel:title=After Copy}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Now change the new line to have the correct device ID and the correct XML file URL
{panel:title=After Device ID update}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,,,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# To clean up the previous deployment information, put start and end dates after the XML URL
{panel:title=After Adding Start/End dates}
{noformat}
instrument = PCO2,1471,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1471.xml
instrument = Metsys,1480,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1480.xml
instrument = GPS_TYPE3,1416,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1416.xml,2007/04/25 16:21:58,2007/08/01 10:00:00,TransformGPS
instrument = GPS_TYPE3,1511,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1511.xml,,,TransformGPS
instrument = Spec_PRR,1420,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1420.xml
instrument = ADCP,1417,http://dods.mbari.org/data/ssdsdata/mooring/m2/2007/xml/1417.xml
{noformat}
{panel}
# Save the cfg file.
{note:title=Saving the file will make the change take hold}When the ssds.cfg file changes (saved) is when the OASIS2SSDS processing will pick up the instrument change. Now, the next time it runs it will pick up the instrument change, grab the XML file from the 'xml' directory and publish it to SSDS. It will then publish all data under the new device ID.
{note}
# Edit the metadata in SSDS to put a close date on the old instrument deployment in SSDS. Currently I do that using Enterprise Manager.

h5. If this is being done after the fact the next steps will also need to be taken.

# After the new deployment shows up in SSDS, the start time for the new deployment will need to be edited to match the actual time the instrument was swapped.
# Also because the data was being published under the incorrect device ID, it will need to be moved from one database table in SSDS_Data on Solstice to another table.
## The first thing that I do is grab the timestamp from the last packet sent from the old device in the raw data page on SSDS.
## For example, I go to: [http://new-ssds.mbari.org:8080/ssds/siamRawDataStep1.jsp]and enter the old device ID and set the number of packets back to make sure it goes far enough back to cover the actual time of the instrument swap. Then click on 'Next->'.
## Once the raw data shows up, find the last packet from the old device and grab the 'SIAM Timestamp' value (not the date/time) as that will be used in the Enterprise Manager query.
## Open Enterprise Manager and navigate to the 'SSDS_Data' database on Solstice.
## Browse the tables and find the table with the device ID of the old device and right click on it and select 'Open Table->Return all rows'.
## Click on the 'SQL' button in Enterprise Manager to bring up the SQL pane. It should show the basic query which should look something like this:
{noformat}
SELECT     *
FROM         [1416]
{noformat}
## Now add the where clause to pick only the data that is after the timestamp you grabbed from the last packet on the web page.
{note:title=Timestamps in SQL are in Seconds}A quick note here, the 'SIAM Timestamp' on the raw data page is actually in milliseconds and the database column is in seconds so you will have to remove the last three digits of the 'SIAM Timestamp' before putting it in this query.
{note}
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Run this query by clicking the run button '\!' in Enterprise Manager.
## Look over the results to make sure they look about right (usually you are looking for the length of the return which should be much shorter). You can actually use a count query to see how many rows this query will return. A count query would look like:
{noformat}
SELECT    count(*)
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
## Once you know the query is correct, copy it to the clipboard and close the query window in Enterprise Manager.
## Navigate to the table of the device you want to copy the data into and right click and select 'All Tasks->Import Data...' which will fire up the DTS wizard.
### Click on 'Next>'
### For the Data Source database choose Solstice
### Select the 'SSDS_Data' database (note you should have permissions to do all this and use your windows authentication)
### Click on 'Next>'
### The destination configuration should be already to go (Solistice and SSDS_Data database).
### Click on 'Next>'
### Select 'Use a query to specify the data to transfer'
### Click on 'Next>'
### Paste the query from your clipboard into the 'Query Statement' window (You can click on 'Parse' if you want a quick sanity check)
### Click on 'Next>'
### Click on the 'Results' entry under the 'Destination' column which will enable a drop down box.
### Choose the table of the newly installed device where you will be copying the data to.
### Click on 'Next>'
### Click on 'Next>'
### Click on 'Finish' which will copy the data.
### Once that is done, open the table of the old instrument and the SQL pane so that we can construct the delete query on the old data.
### Paste in the select query and verify it is the same data you copied over:
{noformat}
SELECT     *
FROM         [1416]
WHERE timestampSeconds > 1185963023
{noformat}
### If it looks good, click on the 'Change Query type ...' button in Enterprise Manager and select 'Delete'. This will change the query to a delete query.
### Run the query by click on the run '\!' button.  That will remove all the data from the old instrument.

That's it ... whew\!

Kevin Gomes (August 3, 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162838</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195603</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162837</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404896</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /hosts/tornado_vol0/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query like this where the DataProducer.id is >= the id of the new platform, e.g.:
{noformat}

{noformat}
# ;sd;s
# &nbsp;

# &nbsp;

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# &nbsp;
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 8 October 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372155</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9404870</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /hosts/tornado_vol0/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query like this where the DataProducer.id is >= the id of the new platform, e.g.:
{noformat}

{noformat}
# ;sd;s
# &nbsp;

# &nbsp;

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# &nbsp;
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 8 October 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9372126</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">7798893</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
Remove any time or location information and check back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file; if you include other attributes they will overwrite what it in the database.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /hosts/tornado_vol0/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query like this where the DataProducer.id is >= the id of the new platform, e.g.:
{noformat}

{noformat}
# ;sd;s
# &nbsp;

# &nbsp;

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# &nbsp;
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.

Mike McCann (First edit: 30 October 2007, Last updated: 8 October 2008)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">7766129</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">3670019</id>
<property name="body"><![CDATA[The critical missing piece is documented at:

http://oceana.shore.mbari.org:8082/browse/CD-10]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">3637251</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195637</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up test mooring deployment

This procedure coincides with standard&nbsp;
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162871</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195631</id>
<property name="body"><![CDATA[From: Schramm, Rich [mailto:rich@mbari.org] 
Sent: Tuesday, November 06, 2007 3:26 PM
To: Oasis Mooring Discussion List
Subject: [oasis] occasional bogus oasis timestamp explanation...

Several OSG folks have mentioned annoyance at some of the wacko time-stamped files that get created because of occasional garbled transmissions.  The oasis system is remarkably able to re-request the missing records on subsequent downloads, however there are occasionally some generated garbage files that remain to be manually cleaned out.  I believe I understand where they are sneaking through the extraction process and what we would need to do to fix it should we wish too. This 'fix' would not effect the raw datafiles, only the generated errors files

In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410

The code snippet below runs in a while-loop and when errors are encountered it kicks out of wherever its at using a "continue" to cause the loop to seek-out the next sync byte in the raw stream...

It appears while there are checks for bad record types etc. The only time check is for time=0L  (see (klh)08Aug01 below)

My suspicion is that the occasional garbled timestamp passes the unix conversion to a "valid" gmt but is nonsense to us.

The fix would be to reject times "too old" or into the future by adding a test immediately after Kents 0 test and prior to computing a new value for the global 'itime'. (we don't want to allow itime to get set to bogus yyyyddd because its used to generate filenames...hence the problem....)

"into the future" is easily determined from the cpu clock... what a reasonable "too old" would need to be decided though we are trying to clip wild things like more than a couple of years ago... 

If we don't want to fix the extract - no biggie as far as Im concerned, we can just tuck this bit of knowledge away for future reference

Thoughts anyone.

-Rich

            :
            :
            :
            :
            hdr.log_type = buffer[0];
            hdr.log_nmbr = getHdrWord(&buffer[1], fileType);
            hdr.log_len = getHdrWord(&buffer[3], fileType);
            hdr.log_time = getHdrLong(&buffer[5], fileType);

            tp = gmtime( (time_t *)&hdr.log_time );
            /* Error check for bad header (klh) 08aug01*/
            if(tp==0L){
                        print_error("Invalid header log time in %s, record %d (type %d)\n",
                        filename, hdr.log_nmbr,hdr.log_type);
                        continue;
            }

            if ( y2k )
                itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;
            else
                itime = (1000 * tp->tm_year) + tp->tm_yday + 1;

            dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)
                                    + (60 * tp->tm_min) + tp->tm_sec) / 86400.0;

            len_got = cc - 9;                        /* compute amount of log data gotten*/
            if ( len_got > 0 )
                memmove( buffer, buffer + 9, sizeof(buffer) - 9 );
            else if ( len_got < 0 )                  /* Move log data to start of buffer*/
            {
                printf("Incomplete record header in %s, record %d (type %d)\n",filename, hdr.log_nmbr,hdr.log_type);
                continue;
            }
            :
            :
            :
            :
]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162865</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195632</id>
<property name="body"><![CDATA[{noformat}
From: Schramm, Rich rich@mbari.org
Sent: Tuesday, November 06, 2007 3:26 PM
To: Oasis Mooring Discussion List
Subject: oasis occasional bogus oasis timestamp explanation...Several OSG folks have mentioned annoyance at some of the wacko time-stamped files that getcreated because of occasional garbled transmissions. The oasis system is remarkably able tore-request the missing records on subsequent downloads, however there are occasionally somegenerated garbage files that remain to be manually cleaned out. I believe I understand where they are sneaking through the extraction process and what wewould need to do to fix it should we wish too. This 'fix' would not effect the raw datafiles, onlythe generated errors files In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410 The code snippet below runs in a while-loop and when errors are encountered it kicks out ofwherever its at using a "continue" to cause the loop to seek-out the next sync byte in theraw stream... It appears while there are checks for bad record types etc. The only time checkis for time=0L (see (klh)08Aug01 below) My suspicion is that the occasional garbled timestamppasses the unix conversion to a "valid" gmt but is nonsense to us. The fix would be to reject times "too old" or into the future by adding a test immediately afterKents 0 test and prior to computing a new value for the global 'itime'. (we don't want to allowitime to get set to bogus yyyyddd  because its used to generate filenames...hence the problem....)"into the future" is easily determined from the cpu clock... what a reasonable "too old" would needto be decided though we are trying to clip wild things like more than a couple of years ago... If we don't want to fix the extract - no biggie as far as Im concerned, we can just tuck this bitof knowledge away for future reference Thoughts anyone.-Rich:
:
:
:
hdr.log_type = buffer0;
hdr.log_nmbr = getHdrWord(&buffer1, fileType);
hdr.log_len = getHdrWord(&buffer3, fileType);
hdr.log_time = getHdrLong(&buffer5, fileType);tp = gmtime( (time_t *)&hdr.log_time );
/* Error check for bad header (klh) 08aug01*/
if(tp==0L) { print_error("Invalid header log time in %s, record %d (type %d)\n", filename, hdr.log_nmbr,hdr.log_type);continue; } if ( y2k )
itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;
else
itime = (1000 * tp->tm_year) + tp->tm_yday + 1;dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)
+ (60 * tp->tm_min) + tp->tm_sec) / 86400.0;len_got = cc - 9; /* compute amount of log data gotten*/
if ( len_got > 0 )
   memmove( buffer, buffer + 9, sizeof(buffer) - 9 );
else if ( len_got < 0 ) /* Move log data to start of buffer*/{ printf("Incomplete record header in %s, record %d (type %d)\n",filename, hdr.log_nmbr,hdr.log_type);continue; }:
:
:
:
{noformat}
{noformat}

{noformat}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162866</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195633</id>
<property name="body"><![CDATA[{noformat}
From: Schramm, Rich rich@mbari.org
Sent: Tuesday, November 06, 2007 3:26 PM
To: Oasis Mooring Discussion List
Subject: oasis occasional bogus oasis timestamp explanation...
Several OSG folks have mentioned annoyance at some of the wacko time-stamped
files that getcreated because of occasional garbled transmissions. The oasis
system is remarkably able tore-request the missing records on subsequent
downloads, however there are occasionally somegenerated garbage files that
remain to be manually cleaned out. I believe I understand where they are
sneaking through the extraction process and what wewould need to do to
fix it should we wish too. This 'fix' would not effect the raw datafiles,
only the generated errors files.

In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410
The code snippet below runs in a while-loop and when errors are encountered
it kicks out ofwherever its at using a "continue" to cause the loop to
seek-out the next sync byte in theraw stream... It appears while there
are checks for bad record types etc. The only time checkis for time=0L
(see (klh)08Aug01 below)

My suspicion is that the occasional garbled timestamp passes the unix conversion
to a "valid" gmt but is nonsense to us. The fix would be to reject times "too old"
or into the future by adding a test immediately afterKents 0 test and prior to
computing a new value for the global 'itime'. (we don't want to allowitime to
get set to bogus yyyyddd  because its used to generate filenames...hence the
problem....)"into the future" is easily determined from the cpu clock... what
a reasonable "too old" would need to be decided though we are trying to
clip wild things like more than a couple of years ago... If we don't want
to fix the extract - no biggie as far as Im concerned, we can just tuck this
bit of knowledge away for future reference Thoughts anyone.-Rich:
:
:
:
hdr.log_type = buffer0;
hdr.log_nmbr = getHdrWord(&buffer1, fileType);
hdr.log_len = getHdrWord(&buffer3, fileType);
hdr.log_time = getHdrLong(&buffer5, fileType);tp = gmtime( (time_t *)&hdr.log_time );
/* Error check for bad header (klh) 08aug01*/
if(tp==0L) { print_error("Invalid header log time in %s, record %d (type %d)\n", filename, hdr.log_nmbr,hdr.log_type);continue; } if ( y2k )
itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;
else
itime = (1000 * tp->tm_year) + tp->tm_yday + 1;dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)
+ (60 * tp->tm_min) + tp->tm_sec) / 86400.0;len_got = cc - 9; /* compute amount of log data gotten*/
if ( len_got > 0 )
   memmove( buffer, buffer + 9, sizeof(buffer) - 9 );
else if ( len_got < 0 ) /* Move log data to start of buffer*/{ printf("Incomplete record header in %s, record %d (type %d)\n",filename, hdr.log_nmbr,hdr.log_type);continue; }:
:
:
:
{noformat}
{noformat}

{noformat}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162867</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195627</id>
<property name="body"><![CDATA[{panel}
*From:* *Schramm, Rich \[mailto:rich@mbari.org\]*
*Sent:* *Tuesday, November 06, 2007 3:26 PM*
*To:* *Oasis Mooring Discussion List*
*Subject:* *\[oasis\] occasional bogus oasis timestamp explanation...* *Several OSG folks have mentioned annoyance at some of the wacko time-stamped files that get created because of occasional garbled transmissions.&nbsp; The oasis system is remarkably able to re-request the missing records on subsequent downloads, however there are occasionally some generated garbage files that remain to be manually cleaned out.&nbsp; I believe I understand where they are sneaking through the extraction process and what we would need to do to fix it should we wish too. This 'fix' would not effect the raw datafiles, only the generated errors files* *In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410* *The code snippet below runs in a while-loop and when errors are encountered it kicks out of wherever its at using a "continue" to cause the loop to seek-out the next sync byte in the raw stream...* *It appears while there are checks for bad record types etc. The only time check is for time=0L &nbsp;(see (klh)08Aug01 below)* *My suspicion is that the occasional garbled timestamp passes the unix conversion to a "valid" gmt but is nonsense to us.* *The fix would be to reject times "too old" or into the future by adding a test immediately after* Kents *0 test and prior to computing a new value for the global 'itime'. (we don't want to allow itime to get set to bogus yyyyddd because its used to generate filenames...hence the problem....)* *"into the future" is easily determined from the cpu clock... what a reasonable "too old" would need to be decided though we are trying to clip wild things like more than a couple of years ago...*  *If we don't want to fix the extract - no biggie as far as Im concerned, we can just tuck this bit of knowledge away for future reference* *Thoughts anyone.* *\-Rich* *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_type = buffer\[0\];**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_nmbr = getHdrWord(&buffer\[1\], fileType);**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_len = getHdrWord(&buffer\[3\], fileType);**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_time = getHdrLong(&buffer\[5\], fileType);* *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp = gmtime( (time_t \*)&hdr.log_time );**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Error check for bad header (klh) 08aug01*/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tp==0L){**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print_error("Invalid header log time in %s, record %d (type %d)\n",**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename, hdr.log_nmbr,hdr.log_type);**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }* *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( y2k )**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else{*}*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * tp->tm_year) + tp->tm_yday + 1;* *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + (60 * tp->tm_min) + tp->tm_sec) / 86400.0;* *&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len_got = cc - 9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* compute amount of log data gotten*/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( len_got > 0 )**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; memmove( buffer, buffer + 9, sizeof(buffer) - 9 );**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ( len_got < 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Move log data to start of buffer*/**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("Incomplete record header in %s, record %d (type %d)\n",filename, hdr.log_nmbr,hdr.log_type);**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; continue;**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }{*}*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :**&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :*
{panel}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162861</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195628</id>
<property name="body"><![CDATA[*From:* Schramm, Rich \[mailto:rich@mbari.org\]
*Sent:* Tuesday, November 06, 2007 3:26 PM
*To:* Oasis Mooring Discussion List
*Subject:* \[oasis\] occasional bogus oasis timestamp explanation... Several OSG folks have mentioned annoyance at some of the wacko time-stamped files that get created because of occasional garbled transmissions.&nbsp; The oasis system is remarkably able to re-request the missing records on subsequent downloads, however there are occasionally some generated garbage files that remain to be manually cleaned out.&nbsp; I believe I understand where they are sneaking through the extraction process and what we would need to do to fix it should we wish too. This 'fix' would not effect the raw datafiles, only the generated errors files In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410 The code snippet below runs in a while-loop and when errors are encountered it kicks out of wherever its at using a "continue" to cause the loop to seek-out the next sync byte in the raw stream... It appears while there are checks for bad record types etc. The only time check is for time=0L &nbsp;(see (klh)08Aug01 below) My suspicion is that the occasional garbled timestamp passes the unix conversion to a "valid" gmt but is nonsense to us. The fix would be to reject times "too old" or into the future by adding a test immediately after Kents 0 test and prior to computing a new value for the global 'itime'. (we don't want to allow itime to get set to bogus yyyyddd because its used to generate filenames...hence the problem....) "into the future" is easily determined from the cpu clock... what a reasonable "too old" would need to be decided though we are trying to clip wild things like more than a couple of years ago...  If we don't want to fix the extract - no biggie as far as Im concerned, we can just tuck this bit of knowledge away for future reference Thoughts anyone. \-Rich &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_type = buffer\[0\];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_nmbr = getHdrWord(&buffer\[1\], fileType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_len = getHdrWord(&buffer\[3\], fileType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_time = getHdrLong(&buffer\[5\], fileType); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp = gmtime( (time_t \*)&hdr.log_time );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Error check for bad header (klh) 08aug01*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tp==0L){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print_error("Invalid header log time in %s, record %d (type %d)\n",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename, hdr.log_nmbr,hdr.log_type);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( y2k )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * tp->tm_year) + tp->tm_yday + 1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + (60 * tp->tm_min) + tp->tm_sec) / 86400.0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len_got = cc - 9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* compute amount of log data gotten*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( len_got > 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; memmove( buffer, buffer + 9, sizeof(buffer) - 9 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ( len_got < 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Move log data to start of buffer*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("Incomplete record header in %s, record %d (type %d)\n",filename, hdr.log_nmbr,hdr.log_type);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162862</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195629</id>
<property name="body"><![CDATA[{noformat}
*From:* Schramm, Rich \[mailto:rich@mbari.org\]
*Sent:* Tuesday, November 06, 2007 3:26 PM
*To:* Oasis Mooring Discussion List
*Subject:* \[oasis\] occasional bogus oasis timestamp explanation... Several OSG folks have mentioned annoyance at some of the wacko time-stamped files that get created because of occasional garbled transmissions.&nbsp; The oasis system is remarkably able to re-request the missing records on subsequent downloads, however there are occasionally some generated garbage files that remain to be manually cleaned out.&nbsp; I believe I understand where they are sneaking through the extraction process and what we would need to do to fix it should we wish too. This 'fix' would not effect the raw datafiles, only the generated errors files In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410 The code snippet below runs in a while-loop and when errors are encountered it kicks out of wherever its at using a "continue" to cause the loop to seek-out the next sync byte in the raw stream... It appears while there are checks for bad record types etc. The only time check is for time=0L &nbsp;(see (klh)08Aug01 below) My suspicion is that the occasional garbled timestamp passes the unix conversion to a "valid" gmt but is nonsense to us. The fix would be to reject times "too old" or into the future by adding a test immediately after Kents 0 test and prior to computing a new value for the global 'itime'. (we don't want to allow itime to get set to bogus yyyyddd because its used to generate filenames...hence the problem....) "into the future" is easily determined from the cpu clock... what a reasonable "too old" would need to be decided though we are trying to clip wild things like more than a couple of years ago...  If we don't want to fix the extract - no biggie as far as Im concerned, we can just tuck this bit of knowledge away for future reference Thoughts anyone. \-Rich &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_type = buffer\[0\];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_nmbr = getHdrWord(&buffer\[1\], fileType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_len = getHdrWord(&buffer\[3\], fileType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_time = getHdrLong(&buffer\[5\], fileType); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp = gmtime( (time_t \*)&hdr.log_time );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Error check for bad header (klh) 08aug01*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tp==0L){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print_error("Invalid header log time in %s, record %d (type %d)\n",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename, hdr.log_nmbr,hdr.log_type);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( y2k )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * tp->tm_year) + tp->tm_yday + 1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + (60 * tp->tm_min) + tp->tm_sec) / 86400.0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len_got = cc - 9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* compute amount of log data gotten*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( len_got > 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; memmove( buffer, buffer + 9, sizeof(buffer) - 9 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ( len_got < 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Move log data to start of buffer*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("Incomplete record header in %s, record %d (type %d)\n",filename, hdr.log_nmbr,hdr.log_type);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :
{noformat}]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162863</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195630</id>
<property name="body"><![CDATA[*From:* Schramm, Rich \[mailto:rich@mbari.org\]
*Sent:* Tuesday, November 06, 2007 3:26 PM
*To:* Oasis Mooring Discussion List
*Subject:* \[oasis\] occasional bogus oasis timestamp explanation... Several OSG folks have mentioned annoyance at some of the wacko time-stamped files that get created because of occasional garbled transmissions.&nbsp; The oasis system is remarkably able to re-request the missing records on subsequent downloads, however there are occasionally some generated garbage files that remain to be manually cleaned out.&nbsp; I believe I understand where they are sneaking through the extraction process and what we would need to do to fix it should we wish too. This 'fix' would not effect the raw datafiles, only the generated errors files In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410 The code snippet below runs in a while-loop and when errors are encountered it kicks out of wherever its at using a "continue" to cause the loop to seek-out the next sync byte in the raw stream... It appears while there are checks for bad record types etc. The only time check is for time=0L &nbsp;(see (klh)08Aug01 below) My suspicion is that the occasional garbled timestamp passes the unix conversion to a "valid" gmt but is nonsense to us. The fix would be to reject times "too old" or into the future by adding a test immediately after Kents 0 test and prior to computing a new value for the global 'itime'. (we don't want to allow itime to get set to bogus yyyyddd because its used to generate filenames...hence the problem....) "into the future" is easily determined from the cpu clock... what a reasonable "too old" would need to be decided though we are trying to clip wild things like more than a couple of years ago...  If we don't want to fix the extract - no biggie as far as Im concerned, we can just tuck this bit of knowledge away for future reference Thoughts anyone. \-Rich &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_type = buffer\[0\];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_nmbr = getHdrWord(&buffer\[1\], fileType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_len = getHdrWord(&buffer\[3\], fileType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_time = getHdrLong(&buffer\[5\], fileType); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp = gmtime( (time_t \*)&hdr.log_time );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Error check for bad header (klh) 08aug01*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tp==0L){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print_error("Invalid header log time in %s, record %d (type %d)\n",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename, hdr.log_nmbr,hdr.log_type);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( y2k )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * tp->tm_year) + tp->tm_yday + 1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + (60 * tp->tm_min) + tp->tm_sec) / 86400.0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len_got = cc - 9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* compute amount of log data gotten*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( len_got > 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; memmove( buffer, buffer + 9, sizeof(buffer) - 9 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ( len_got < 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Move log data to start of buffer*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("Incomplete record header in %s, record %d (type %d)\n",filename, hdr.log_nmbr,hdr.log_type);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :\\]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162864</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195623</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162857</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195626</id>
<property name="body"><![CDATA[*From:* Schramm, Rich \[mailto:rich@mbari.org\]
*Sent:* Tuesday, November 06, 2007 3:26 PM
*To:* Oasis Mooring Discussion List
*Subject:* \[oasis\] occasional bogus oasis timestamp explanation... Several OSG folks have mentioned annoyance at some of the wacko time-stamped files that get created because of occasional garbled transmissions.&nbsp; The oasis system is remarkably able to re-request the missing records on subsequent downloads, however there are occasionally some generated garbage files that remain to be manually cleaned out.&nbsp; I believe I understand where they are sneaking through the extraction process and what we would need to do to fix it should we wish too. This 'fix' would not effect the raw datafiles, only the generated errors files In /oasis/src/oasis3/src/operations/src/extract.c ~ LINE 410 The code snippet below runs in a while-loop and when errors are encountered it kicks out of wherever its at using a "continue" to cause the loop to seek-out the next sync byte in the raw stream... It appears while there are checks for bad record types etc. The only time check is for time=0L &nbsp;(see (klh)08Aug01 below) My suspicion is that the occasional garbled timestamp passes the unix conversion to a "valid" gmt but is nonsense to us. The fix would be to reject times "too old" or into the future by adding a test immediately after Kents 0 test and prior to computing a new value for the global 'itime'. (we don't want to allow itime to get set to bogus yyyyddd because its used to generate filenames...hence the problem....) "into the future" is easily determined from the cpu clock... what a reasonable "too old" would need to be decided though we are trying to clip wild things like more than a couple of years ago...  If we don't want to fix the extract - no biggie as far as Im concerned, we can just tuck this bit of knowledge away for future reference Thoughts anyone. \-Rich &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_type = buffer\[0\];&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_nmbr = getHdrWord(&buffer\[1\], fileType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_len = getHdrWord(&buffer\[3\], fileType);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hdr.log_time = getHdrLong(&buffer\[5\], fileType); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tp = gmtime( (time_t \*)&hdr.log_time );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Error check for bad header (klh) 08aug01*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(tp==0L){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print_error("Invalid header log time in %s, record %d (type %d)\n",&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename, hdr.log_nmbr,hdr.log_type);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( y2k )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * (tp->tm_year + 1900)) + tp->tm_yday + 1;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; itime = (1000 * tp->tm_year) + tp->tm_yday + 1; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dtime = tp->tm_yday + 1.0 + (double)((3600 * tp->tm_hour)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; + (60 * tp->tm_min) + tp->tm_sec) / 86400.0; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; len_got = cc - 9;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* compute amount of log data gotten*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ( len_got > 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; memmove( buffer, buffer + 9, sizeof(buffer) - 9 );&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else if ( len_got < 0 )&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /\* Move log data to start of buffer*/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; printf("Incomplete record header in %s, record %d (type %d)\n",filename, hdr.log_nmbr,hdr.log_type);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; continue;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; :]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162860</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195619</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [Other]

h3. Deployments

# [2007M1 *scheduled for deployment on 7-Nov-2007]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162853</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195620</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up test mooring deployment


This procedure coincides with standard&nbsp;
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn


# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27094)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162854</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195621</id>
<property name="body"><![CDATA[# [roadmap|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/2007m1.can?rev=1.1;content-type=text%2Fplain]
# [oasis.cfg|http://moonjelly.shore.mbari.org/cgi-bin/cvsweb.cgi/oasis3/deployments/2007M1/oasis.cfg?rev=1.2;content-type=text%2Fplain]
h3. &nbsp;]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162855</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195622</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up test mooring deployment

This procedure coincides with standard&nbsp;
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again - or wait for it to run with the hourly download on tsunami.

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162856</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">9830922</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadta, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause

+Change all of the 'File's in the dataContainerType' field to 'Stream's+.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">9798168</id>
</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">29523973</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">2</id>
</property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">1835089</id>
</property>
<property name="spaceKey"><![CDATA[O3S]]></property>
<property name="user"><![CDATA[kgomes]]></property>
<property name="creationDate">2016-11-14 10:42:39.540</property>
<property name="lastModificationDate">2016-11-14 10:42:39.540</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829436</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK 
FROM [ssdsdba].[DataProducer]   
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796677</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829442</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK 
FROM [ssdsdba].[DataProducer]   
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn

h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.  The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=34496&p2Type=Date&p2Value=2010-04-03T22:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=2010-04-03T23:00:00Z&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:



Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796683</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645514</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|SSDS:Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[SSDS:main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 
41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M1 deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC
# Confirm that the processing executed properly.  Sometimes mangled timestamp data weasels its way into the data stream causing instrument netcdf files to be named with bogus start dates.  (This can also happen during a deployment and is one of the maintenance tasks one should follow to keep the data flowing to where it needs to go.)  The combine__.pl scripts will then create the OceanSITES formatted files encompassing the dates of all the instrument netcdf files.  Incorrect instrument file names will create incorrect OS_MBARI* file names causing CenCOOS and NDBC/Ifremer to complain about the correctly named file not being updated with new data.  The fix involves a purging of the bad files, double checking the metadata in SSDS and reprocessing, with perhaps additional checks in the instrument processing perl code to skip over bad records.  This is best done at the Unix command line by cd'ing to the deployment directory, e.g. 
{noformat}
cd /mbari/deployments/m1/201010
ls -lrt
{noformat}
and removing files that have bogus dates that do not represent the deployment start date.  You should also remove all the files directories and files in the gifs/ subdirectory.  These will all get recreated when you run DStoNetCDF.pl and the combine__.pl scripts.  With luck simply removing the bad files and rerunning the processing scripts will fix things.  If not, identify where the bad dates are coming from and fix as appropriate.


Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">18580006</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226304</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory. The one exception is the platform deployment XML file; its Deployment element should contain name and startDate attributes so that the parent deployment may be found in the Explorer application, e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z">
{noformat}
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259086</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226300</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd 2007/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259082</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">6226302</id>
<property name="body"><![CDATA[This is the procedure to take when OSG turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one will be deployed with all different instruments replaces it at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY>.) The new directory will have subdirectories named data, cfg, and xml.
# Edit the mooring .cfg file and changed the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Refer to email from OSG for the correct numbers, e.g.:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files. Remove any time or location information and check back into CVS. Copy the files into the _yyyy_/xml subdirectory.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.

h2. B. Procedure for doing the actual production mooring turn

So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. The steps to do this are outlined below. \[As of November 2007, there are several issues with making this a fool-proof set of instructions; therefore, for now they will serve as documentation for tasks&nbsp; in the 2008 SSDS Hardening project.\]
\\
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id > 27060)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment. Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row).
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name, ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the instrument swap procedure and doing a deep delete on the wrong instrument deployment.

If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.:

<251 elvis.shore.mbari.org /u/ssdsadmin> dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02

\- or wait for it to run with the hourly download on tsunami.
# &nbsp;
# &nbsp;
# &nbsp;

Mike McCann (30 October 2007)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">6259084</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">2195465</id>
<property name="body"><![CDATA[h1. OASIS3 Support Pages


h3. WishList

*[*Support WISHLIST*|Wishlist]*

h3. Other Documents

# [Documents|ProjectDocuments]
# [Tasks|Wishlist]
# Developer Documentation
## [MtToro Cfg|http://oceana.shore.mbari.org/ProjectLibrary/Microwave/toro%20sub%20net.xls]
## [Other]

h3. Deployments

# [2007M1 *scheduled for deployment on 7-Nov-2007]]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">2162698</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10389056</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /hosts/tornado_vol0/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /hosts/tornado_vol0/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadta, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10356341</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944554</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10911787</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944551</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadta, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10911784</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">10944552</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of standard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the roadmap is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place, e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs to the newly deployed deviceIDs (aka ISI_IDs). Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml wile with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date. For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed.

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSD ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">10911785</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">33161222</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|SSDS:Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[SSDS:main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 
41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M1 deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC
# Confirm that the processing executed properly.  Sometimes mangled timestamp data weasels its way into the data stream causing instrument netcdf files to be named with bogus start dates.  (This can also happen during a deployment and is one of the maintenance tasks one should follow to keep the data flowing to where it needs to go.)  The combine__.pl scripts will then create the OceanSITES formatted files encompassing the dates of all the instrument netcdf files.  Incorrect instrument file names will create incorrect OS_MBARI* file names causing CenCOOS and NDBC/Ifremer to complain about the correctly named file not being updated with new data.  The fix involves a purging of the bad files, double checking the metadata in SSDS and reprocessing, with perhaps additional checks in the instrument processing perl code to skip over bad records.  This is best done at the Unix command line by cd'ing to the deployment directory, e.g. 
{noformat}
cd /mbari/deployments/m1/201010
ls -lrt
{noformat}
and removing files that have bogus dates that do not represent the deployment start date.  You should also remove all the directories and files in the gifs/ subdirectory.  These will all get recreated when you run DStoNetCDF.pl and the combine__.pl scripts.  With luck, simply removing the bad files and rerunning the processing scripts will fix things.  If not, identify where the bad dates are coming from and fix as appropriate.


Mike McCann (First edit: 30 October 2007, Last updated: 1 March 2012)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">33095686</id>
</property>
</object>
<object class="Labelling" package="com.atlassian.confluence.labels">
<id name="id">30867463</id>
<property name="label" class="Label" package="com.atlassian.confluence.labels"><id name="id">6422536</id>
</property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">1835089</id>
</property>
<property name="spaceKey"><![CDATA[O3S]]></property>
<property name="user"><![CDATA[headley]]></property>
<property name="creationDate">2019-01-07 16:00:43.370</property>
<property name="lastModificationDate">2019-01-07 16:00:43.370</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829444</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=34496&p2Type=Date&p2Value=2010-04-03T22:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=2010-04-03T23:00:00Z&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment. 
# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there adit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

h4. Turn on ISUS processing.  We use a virtual ISUS device ID 

Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796685</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">11829446</id>
<property name="body"><![CDATA[This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=34496&p2Type=Date&p2Value=2010-04-03T22:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=2010-04-03T23:00:00Z&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment. 
# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file. 
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html">200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html">201004</a> 2010-04-03 to present</li>
{noformat}\\


Mike McCann (First edit: 30 October 2007, Last updated: 1 May 2009)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">11796687</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">33161223</id>
<property name="body"><![CDATA[(!) WARNING: This page is now located in the SE-IE Markdown Git project located [here|https://bitbucket.org/mbari/se-ie-doc/src/master/docs/systems/oasis/m1-mooring-turn.md]. You can check out that project, edit the documentation and push back to BitBucket and it will automatically be deployed on [MBARI's documenation site|https://docs.mbari.org/internal/se-ie-doc/systems/oasis/m1-mooring-turn/]

This is the procedure to take when the Observatory Support Group turns an OASIS mooring.&nbsp; A turn means that the currently deployed mooring is recovered and a new one is deployed with a different set of instruments at the same nominal location.

To ease the stress of SSDS data processing continuity on the day of the turn all the instrument XML and metadata processing can be tested with the dockside test deployment that is already part of sta/ndard OSG operating procedure. This test deployment will get added to SSDS, clearly labeled as a test deployment and the netCDF files and plots will be generated for complete end-to-end testing of the data processing path before the actual turn. When the actual deployment (the turn) happens we just need to change the name of the top-level deployment, e.g. from "Test M1 - November 2007" to "M1 - November 2007".

h2. A. Procedure for setting up a test mooring deployment

This procedure coincides with standard operation procedure for assembling instruments on a mooring that is about to be deployed. As soon as the mooring configuration spreadsheet is distributed, the OASIS can is closed, and data begins flowing via the getM1 & getM2 scripts on tsunami these steps can be followed to set up a set of test deployments and corresponding netCDF files and plots using the DStoNetCDF.pl and combineTS.pl, combineAll.pl scripts in the DPforSSDS/cimt project. This test can help validate instrument metadata xml and the ssds.cfg file as well as produce a complete end-to-end test of the full SSDS data path.
# Copy SSDS instrument metadata config files from previous deployment to new deployment to create a starting place (these steps are best performed logged in as ssdsadmin on elvis), e.g.:
{noformat}
cd /mbari/ssdsdata/mooring/m1
cp -r 2006 2007
{noformat}
(Of course you will copy the previous year's deployment configuration to a directory for the current year, hereafter referred to as <YYYY> or _yyyy_.) The new directory will have subdirectories named data, cfg, and xml. OSG will email a spreadsheet for the new deplolyment configuration; you may save it in the _yyyy_ directory.
# Edit the mooring .cfg file and change the instrument deviceIDs and the path to the xml files to the newly deployed deviceIDs (aka ISI_IDs) and new xml directory. Note that the deviceID is repeated on each line: once in a field by itself and again in the name of the XML file describing the device deployment:
{noformat}
cd <YYYY>/cfg
vi ssds.cfg
{noformat}
Refer to [Bob's documentation|http://mww.mbari.org/oasis/InternalDoc/OASIStoSSDS/doc/html/] for details on the formatting of the .cfg file. Generally, this is a tedious editing process where the deviceIDs from the OSG spreadsheet are copied into the proper field and into the name of the xml file that contains the device metadata.
# Get the most recent XML file for each instrument ID in the ssds.cfg file from the CVS _puckxml_ module. Make sure that no deployment specific information is in the .xml files except for nominalDepth where appropriate. Another exception is the parent platform deployment XML file; its Deployment element should contain name, startDate, nominalLatitude and nominalLongitude attributes so that the parent deployment may be found using the Explorer application,&nbsp; e.g.:
{noformat}
<Deployment role="platform" name="Test M1 - September 2008" startDate="2008-09-05T18:00:00Z" \
nominalLatitude="36.764" nominalLongitude="-122.046">
{noformat}
In the XML make sure RecordVariable names are not set to standard coordinate axis names (longitude, latitude, depth, time), these are reserved for the OceanSITES data sets which derive from the insturment netCDF files produced with this metadata. Instead choose specific names, e.g. 'MetsysTime' for the Metsys time field. After cleaning up the XML check it back into CVS. Using the OASIS-specific schema, [http://dods.mbari.org/data/ssdsdata/config/schema/2004oasis/SSDS_Metadata.xsd], will help with editing using a tool such as Oxygen or JEdit. Copy the files into the _yyyy_/xml subdirectory. +Be careful with Device attributes, generally if a Device exists in the SSDS Device table with accurate attributes only the id needs to be specified in the xml file;+ *{+}if you include other attributes they will overwrite what is in the database{+}*.
# Special treatment for the TString "instrument": The inductive modem microcats are configured as child deployments of the Inductive modem Comm Device with one output that contains all the microcat data. Examine this xml file with a fine-tooth comb and make sure that the pressure sensor Record Variables are correct as well as the parseRegEx and nominalDepth attributes.
\[Note: With the M1 - October 2009 deployment we added the individual inductive modem microcats as children of the mooring and also configured a parallel deployment of the TString that produced the same data. With the M2 - April 2010 deployment we configured the individual IM mirocrocats and did not configure a parallel TString deployment. This is a better model for the system and is much easier to configure and produces more easily consumed data by downstream processes such as combineTS.pl.\] With future deployments we will not configure TString.
# Make sure that the m1.cfg file in the cfg directory on oasis has a line referring to the correct ssds.cfg file, e.g.:
{noformat}
# The following is for ingesting OASIS data into SSDS
# Please leave it alone; 'extract' et al will ignore it
# 30 Oct 2007 Mike McCann
ssds	/ssdsdata/mooring/m1/2007/cfg/ssds.cfg
{noformat}
# Make sure that the \___ProcessRun lines in ssds.cfg refer to actual files in the xml directory.
# Check the \___ProcessRun.xml files for correct DataFile and Resource uri/urls.
# Make sure that the getM? script on tsunami executes the oasisToSSDS program on elvis.&nbsp; The script should have lines like these:
{noformat}
set SEND_SSDS $TRUE

# Send the data to SSDS
# Added 20 Jan 2005 Bob Herlien
#
if ( $SEND_SSDS == $TRUE ) then
    echo "remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE"
    remsh elvis -l ssdsadmin dev/DPforSSDS/oasis/bin/oasisToSSDS -c $CFGFILE $RAW/$DATAFILE &
endif
{noformat}
# Before initiating the oasisToSSDS program take a printout of the ssds.cfg file over to the Mooring and verify the Device IDs for each instrument attached to the mooring. It's important to have this important metadata correct from the beginning otherwise the DataStreams will end up in the wrong "buckets" requiring some detailed re-work after the fact, namely following the [instrument swap procedure|SSDS:Instrument Swap on Oasis Mooring] and doing a deep delete (e.g.: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?responseType=text&delimiter=\|&objectToInvokeOn=DataProducerAccess&method=deepDelete&p1Type=DataProducer&p1Value=DataProducer\|id=<deploymentID>) on the wrong instrument deployment.
# Test by:
## Monitor the extractRawData.log file in the ssdsdata/mooring/logs file for progress and any INFO or ERROR messages.&nbsp; For instance if you see something like "\[SSDS:main\] INFO oasis.ssds.ingest.OasisToSSDS&nbsp; - Unprocessed record, type = ASIMET_HRH" then that is an instrument missing from the ssds.cfg file for which data records are being received. To fix this add the correct instrument record to ssds.cfg.
## Check for metadata ingest in [Explorer|http://new-ssds.mbari.org:8080/ssds/faces/explorer.jsp] by searching for 'Test' in the "Search By Deployment Name:" field (note: may need to hit 'Enter' a few times to actually get something returned).&nbsp; You should see a tree structure headed by the Deployment name entered in step 3. Open the deployment and drill down through the Attached Devices and Outputs to spot check the mooring instruments and their attributes - confirm against the the list provided by OSG. If there are any problems check the insturment XML and the ssds.cfg files configured in steps 2 to 4.
## To correct missing or wrong Deplyment attributes (e.g. nominalLatitude and nominalLongitude) the quickest way to correct is to use Enterprise Manager to select the DataProducer (identified by id in Explorer) and edt the fields directly in the table.
# Set up netCDF creation and plotting:
## Examine the processCurrentMooringDataStreams.sh script in /u/ssdsadmin/dev/DPforSSDS/cimt for lines (probably commented out) that process the test deployment.&nbsp; They will look something like:
{noformat}
#
# Test M1 - Combine scripts look in Deployment Directory m1/200710
#
##set DDIR=200710
##DStoNetCDF.pl -mooring M1Test -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org \
-outputDir $ODIR -verbose -current |& tee $ODIR/m1/processing.log
{noformat}
set DDIR to the YYYYMM of the test deployment and execute the DStoNetCDF.pl script with the above arguments; ODIR = /mbari/ssdsdata/deployments on elvis.&nbsp; Note that the name of the Deployment is "Test M1 - <startDate>" in SSDS, but that the argument to the \-mooring parameter is "M1Test". The DStoNetCDF.pl script contains a lookup that matches "M1Test" to "Test M1 ...".
## Execution of DstoNetCDF.pl will produce a web page in ssdsdata/deployments/m1test/current_qcPlots.html that contains links to the produced netCDF files and plots (available as web page [http://dods.mbari.org/data/ssdsdata/deployments/m1test/current_qcPlots.html]). Examine this page to see that every instrument we can process has a netCDF file and corresponding plots. If there are problems follow the instructions in the TROUBLESHOOT file in /u/ssdsadmin/dev/DPforSSDS/cimt. Generally, if the metadata is correct in SSDS then the netCDFs and plots will be produced. Either update the .cfg and XML files following steps 2-4 or update SSDS directly as appropriate.
## Configure the DStoNetCDF.pl to run for the test deployment in the cron job and inform OSG and the OASIS discussion list of the availability of these products.

h2. B. Procedure for doing the actual production mooring turn


h4. Close existing mooring deployment

# So, after the test has been run and data validated there is a sequence of manual steps for closing the previous deployment and beginning the production data processing of the new deployment. On the day the previous production mooring deployment is ended close that deployment by setting the endDate for the parent platform and child deployments.&nbsp; From SSDS Explorer find the DataProducer ID for the mooring deployment, do a SELECT for that record and edit the endDate field (the times in the database are GMT). Then select all child deployments with a query on the foreign key like this:

{noformat}
SELECT     *
FROM         ssdsdba.DataProducer
WHERE     (ParentID_FK = 27122)
{noformat}
(Make sure to use the DataProducer ID for the platform deployment.) Set all endDates that are <NULL> to the actual end date.
\\

For instruments that have child Sensor deployments (e.g. the Hyperspectral radiometers and imctd) do the same thing by changing the ParentID_FK to the id of the instrument and set all the <NULL> endDates so that everything on the recovered mooring is closed (or...as below \-rschramm 4/2010)
\\
\\
{noformat}
declare @myID as bigint
set @myID = 31548
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE id = @myID and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk = @myID  and endDate is NULL
UNION
SELECT id,name,dataProducerType,startDate,endDate,ParentID_FK
FROM [ssdsdba].[DataProducer]
WHERE parentid_fk in ( SELECT id
     FROM [ssdsdba].[DataProducer]
     WHERE parentid_fk = @myID  and endDate is NULL)
ORDER BY id
{noformat}

h4. Configure new mooring deployment

# To control the new SSDS Metadata ingest temporarily turn off the oasisToSSDS execution in the getM? script on tsunami. This way you may edit the xml files at leisure without the ingest picking up any incorrect metadata while you are in the process of editing. In the XML file for the new platform deployment, which is currently configured as the Test deployment, edit the +name+, +startDate+, and +nominalLatitude+ and +nominalLongitude+ attributes to reflect the production deployment. E.g.:
{noformat}
 <Deployment role="platform" name="M1 - October 2008" startDate="2008-10-08T17:00:00Z" nominalLatitude="36.764" nominalLongitude="-122.046">
		<Device id="1306"/>
		<Resource
			url="doc://foobar/watchCircle?centerLon=-122.0323&amp;centerLat=36.7562&amp;warningDist=1.2"
			name="Watch circle information">
			<description>Data for this mooring's watch circle are embedded in the uriString of this
				Resource. An application may parse for these parameters to use as criteria for
				issuing a warning if the GPS position is geater than warningDist (in km) from
				centerLat and centerLon (in decimal degrees WGS84)</description>
		</Resource>
	</Deployment>
{noformat}
The nominalLatitude and nominalLongitude values should be exactly the same as all other deployments at M1 or M2. Make sure that the watchCircle parameters are relatively correct, the centerLon and centerLat values may be changed to reflect the actual anchor location. And these values can be updated as data come and in and we get a better idea of the actual watch circle. Save the changes to this file, check those changes into the puckxml CVS project and touch the remaining xml files so that SSDS ingest will recognize them as new.
# +Do not close (set endDates) the existing Test deployment until after the oasisToSSDS has run with the new platform deployment name+ and all new instrument deployments have been created in SSDS_Metadata.
# See that oasisToSSDS is allowed to execute in the getM? script.&nbsp; Monitor the /mbari/ssdsdata/mooring/logs/extractRawData.log file to see that downloaded records for the mooring being turned are processed. Then check that metadata is properly loaded with a query looking at the recently ingested Deployment metadata, e.g.:
{noformat}
SELECT     id, name, startDate, endDate, ParentID_FK
FROM       ssdsdba.DataProducer
WHERE      (dataProducerType = 'Deployment')
ORDER BY id DESC
{noformat}
Things to check for:
## All ParentIDs should not be null except for the Platform deployment.
## Sensors should be children of instruments, e.g. inductive modem microcats are children of the Surface Inductive Modem
## All other instruments should be children of the platform deployment
# Check the SSDS_Metadata database for successful ingest of the platform and instrument deployment metadata with a query like this:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.DataProducer.id  >= 28873)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
You will need to set the DataProducer.id criteria to be appropriate for this deployment.
# Add the new deployment to the DataProducerGroup "Mooring Deployments".&nbsp; Do this query:
{noformat}
SELECT     ssdsdba.DataProducerAssocDataProducerGroup.*
FROM         ssdsdba.DataProducerAssocDataProducerGroup
WHERE     (DataProducerGroupID_FK = 111)
{noformat}
and add a record to the DataProducerAssocDataProducerGroup table for the new platform deployment and the group id 111, which is the MooringDeployments group.
# You next need to link up the new deployment to a DataProducerGroup that contains all the deployment of the like designator. For example, if an M1 turn is being done, you need to add the new deployment to the "M1 Deployments" DataProducerGroup. You first need to find the DataProducerGroup.id for the group you are looking for.  Do this query in Enterprise Manager:
{noformat}
SELECT * FROM ssdsdba.DataProducerGroup WHERE name = 'M1 Deployments'
{noformat}
Make sure you use the correct _M_ Number for the turn you are doing.  Note the id from the results.  Now you need to add the new deployment to that data producer group.  Right-click on the DataProducerAssocDataProducerGroup table and do 'Open Table->Return All Rows'.  You can then scroll to the bottom and there should be an open row that you can insert new values in.  Put the ID of the new deployment in the first column and the id from the previous query in the second and then click out of the new row (that should commit the row). Do the same for the 'Mooring Deployments' DataProducerGroup.
# If a device is missing as a child of the mooring deployment then use the Raw Data Access Page to query for metadata from the device. For instance if the GPS is not a a child (as can now be seen from using SSDS Explorer and the predefined 'Mooring Deployments' query) then enter its device id and '0' for record type. From Enterprise manager you can then see which deployment and parent it got assigned to, e.g.:
{noformat}
SELECT     ssdsdba.DataProducer.id, ssdsdba.DataProducer.ParentID_FK AS ParentID, ssdsdba.DataProducer.name,
                      ssdsdba.Device.id AS DeviceID,
                      ssdsdba.Device.name AS DeviceName
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.Device ON ssdsdba.DataProducer.DeviceID_FK = ssdsdba.Device.id
WHERE     (ssdsdba.Device.id = 1468)
ORDER BY ssdsdba.DataProducer.id DESC
{noformat}
If there is no deployment for the time of the XML ingest then there was probably a deadlock on SSDS's attempt to insert it into the database. You can manually force an insert by altering the text of the device's xml file in moorings/m?/yyyy/xml (just add a space or something) and then run oasisToSSDS again, e.g.: > dev/DPforSSDS/oasis/bin/oasisToSSDS \-c /oasis/cfg/m1.cfg /oasis/raw/m1.2007310.02, or wait for it to run with the hourly download on tsunami.
# Set up netCDF creation and plotting: In the processCurrentMooringDataStreams.sh script change the DDIR environment variable to the current YYYYMM for the production mooring run.&nbsp; Comment out the Test deployment DStoNetCDF.pl execution and add lines for the closed deployment to the DEPLOYMENTS file.
# You will also need to edit the DStoNetCDF.pl script to set the new name of the M1 deployment, e.g.:
{noformat}
#
# SSDS mooring name Deployment lookup
#
my %ssdsMooringDeplNames = (
        M0 => 'M0',
        M1 => 'M1 - October 2009',
        M1Test => 'Test M1 - October 2009',
        M2 => 'M2 - April 2009',
{noformat}
# Monitor the SSDS processing web page (e.g. [http://dods.mbari.org/data/ssdsdata/deployments/m1/current_qcPlots.html]) for successful data processing.
# When the mooring log message is sent to oasis with the actual time of deployment enter that as the startDate in the database.&nbsp; All times (DTGs) in the SSDS_Metadata database are GMT. Make sure to set the startDate for the imctd microcat sensors too. This can be done with a query like this where you use the proper dataProduceIDs for the mooring and the imcd:
{noformat}
SELECT     id, name, ParentID_FK, startDate, endDate, nominalDepth
FROM         ssdsdba.DataProducer
WHERE     (dataProducerType = 'Deployment') AND (ParentID_FK = 31564) OR
                      (ParentID_FK = 31548)
ORDER BY id DESC
{noformat}
# Because of some bug in SSDS ingest the dataContainerTypes of the outputs from the instrument deployments do not get properly assigned the values of 'Stream'.&nbsp; This needs to be fixed so that the NDBC datatransfers will work. To fix it edit the SSDS_Metadata database starting with a query like this:
{noformat}
SELECT     ssdsdba.DataContainer.*
FROM         ssdsdba.DataProducer INNER JOIN
                      ssdsdba.DataContainer ON ssdsdba.DataProducer.id = ssdsdba.DataContainer.DataProducerID_FK
WHERE     (ssdsdba.DataProducer.ParentID_FK = 31548)
{noformat}
where you use the DataProducerID for the new mooring deployment in the WHERE clause. ==> Change all of the 'File's in the dataContainerType' field to 'Stream's.

h2. C. Procedures to be done after the mooring turn


h4. Set up download info deployment and reporting

Though not a real instrument, we configure a virtual 'dlinfo' instrument for the download scripts to attach download statistics data.  We re-use the same device IDs for the M1 and M2 moorings, so it's best to configure this after the new mooring is out and all of those deployments have been closed.  As the data are delivered "out of band" from the typical OASIS instruments we need to create a deployment for dlinfo instrument by hand.
# The most direct way is to use the createDuplicateDeepDeployment service call.  For example, to duplicate the 2009 M2 dlinfo deployment for the 2010 M2 deployment this call was executed: http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer\|id=*34496*&p2Type=Date&p2Value=*2010-04-03T22:00:00Z*&p3Type=boolean&p3Value=false&p4Type=Date&p4Value=*2010-04-03T23:00:00Z*&p5Type=String&p5Value=getM2-download&p6Type=String&p6Value=&delimiter=\|.  Of course you will need to adjust the DataProducer ID Date values for the new deployment you are creating.  Here is the Key to the parameters:
{noformat}
Key:
----
http://localhost:8080/servlet/MetadataAccessServlet
?responseType=text
&delimiter=|
&objectToInvokeOn=DataProducerAccess
&method=createDuplicateDeepDeployment
&p1Type=DataProducer
&p1Value=DataProducer|id=XXXX (XXXX is the ID of the deployment to copy)
&p2Type=Date
&p2Value=XXXXXX (XXXXXX is the start date of the new copy in XML format YYYY-MM-DDTHH:MM:SSZ)
&p3Type=boolean
&p3Value=(true|false)  (this is to indicate if you want the original deployment to be closed)
&p4Type=Date
&p4Value=XXXXXX (XXXXXX is the end date for the original deployment (if p3Value is true))
&p5Type=String
&p5Value=XXXXXX (XXXXXX is the DataProducer name of the new DataProducer)
&p6Type=String
&p6Value=XXXXXX (XXXXXX is the base URL to use for the new DataContainers that will be created).
&delimiter=|
{noformat}\\
Executing the createDuplicateDeepDeployment service call will return an ID for the new deployment.


# Edit the new deployment record in the DataProducer table to adjust it's parentID_FK to be for the new mooring.  While there edit times and name as appropriate.
# Edit the getM? script on tsunami to use the proper device and parent ID (this will be the device ID of the torroid of the mooring deployment) and make sure that the '/oasis/bin/ssdsSubmit.pl $deviceId $parentId "$starttime_es,$endtime_es,$filesize,$rtnsts"' line in the script is configured to run.

Here's another example for the October 2010 M1 turn:
{noformat}
http://new-ssds.mbari.org:8080/servlet/MetadataAccessServlet?method=createDuplicateDeepDeployment&objectToInvokeOn=DataProducerAccess&\
p1Type=moos.ssds.metadata.DataProducer&p1Value=DataProducer|id=35591&p2Type=Date&p2Value=2010-10-27T21:00:00Z&p3Type=boolean&p3Value=false&p4Type=Date&\
p4Value=2010-q0-27T20:30:00Z&p5Type=String&p5Value=getM1-download&p6Type=String&p6Value=&delimiter=|

(This returned a new DataProducerID of 41556.  The ParentID_FK for this record in the DataProducer table was then changed from 35388 to 
41197 and the endDate cleared to null.
Also, with the change to alternating deviceIDs implemented in 2010 the deviceID_FK was changed from 1698 to 1768 for this M1 deployment.
{noformat}

N.B. A rotating scheme for the virtual device IDs was implemented in 2010.  This permits the steps described above to be executed prior to the mooring turn during the extensive
dock-side test period.


h4. Enable processing for other "virtual" devices

# Turn on ClockSync processing.  We also use a virtual device ID for these data.  Simply uncomment the line for it in the ssds.cfg file.
# Turn on ISUS processing. Simply uncomment the line for it in the ssds.cfg file. (Device ID re-used from previous deployment.)


h4. Make all of the child instrument deployment start times the same as the mooring start time

When SSDS receives a packet from an instrument that is not currently deployed it will create a Deployment record (in the DataProducer table) with a startDate that is set to the time of the first record received.  As the mooring starts up all of the instrument deployments will have different start times based on when they each first saw data.  This can present problems for the data processing that follows, especially for the jobs that aggregate the microcat data into a single ZT file that is used to produce the contour temperature and salinity wind stick plots.  To prevent these problems it's best to edit the startDates of the child instrument deployments so that they are all the same. This is currently most easily done through Enterprise Manager with a query like below (this is for the 201010 M1 deployment) to get all the child instrument deployments:

{noformat}
SELECT    *
FROM      ssdsdba.DataProducer
WHERE     (ParentID_FK = 41197)
ORDER BY  startDate
{noformat}

Then copy and paste the datetime string from one cell to the next.  The times are GMT.

h4. Cycle links to previous deployment

# Edit previous.html file in /mbari/ssdsdata/deployments to add a line for the new deployment and add the end date and archive url for the just closed deployment, e.g.:
{noformat}
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/m2_200904_qcPlots.html"  >200904</a> 2009-04-29 to 2010-04-03</li>
<li><a href="http://dods.mbari.org/data/ssdsdata/deployments/m2/current_qcPlots.html"  >201004</a> 2010-04-03 to present</li>
{noformat}\\
# Add lines to DEPLOYMENTS file in dev/DPforSSDS/cimt/ for the just closed deployment, e.g.:
{noformat}
  DStoNetCDF.pl -mooring M2 -deployment "M2 - April 2009" -ssdsServer new-ssds.mbari.org -ssdsDataServer new-ssds.mbari.org -outputDir \
/mbari/ssdsdata/deployments -procClosed -verbose
  combineM.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineTS.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments
  combineAll.pl -mooring M2 -ssdsServer new-ssds.mbari.org -deployments 200904 -ssdsDataServer new-ssds.mbari.org -inputDir /mbari/ssdsdata/deployments

and

  /bin/cp /mbari/ssdsdata/deployments/m2/200904/OS_*.nc /mbari/FTP/pub/OceanSITES
{noformat}\\
# Execute these lines to generate "closed deployment" data products and web pages and for submission to the OceanSITES GDAC
# Confirm that the processing executed properly.  Sometimes mangled timestamp data weasels its way into the data stream causing instrument netcdf files to be named with bogus start dates.  (This can also happen during a deployment and is one of the maintenance tasks one should follow to keep the data flowing to where it needs to go.)  The combine__.pl scripts will then create the OceanSITES formatted files encompassing the dates of all the instrument netcdf files.  Incorrect instrument file names will create incorrect OS_MBARI* file names causing CenCOOS and NDBC/Ifremer to complain about the correctly named file not being updated with new data.  The fix involves a purging of the bad files, double checking the metadata in SSDS and reprocessing, with perhaps additional checks in the instrument processing perl code to skip over bad records.  This is best done at the Unix command line by cd'ing to the deployment directory, e.g. 
{noformat}
cd /mbari/deployments/m1/201010
ls -lrt
{noformat}
and removing files that have bogus dates that do not represent the deployment start date.  You should also remove all the directories and files in the gifs/ subdirectory.  These will all get recreated when you run DStoNetCDF.pl and the combine__.pl scripts.  With luck, simply removing the bad files and rerunning the processing scripts will fix things.  If not, identify where the bad dates are coming from and fix as appropriate.


Mike McCann (First edit: 30 October 2007, Last updated: 1 March 2012)]]></property>
<property name="content" class="Page" package="com.atlassian.confluence.pages"><id name="id">33095687</id>
</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">19071253</id>
<property name="body"><![CDATA[Oasis cfg file and app are in CVS at
http://moonjelly.shore.mbari.org/cgi-bin/viewvc.cgi/oasis3/deployments/]]></property>
<property name="content" class="Comment" package="com.atlassian.confluence.pages"><id name="id">19038487</id>
</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">2</id>
<property name="name"><![CDATA[favourite]]></property>
<property name="owner"><![CDATA[kgomes]]></property>
<property name="namespace"><![CDATA[my]]></property>
<property name="creationDate">2006-10-17 21:48:40.373</property>
<property name="lastModificationDate">2026-02-04 08:33:05.020</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">1867869</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">1835105</id>
</property>
</object>
<object class="Label" package="com.atlassian.confluence.labels">
<id name="id">6422536</id>
<property name="name"><![CDATA[favourite]]></property>
<property name="owner"><![CDATA[headley]]></property>
<property name="namespace"><![CDATA[my]]></property>
<property name="creationDate">2008-10-09 22:18:04.253</property>
<property name="lastModificationDate">2026-02-04 08:33:05.048</property>
</object>
<object class="BodyContent" package="com.atlassian.confluence.core">
<id name="id">18645302</id>
<property name="body"><![CDATA[]]></property>
<property name="content" class="SpaceDescription" package="com.atlassian.confluence.spaces"><id name="id">18579787</id>
</property>
</object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3637814</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">17858815</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3114486</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3637814</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">2162834</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">1835140</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">18579795</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">16777265</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">3114486</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">17858815</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">1835091</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">1835090</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">1835091</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">2162834</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">17858807</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">1835090</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">18579795</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">17858807</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">16777265</property>
<property name="key"><![CDATA[socialbookmarkingurl]]></property>
</composite-id>
<property name="type">6</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
<object class="BucketPropertySetItem" package="bucket.user.propertyset">
<composite-id><property name="entityName"><![CDATA[confluence_ContentEntityObject]]></property>
<property name="entityId">1835140</property>
<property name="key"><![CDATA[isbookmark]]></property>
</composite-id>
<property name="type">5</property>
<property name="booleanVal">false</property>
<property name="doubleVal">0.0</property>
<property name="stringVal"/><property name="textVal"><![CDATA[]]></property>
<property name="longVal">0</property>
<property name="intVal">0</property>
<property name="dateVal"/></object>
</hibernate-generic>