Skip to content

PyPNM / DOCSIS-3.1 / DS-OFDM-ProfileStats

Source Files

  • HTML/script: visual/PyPNM/DOCSIS-3.1/DS-OFDM-ProfileStats.html
  • JSON sample: visual/PyPNM/DOCSIS-3.1/DS-OFDM-ProfileStats.json

Preview

Preview is best-effort. Some templates may rely on Postman-specific APIs that are not yet shimmed.

Visualizer HTML/script source
// Postman Visualizer: DOCSIS-3.1/DS-OFDM-ProfileStats
// Last Update: 2026-02-25 06:01:33 MST

// Postman Visualizer - DOCSIS 3.1 DS OFDM Profile Stats (Dark Mode)
// Useful visuals (no overlap; separate graphs per channel):
// 1) Per-channel: Total vs Corrected vs Uncorrectable Codewords by Profile (BAR, grouped)
// 2) Per-channel: InOctets by Profile (BAR)
// 3) Per-channel: Unicast vs Multicast Octets by Profile (BAR, grouped)
// 4) Summary KPIs: dominant profile (by total CW), corrected rate, top channels by corrected CW

const template = `
<style>
  body {
    font-family: Arial, sans-serif;
    padding: 20px;
    background-color: #0f1220;
    color: #eaeaea;
  }
  .header {
    background-color: #151a2e;
    border: 1px solid rgba(255,255,255,0.08);
    padding: 16px 16px 10px 16px;
    border-radius: 10px;
    margin-bottom: 18px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.35);
  }
  .title {
    font-size: 18px;
    font-weight: bold;
    margin: 0 0 10px 0;
    color: #ff4d6d;
  }
  .meta {
    display: flex;
    flex-wrap: wrap;
    gap: 10px;
    margin-bottom: 10px;
  }
  .pill {
    background: rgba(255,255,255,0.06);
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 999px;
    padding: 6px 10px;
    font-size: 12px;
    color: #eaeaea;
  }
  .pill b { color: #9fb4ff; font-weight: 700; }
  .sub {
    margin: 0 0 6px 0;
    font-size: 12px;
    color: rgba(234,234,234,0.85);
  }

  .deviceInfoCard {
    background-color: #151a2e;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 10px;
    padding: 14px;
    margin-bottom: 16px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.35);
  }
  .deviceInfoCard h3 { margin: 0 0 8px 0; font-size: 14px; color: #9fb4ff; }
  .deviceInfoTable { width: 100%; border-collapse: collapse; font-size: 12px; }
  .deviceInfoTable th, .deviceInfoTable td { border-bottom: 1px solid rgba(255,255,255,0.08); padding: 8px 6px; text-align: left; white-space: nowrap; }
  .deviceInfoTable th { color: #9fb4ff; font-weight: 700; }
  .mono { font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; }

  .grid {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 16px;
  }
  @media (max-width: 1100px) {
    .grid {
      grid-template-columns: 1fr;
    }
  }
  .card {
    background-color: #151a2e;
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 10px;
    padding: 14px;
    box-shadow: 0 2px 8px rgba(0,0,0,0.35);
  }
  .card h3 {
    margin: 0 0 6px 0;
    font-size: 14px;
    color: #9fb4ff;
  }
  .divider {
    height: 1px;
    background: rgba(255,255,255,0.08);
    margin: 14px 0;
  }
  .kpi {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
    margin-top: 10px;
  }
  .kpiItem {
    background: rgba(255,255,255,0.06);
    border: 1px solid rgba(255,255,255,0.08);
    border-radius: 10px;
    padding: 10px;
  }
  .kpiItem .k {
    font-size: 11px;
    color: rgba(234,234,234,0.8);
    margin-bottom: 4px;
  }
  .kpiItem .v {
    font-size: 16px;
    font-weight: 700;
    color: #eaeaea;
  }
  .kpiItem .h {
    margin-top: 4px;
    font-size: 11px;
    color: rgba(159,180,255,0.95);
  }
  table {
    width: 100%;
    border-collapse: collapse;
    margin-top: 10px;
    font-size: 12px;
  }
  th, td {
    border-bottom: 1px solid rgba(255,255,255,0.08);
    padding: 8px 6px;
    text-align: left;
    white-space: nowrap;
  }
  th { color: #9fb4ff; font-weight: 700; }
  .warn { color: #ffcc66; }
  .bad  { color: #ff6b6b; }
</style>


<div class="deviceInfoCard">
  <h3>Device Info</h3>
  <table class="deviceInfoTable">
    <thead>
      <tr>
        <th>MacAddress</th><th>Model</th><th>Vendor</th><th>SW Version</th><th>HW Version</th><th>Boot ROM</th>
      </tr>
    </thead>
    <tbody>
      <tr>
        <td class="mono">{{deviceInfo.macAddress}}</td>
        <td>{{deviceInfo.MODEL}}</td>
        <td>{{deviceInfo.VENDOR}}</td>
        <td class="mono">{{deviceInfo.SW_REV}}</td>
        <td class="mono">{{deviceInfo.HW_REV}}</td>
        <td class="mono">{{deviceInfo.BOOTR}}</td>
      </tr>
    </tbody>
  </table>
</div>

<div class="header">
  <div class="title">DS OFDM Profile Stats</div>
  <div class="meta">
    <div class="pill"><b>MAC</b> {{mac}}</div>
    <div class="pill"><b>Status</b> {{statusText}}</div>
    <div class="pill"><b>Channels</b> {{channelCount}}</div>
    <div class="pill"><b>Profiles Seen</b> {{profileCount}}</div>
  </div>
  <div class="sub">{{message}}</div>

  <div class="kpi">
    <div class="kpiItem">
      <div class="k">Worst Corrected Rate</div>
      <div class="v">{{kpi.worstCorrRate}}</div>
      <div class="h">Ch {{kpi.worstCorrCh}} · Profile {{kpi.worstCorrProfile}}</div>
    </div>
    <div class="kpiItem">
      <div class="k">Total Corrected Codewords</div>
      <div class="v">{{kpi.totalCorrected}}</div>
      <div class="h">Across all channels/profiles</div>
    </div>
    <div class="kpiItem">
      <div class="k">Dominant Profile</div>
      <div class="v">{{kpi.dominantProfile}}</div>
      <div class="h">By total codewords (all channels)</div>
    </div>
  </div>

  <div class="divider"></div>

  <div class="sub"><b>Channel Summary</b></div>
  <table>
    <thead>
      <tr>
        <th>Channel</th>
        <th>Corrected CW</th>
        <th>Total CW</th>
        <th>Corrected Rate</th>
        <th>Worst Profile</th>
      </tr>
    </thead>
    <tbody>
      {{#each channelRows}}
      <tr>
        <td>{{ch}}</td>
        <td>{{corr}}</td>
        <td>{{total}}</td>
        <td class="{{rateClass}}">{{rate}}</td>
        <td>{{worstProfile}}</td>
      </tr>
      {{/each}}
    </tbody>
  </table>
</div>


<div class="grid">
  {{#each channels}}
  <div class="card">
    <h3>{{label}} · Codewords By Profile</h3>
    <div class="sub">Grouped bars: Total vs Corrected vs Uncorrectable.</div>
    <canvas id="chart_cw_{{canvas_id}}" height="110"></canvas>

    <div class="divider"></div>

    <h3>{{label}} · InOctets By Profile</h3>
    <div class="sub">Total inbound octets (bars).</div>
    <canvas id="chart_oct_{{canvas_id}}" height="100"></canvas>

    <div class="divider"></div>

    <h3>{{label}} · Unicast vs Multicast Octets By Profile</h3>
    <div class="sub">Traffic split by profile.</div>
    <canvas id="chart_um_{{canvas_id}}" height="110"></canvas>
  </div>
  {{/each}}
</div>

<script src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/2.9.4/Chart.min.js"></script>
<script>

    pm.getData(function (err, value) {
  if (err) {
    console.error(err);
    return;
  }

  var gridColor = 'rgba(255,255,255,0.12)';
  var tickColor = 'rgba(234,234,234,0.85)';
  var labelColor = '#eaeaea';

  var rgbaFill = function(rgb, a) {
    return rgb.replace('rgb', 'rgba').replace(')', ', ' + a + ')');
  };

  var cTotal = 'rgb(54, 162, 235)';
  var cCorr  = 'rgb(255, 206, 86)';
  var cUnc   = 'rgb(255, 99, 132)';
  var cOct   = 'rgb(75, 192, 192)';
  var cUni   = 'rgb(153, 102, 255)';
  var cMul   = 'rgb(255, 159, 64)';

  (value.channels || []).forEach(function(ch) {
    // --- Codewords chart ---
    (function renderCodewords() {
      var canvas = document.getElementById('chart_cw_' + ch.canvas_id);
      if (!canvas) return;

      new Chart(canvas.getContext('2d'), {
        type: 'bar',
        data: {
          labels: ch.profileLabels,
          datasets: [
            { label: 'Total CW', data: ch.totalCW, backgroundColor: rgbaFill(cTotal, 0.55), borderColor: cTotal, borderWidth: 1 },
            { label: 'Corrected CW', data: ch.corrCW, backgroundColor: rgbaFill(cCorr, 0.55), borderColor: cCorr, borderWidth: 1 },
            { label: 'Uncorrectable CW', data: ch.uncCW, backgroundColor: rgbaFill(cUnc, 0.55), borderColor: cUnc, borderWidth: 1 }
          ]
        },
        options: {
          responsive: true,
          maintainAspectRatio: true,
          legend: { display: true, labels: { fontColor: labelColor } },
          tooltips: { mode: 'index', intersect: false },
          scales: {
            xAxes: [{
              ticks: { fontColor: tickColor, maxTicksLimit: 16 },
              gridLines: { color: gridColor },
              scaleLabel: { display: true, labelString: 'Profile ID', fontColor: labelColor }
            }],
            yAxes: [{
              ticks: { fontColor: tickColor, beginAtZero: true },
              gridLines: { color: gridColor },
              scaleLabel: { display: true, labelString: 'Codewords', fontColor: labelColor }
            }]
          }
        }
      });
    })();

    // --- InOctets chart ---
    (function renderOctets() {
      var canvas = document.getElementById('chart_oct_' + ch.canvas_id);
      if (!canvas) return;

      new Chart(canvas.getContext('2d'), {
        type: 'bar',
        data: {
          labels: ch.profileLabels,
          datasets: [
            { label: 'InOctets', data: ch.inOctets, backgroundColor: rgbaFill(cOct, 0.55), borderColor: cOct, borderWidth: 1 }
          ]
        },
        options: {
          responsive: true,
          maintainAspectRatio: true,
          legend: { display: true, labels: { fontColor: labelColor } },
          tooltips: { mode: 'index', intersect: false },
          scales: {
            xAxes: [{
              ticks: { fontColor: tickColor, maxTicksLimit: 16 },
              gridLines: { color: gridColor },
              scaleLabel: { display: true, labelString: 'Profile ID', fontColor: labelColor }
            }],
            yAxes: [{
              ticks: { fontColor: tickColor, beginAtZero: true },
              gridLines: { color: gridColor },
              scaleLabel: { display: true, labelString: 'Octets', fontColor: labelColor }
            }]
          }
        }
      });
    })();

    // --- Unicast/Multicast chart ---
    (function renderUniMul() {
      var canvas = document.getElementById('chart_um_' + ch.canvas_id);
      if (!canvas) return;

      new Chart(canvas.getContext('2d'), {
        type: 'bar',
        data: {
          labels: ch.profileLabels,
          datasets: [
            { label: 'Unicast Octets', data: ch.uniOctets, backgroundColor: rgbaFill(cUni, 0.55), borderColor: cUni, borderWidth: 1 },
            { label: 'Multicast Octets', data: ch.mulOctets, backgroundColor: rgbaFill(cMul, 0.55), borderColor: cMul, borderWidth: 1 }
          ]
        },
        options: {
          responsive: true,
          maintainAspectRatio: true,
          legend: { display: true, labels: { fontColor: labelColor } },
          tooltips: { mode: 'index', intersect: false },
          scales: {
            xAxes: [{
              ticks: { fontColor: tickColor, maxTicksLimit: 16 },
              gridLines: { color: gridColor },
              scaleLabel: { display: true, labelString: 'Profile ID', fontColor: labelColor }
            }],
            yAxes: [{
              ticks: { fontColor: tickColor, beginAtZero: true },
              gridLines: { color: gridColor },
              scaleLabel: { display: true, labelString: 'Octets', fontColor: labelColor }
            }]
          }
        }
      });
    })();
  });
});
</script>
`;

function constructVisualizerPayload() {
  const r = pm.response.json();
  const device = (r.device && typeof r.device === "object") ? r.device : {};
  const sys = (device.system_description && typeof device.system_description === "object") ? device.system_description : {};

  const mac = ((r.device || {}).mac_address) || 'N/A';
  const status = (r.status !== undefined && r.status !== null) ? r.status : 'N/A';
  const statusText = status === 0 ? 'Success' : String(status);
  const message = (r.message !== undefined && r.message !== null) ? r.message : '';

  const results = Array.isArray(r.results) ? r.results : [];

  // profile key universe (for summary)
  const profileKeySet = new Set();

  // aggregations across all channels
  const dominantProfileTotals = {}; // profile -> totalCW
  let totalCorrectedAll = 0;

  // track worst corrected rate (corrected/total) among all profiles with total>0
  let worst = null; // { rate, channel_id, profile }

  // per-channel summarize for table
  const channelSummaries = [];

  const channels = results.map((item, idx) => {
    const channelId = (item && item.channel_id !== undefined && item.channel_id !== null) ? item.channel_id : ('idx-' + (idx + 1));
    const profilesObj = (item && item.profiles && typeof item.profiles === 'object') ? item.profiles : {};

    const profileKeys = Object.keys(profilesObj).sort((a, b) => {
      const ai = Number(a);
      const bi = Number(b);
      if (Number.isFinite(ai) && Number.isFinite(bi)) return ai - bi;
      return String(a).localeCompare(String(b));
    });

    profileKeys.forEach(k => profileKeySet.add(k));

    const profileLabels = profileKeys.map(k => String(k));

    const totalCW = [];
    const corrCW = [];
    const uncCW = [];
    const inOctets = [];
    const uniOctets = [];
    const mulOctets = [];

    let channelTotal = 0;
    let channelCorr = 0;

    let worstProfileForChannel = null; // profile key
    let worstRateForChannel = null;

    profileKeys.forEach(pk => {
      const p = profilesObj[pk] || {};
      const t = Number(p.docsIf31CmDsOfdmProfileStatsTotalCodewords || 0);
      const c = Number(p.docsIf31CmDsOfdmProfileStatsCorrectedCodewords || 0);
      const u = Number(p.docsIf31CmDsOfdmProfileStatsUncorrectableCodewords || 0);
      const o = Number(p.docsIf31CmDsOfdmProfileStatsInOctets || 0);
      const ou = Number(p.docsIf31CmDsOfdmProfileStatsInUnicastOctets || 0);
      const om = Number(p.docsIf31CmDsOfdmProfileStatsInMulticastOctets || 0);

      totalCW.push(t);
      corrCW.push(c);
      uncCW.push(u);
      inOctets.push(o);
      uniOctets.push(ou);
      mulOctets.push(om);

      channelTotal += t;
      channelCorr += c;

      // dominant profile totals across all channels
      dominantProfileTotals[pk] = (dominantProfileTotals[pk] || 0) + t;

      totalCorrectedAll += c;

      // corrected rate checks
      if (t > 0) {
        const rate = c / t;
        if (worst === null || rate > worst.rate) {
          // Note: "worst" here means highest corrected/total ratio (more corrections = worse)
          worst = { rate, channel_id: channelId, profile: pk };
        }

        if (worstRateForChannel === null || rate > worstRateForChannel) {
          worstRateForChannel = rate;
          worstProfileForChannel = pk;
        }
      }
    });

    const channelRate = channelTotal > 0 ? (channelCorr / channelTotal) : 0;

    channelSummaries.push({
      ch: String(channelId),
      corr: channelCorr,
      total: channelTotal,
      rate: channelRate,
      worstProfile: worstProfileForChannel !== null ? String(worstProfileForChannel) : 'N/A'
    });

    return {
      label: 'OFDM Channel ' + String(channelId),
      canvas_id: 'c' + String(idx + 1),
      profileLabels,
      totalCW,
      corrCW,
      uncCW,
      inOctets,
      uniOctets,
      mulOctets
    };
  });

  // dominant profile by total codewords
  let dominantProfile = 'N/A';
  let dominantTotal = -1;
  Object.keys(dominantProfileTotals).forEach(pk => {
    if (dominantProfileTotals[pk] > dominantTotal) {
      dominantTotal = dominantProfileTotals[pk];
      dominantProfile = String(pk);
    }
  });

  const channelRows = channelSummaries.slice().sort((a, b) => {
    const ai = Number(a.ch);
    const bi = Number(b.ch);
    if (Number.isFinite(ai) && Number.isFinite(bi)) return ai - bi;
    return String(a.ch).localeCompare(String(b.ch));
  }).map(rw => {
    const ratePct = (rw.total > 0) ? (rw.rate * 100.0) : 0;
    const rateClass = ratePct >= 1.0 ? 'bad' : (ratePct >= 0.1 ? 'warn' : '');
    return {
      ch: rw.ch,
      corr: rw.corr,
      total: rw.total,
      rate: ratePct.toFixed(4) + '%',
      rateClass,
      worstProfile: rw.worstProfile
    };
  });

  const kpi = {
    worstCorrRate: worst ? (worst.rate * 100.0).toFixed(4) + '%' : 'N/A',
    worstCorrCh: worst ? String(worst.channel_id) : 'N/A',
    worstCorrProfile: worst ? String(worst.profile) : 'N/A',
    totalCorrected: String(totalCorrectedAll),
    dominantProfile
  };

  return {
    deviceInfo: {
      macAddress: device.mac_address || "N/A",
      MODEL: sys.MODEL || "N/A",
      VENDOR: sys.VENDOR || "N/A",
      SW_REV: sys.SW_REV || "N/A",
      HW_REV: sys.HW_REV || "N/A",
      BOOTR: sys.BOOTR || "N/A"
    },
    mac,
    statusText,
    message,
    channelCount: channels.length,
    profileCount: profileKeySet.size,
    kpi,
    channelRows,
    channels
  };
}

pm.visualizer.set(template, constructVisualizerPayload());
Sample JSON payload
{
    "system_description": {
        "HW_REV": "1.0",
        "VENDOR": "LANCity",
        "BOOTR": "NONE",
        "SW_REV": "1.0.0",
        "MODEL": "LCPET-3"
    },
    "status": 0,
    "message": null,
    "device": {
        "mac_address": "aa:bb:cc:dd:ee:ff",
        "system_description": {
            "HW_REV": "1.0",
            "VENDOR": "LANCity",
            "BOOTR": "NONE",
            "SW_REV": "1.0.0",
            "MODEL": "LCPET-3"
        }
    },
    "results": [
        {
            "index": 48,
            "channel_id": 194,
            "profiles": {
                "0": {
                    "docsIf31CmDsOfdmProfileStatsConfigChangeCt": 0,
                    "docsIf31CmDsOfdmProfileStatsTotalCodewords": 10993816,
                    "docsIf31CmDsOfdmProfileStatsCorrectedCodewords": 3915,
                    "docsIf31CmDsOfdmProfileStatsUncorrectableCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsInOctets": 4443771,
                    "docsIf31CmDsOfdmProfileStatsInUnicastOctets": 1397,
                    "docsIf31CmDsOfdmProfileStatsInMulticastOctets": 4025896,
                    "docsIf31CmDsOfdmProfileStatsInFrames": 69413,
                    "docsIf31CmDsOfdmProfileStatsInUnicastFrames": 1,
                    "docsIf31CmDsOfdmProfileStatsInMulticastFrames": 69412,
                    "docsIf31CmDsOfdmProfileStatsInFrameCrcFailures": 0,
                    "docsIf31CmDsOfdmProfileStatsCtrDiscontinuityTime": 0
                },
                "3": {
                    "docsIf31CmDsOfdmProfileStatsConfigChangeCt": 0,
                    "docsIf31CmDsOfdmProfileStatsTotalCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsCorrectedCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsUncorrectableCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsInOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrameCrcFailures": 0,
                    "docsIf31CmDsOfdmProfileStatsCtrDiscontinuityTime": 0
                },
                "4": {
                    "docsIf31CmDsOfdmProfileStatsConfigChangeCt": 0,
                    "docsIf31CmDsOfdmProfileStatsTotalCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsCorrectedCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsUncorrectableCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsInOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrameCrcFailures": 0,
                    "docsIf31CmDsOfdmProfileStatsCtrDiscontinuityTime": 0
                },
                "255": {
                    "docsIf31CmDsOfdmProfileStatsConfigChangeCt": 0,
                    "docsIf31CmDsOfdmProfileStatsTotalCodewords": 211308433,
                    "docsIf31CmDsOfdmProfileStatsCorrectedCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsUncorrectableCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsInOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrameCrcFailures": 0,
                    "docsIf31CmDsOfdmProfileStatsCtrDiscontinuityTime": 0
                }
            }
        },
        {
            "index": 49,
            "channel_id": 193,
            "profiles": {
                "0": {
                    "docsIf31CmDsOfdmProfileStatsConfigChangeCt": 0,
                    "docsIf31CmDsOfdmProfileStatsTotalCodewords": 10972110,
                    "docsIf31CmDsOfdmProfileStatsCorrectedCodewords": 3050,
                    "docsIf31CmDsOfdmProfileStatsUncorrectableCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsInOctets": 4444539,
                    "docsIf31CmDsOfdmProfileStatsInUnicastOctets": 1397,
                    "docsIf31CmDsOfdmProfileStatsInMulticastOctets": 4026592,
                    "docsIf31CmDsOfdmProfileStatsInFrames": 69425,
                    "docsIf31CmDsOfdmProfileStatsInUnicastFrames": 1,
                    "docsIf31CmDsOfdmProfileStatsInMulticastFrames": 69424,
                    "docsIf31CmDsOfdmProfileStatsInFrameCrcFailures": 0,
                    "docsIf31CmDsOfdmProfileStatsCtrDiscontinuityTime": 0
                },
                "3": {
                    "docsIf31CmDsOfdmProfileStatsConfigChangeCt": 0,
                    "docsIf31CmDsOfdmProfileStatsTotalCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsCorrectedCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsUncorrectableCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsInOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrameCrcFailures": 0,
                    "docsIf31CmDsOfdmProfileStatsCtrDiscontinuityTime": 0
                },
                "4": {
                    "docsIf31CmDsOfdmProfileStatsConfigChangeCt": 0,
                    "docsIf31CmDsOfdmProfileStatsTotalCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsCorrectedCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsUncorrectableCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsInOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrameCrcFailures": 0,
                    "docsIf31CmDsOfdmProfileStatsCtrDiscontinuityTime": 0
                },
                "255": {
                    "docsIf31CmDsOfdmProfileStatsConfigChangeCt": 0,
                    "docsIf31CmDsOfdmProfileStatsTotalCodewords": 211334592,
                    "docsIf31CmDsOfdmProfileStatsCorrectedCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsUncorrectableCodewords": 0,
                    "docsIf31CmDsOfdmProfileStatsInOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastOctets": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInUnicastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInMulticastFrames": 0,
                    "docsIf31CmDsOfdmProfileStatsInFrameCrcFailures": 0,
                    "docsIf31CmDsOfdmProfileStatsCtrDiscontinuityTime": 0
                }
            }
        }
    ]
}