Ticket #1079: patch_json_error_counter_log_1.00.diff

File patch_json_error_counter_log_1.00.diff, 5.6 KB (added by Rick Chen, 3 years ago)

git diff patch file

  • scsiprint.cpp

    diff --git a/scsiprint.cpp b/scsiprint.cpp
    index cca0dcc..755b6ba 100644
    a b scsiGetSmartData(scsi_device * device, bool attribs) 
    333333        if (255 == triptemp)
    334334            pout("Drive Trip Temperature:        <not available>\n");
    335335        else
     336        {
    336337            pout("Drive Trip Temperature:        %d C\n", triptemp);
     338            jglb["temperature"]["drive_trip"] = triptemp;
     339        }
    337340    }
    338341    pout("\n");
    339342    return err;
    scsiPrintGrownDefectListLen(scsi_device * device) 
    610613            break;
    611614    }
    612615    if (0 == dl_len)
     616    {
    613617        pout("Elements in grown defect list: 0\n\n");
     618        jglb["elements_grown_list"] = 0;
     619    }
    614620    else {
    615621        if (0 == div)
    616622            pout("Grown defect list length=%u bytes [unknown "
    617623                 "number of elements]\n\n", dl_len);
    618624        else
     625        {
    619626            pout("Elements in grown defect list: %u\n\n", dl_len / div);
     627            jglb["elements_grown_list"] = dl_len;
     628        }
    620629    }
    621630}
    622631
    scsiPrintSeagateFactoryLPage(scsi_device * device) 
    704713    int num, pl, pc, len, err, good, bad;
    705714    unsigned char * ucp;
    706715    uint64_t ull;
     716    static const char * jname = "format_status";
    707717
    708718    if ((err = scsiLogSense(device, SEAGATE_FACTORY_LPAGE, 0, gBuf,
    709719                            LOG_RESP_LEN, 0))) {
    scsiPrintSeagateFactoryLPage(scsi_device * device) 
    759769        good = 0;
    760770        switch (pc) {
    761771        case 0: pout("  number of hours powered up");
     772            jname = "hours_powered_up";
    762773            good = 1;
    763774            break;
    764775        case 8: pout("  number of minutes until next internal SMART test");
     776            jname = "minutes_next_smart_test";
    765777            good = 1;
    766778            break;
    767779        default:
    scsiPrintSeagateFactoryLPage(scsi_device * device) 
    782794            }
    783795            ull = sg_get_unaligned_be(k, xp + 0);
    784796            if (0 == pc)
     797            {
    785798                pout(" = %.2f\n", ull / 60.0 );
     799                jglb[jname] = strprintf("%.2f", ull / 60.0);
     800            }
    786801            else
     802            {
    787803                pout(" = %" PRIu64 "\n", ull);
     804                jglb[jname] = ull;
     805            }
    788806        }
    789807        num -= pl;
    790808        ucp += pl;
    scsiPrintErrorCounterLog(scsi_device * device) 
    828846             "algorithm      processed    uncorrected\n");
    829847        pout("           fast | delayed   rewrites  corrected  "
    830848             "invocations   [10^9 bytes]  errors\n");
     849
    831850        for (int k = 0; k < 3; ++k) {
    832851            if (! found[k])
    833852                continue;
    834853            ecp = &errCounterArr[k];
    835854            static const char * const pageNames[3] =
    836855                                 {"read:   ", "write:  ", "verify: "};
     856            static const char * jpageNames[3] =
     857                                 {"read", "write", "verify"};
    837858            pout("%s%8" PRIu64 " %8" PRIu64 "  %8" PRIu64 "  %8" PRIu64
    838859                 "   %8" PRIu64, pageNames[k], ecp->counter[0],
    839860                 ecp->counter[1], ecp->counter[2], ecp->counter[3],
    scsiPrintErrorCounterLog(scsi_device * device) 
    841862            double processed_gb = ecp->counter[5] / 1000000000.0;
    842863            pout("   %12.3f    %8" PRIu64 "\n", processed_gb,
    843864                 ecp->counter[6]);
     865            // Error counter log info
     866            jglb["error_counter_log"][jpageNames[k]]["errors_corrected_by_eccfast"] = ecp->counter[0];
     867            jglb["error_counter_log"][jpageNames[k]]["errors_corrected_by_eccdelayed"] = ecp->counter[1];
     868            jglb["error_counter_log"][jpageNames[k]]["errors_corrected_by_rereads_rewrites"] = ecp->counter[2];
     869            jglb["error_counter_log"][jpageNames[k]]["total_errors_corrected"] = ecp->counter[3];
     870            jglb["error_counter_log"][jpageNames[k]]["correction_algorithm_invocations"] = ecp->counter[4];
     871            jglb["error_counter_log"][jpageNames[k]]["gigabytes_processed"] = strprintf("%.3f", processed_gb);
     872            jglb["error_counter_log"][jpageNames[k]]["total_uncorrected_errors"] = ecp->counter[6];
    844873        }
    845874    }
    846875    else
    scsiPrintBackgroundResults(scsi_device * device) 
    11771206            j = sg_get_unaligned_be32(ucp + 4);
    11781207            pout("    Accumulated power on time, hours:minutes %d:%02d "
    11791208                 "[%d minutes]\n", (j / 60), (j % 60), j);
     1209            jglb["accumulated_power_on_time_minutes"] = j;
    11801210            pout("    Number of background scans performed: %d,  ",
    11811211                 sg_get_unaligned_be16(ucp + 10));
     1212            jglb["number_sacns_performed"] = sg_get_unaligned_be16(ucp + 10);
    11821213            pout("scan progress: %.2f%%\n",
    11831214                 (double)sg_get_unaligned_be16(ucp + 12) * 100.0 / 65536.0);
    11841215            pout("    Number of background medium scans performed: %d\n",
    11851216                 sg_get_unaligned_be16(ucp + 14));
     1217            jglb["number_medium_scans_performed"] = sg_get_unaligned_be16(ucp + 14);
    11861218            break;
    11871219        default:
    11881220            if (noheader) {
    scsiPrintSSMedia(scsi_device * device) 
    12751307                return FAILSMART;
    12761308            }
    12771309            pout("Percentage used endurance indicator: %d%%\n", ucp[7]);
     1310            jglb["percentage_used_endurance_indicator"] = ucp[7];
    12781311        default:        /* ignore other parameter codes */
    12791312            break;
    12801313        }
    scsiPrintTemp(scsi_device * device) 
    22252258    if (255 == trip)
    22262259        pout("Drive Trip Temperature:        <not available>\n");
    22272260    else
     2261    {
    22282262        pout("Drive Trip Temperature:        %d C\n", trip);
     2263        jglb["temperature"]["drive_trip"] = trip;
     2264    }
    22292265    pout("\n");
    22302266}
    22312267