From: Karanraj Chauhan Date: Tue, 15 Oct 2019 15:30:52 +0000 (-0400) Subject: mgr/diskprediction_local: Updated Red Hat developed prediction model. Updated module... X-Git-Tag: v15.1.0~981^2~2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=8ac94982cdd33f681812833c2abf03464f7b3df3;p=ceph.git mgr/diskprediction_local: Updated Red Hat developed prediction model. Updated module options to choose between Red Hat and ProphetStor models. predictor.py contains definition for the original ProphetStor developed model as well as Red Hat developed model (using Backblaze dataset). User can choose which model to use by passing either 'prophetstor' or 'redhat' to the `Module`'s `predictor_model` config option. Updated the disk health data formatting code in `Module` to include `user_capacity`, `vendor`, etc fields that are used by the RHDiskFailurePredictor. These will simply be ignored by the PSDiskFailurePredictor Updated preprocessing in RH model to use the data passed from module directly instead of restructuring again. Added logging instead of print statements. Restructured pretrained models directory to accomodate both models files. Signed-off-by: Karanraj Chauhan --- diff --git a/src/pybind/mgr/diskprediction_local/models/config.json b/src/pybind/mgr/diskprediction_local/models/config.json deleted file mode 100644 index 127d6ea4d8b2..000000000000 --- a/src/pybind/mgr/diskprediction_local/models/config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ -"seagate": ["user_capacity", "smart_1_raw", "smart_5_raw", "smart_7_raw", "smart_10_raw", "smart_187_raw", "smart_188_raw", "smart_190_raw", "smart_193_raw", "smart_197_raw", "smart_198_raw", "smart_241_raw", "smart_1_normalized", "smart_5_normalized", "smart_7_normalized", "smart_10_normalized", "smart_187_normalized", "smart_188_normalized", "smart_190_normalized", "smart_193_normalized", "smart_197_normalized", "smart_198_normalized", "smart_241_normalized"] -} diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/config.json b/src/pybind/mgr/diskprediction_local/models/prophetstor/config.json new file mode 100644 index 000000000000..9a1485ca35dd --- /dev/null +++ b/src/pybind/mgr/diskprediction_local/models/prophetstor/config.json @@ -0,0 +1,77 @@ +{ +"svm_123.pkl": ["smart_197_raw", "smart_183_raw", "smart_200_raw", "smart_194_raw", "smart_254_raw", "smart_252_raw", "smart_4_raw", "smart_222_raw", "smart_187_raw", "smart_184_raw"], +"svm_105.pkl": ["smart_197_raw", "smart_4_raw", "smart_5_raw", "smart_252_raw", "smart_184_raw", "smart_223_raw", "smart_198_raw", "smart_10_raw", "smart_189_raw", "smart_222_raw"], +"svm_82.pkl":["smart_184_raw", "smart_2_raw", "smart_187_raw", "smart_225_raw", "smart_198_raw", "smart_197_raw", "smart_4_raw", "smart_13_raw", "smart_188_raw", "smart_251_raw"], +"svm_186.pkl":["smart_3_raw", "smart_11_raw", "smart_198_raw", "smart_250_raw", "smart_13_raw", "smart_200_raw", "smart_224_raw", "smart_187_raw", "smart_22_raw", "smart_4_raw", "smart_220_raw"], +"svm_14.pkl":["smart_12_raw", "smart_226_raw", "smart_187_raw", "smart_196_raw", "smart_5_raw", "smart_183_raw", "smart_255_raw", "smart_250_raw", "smart_201_raw", "smart_8_raw"], +"svm_10.pkl":["smart_251_raw", "smart_4_raw", "smart_223_raw", "smart_13_raw", "smart_255_raw", "smart_188_raw", "smart_197_raw", "smart_201_raw", "smart_250_raw", "smart_15_raw"], +"svm_235.pkl":["smart_15_raw", "smart_255_raw", "smart_252_raw", "smart_197_raw", "smart_250_raw", "smart_254_raw", "smart_13_raw", "smart_251_raw", "smart_198_raw", "smart_189_raw", "smart_191_raw"], +"svm_234.pkl":["smart_187_raw", "smart_183_raw", "smart_3_raw", "smart_4_raw", "smart_222_raw", "smart_184_raw", "smart_5_raw", "smart_198_raw", "smart_200_raw", "smart_8_raw", "smart_10_raw"], +"svm_119.pkl":["smart_254_raw", "smart_8_raw", "smart_183_raw", "smart_184_raw", "smart_195_raw", "smart_252_raw", "smart_191_raw", "smart_10_raw", "smart_200_raw", "smart_197_raw"], +"svm_227.pkl":["smart_254_raw", "smart_189_raw", "smart_225_raw", "smart_224_raw", "smart_197_raw", "smart_223_raw", "smart_4_raw", "smart_183_raw", "smart_11_raw", "smart_184_raw", "smart_13_raw"], +"svm_18.pkl":["smart_197_raw", "smart_3_raw", "smart_220_raw", "smart_193_raw", "smart_10_raw", "smart_187_raw", "smart_188_raw", "smart_225_raw", "smart_194_raw", "smart_13_raw"], +"svm_78.pkl":["smart_10_raw", "smart_183_raw", "smart_191_raw", "smart_13_raw", "smart_198_raw", "smart_22_raw", "smart_195_raw", "smart_12_raw", "smart_224_raw", "smart_200_raw"], +"svm_239.pkl":["smart_3_raw", "smart_254_raw", "smart_199_raw", "smart_225_raw", "smart_187_raw", "smart_195_raw", "smart_197_raw", "smart_2_raw", "smart_193_raw", "smart_220_raw", "smart_183_raw"], +"svm_174.pkl":["smart_183_raw", "smart_196_raw", "smart_225_raw", "smart_189_raw", "smart_4_raw", "smart_3_raw", "smart_9_raw", "smart_198_raw", "smart_15_raw", "smart_5_raw", "smart_194_raw"], +"svm_104.pkl":["smart_12_raw", "smart_198_raw", "smart_197_raw", "smart_4_raw", "smart_240_raw", "smart_187_raw", "smart_225_raw", "smart_8_raw", "smart_3_raw", "smart_2_raw"], +"svm_12.pkl":["smart_222_raw", "smart_251_raw", "smart_194_raw", "smart_9_raw", "smart_184_raw", "smart_191_raw", "smart_187_raw", "smart_255_raw", "smart_4_raw", "smart_11_raw"], +"svm_97.pkl":["smart_15_raw", "smart_197_raw", "smart_190_raw", "smart_199_raw", "smart_200_raw", "smart_12_raw", "smart_191_raw", "smart_254_raw", "smart_194_raw", "smart_201_raw"], +"svm_118.pkl":["smart_11_raw", "smart_225_raw", "smart_196_raw", "smart_197_raw", "smart_198_raw", "smart_200_raw", "smart_3_raw", "smart_10_raw", "smart_191_raw", "smart_22_raw"], +"svm_185.pkl":["smart_191_raw", "smart_254_raw", "smart_3_raw", "smart_190_raw", "smart_15_raw", "smart_22_raw", "smart_2_raw", "smart_198_raw", "smart_13_raw", "smart_226_raw", "smart_225_raw"], +"svm_206.pkl":["smart_183_raw", "smart_192_raw", "smart_197_raw", "smart_255_raw", "smart_187_raw", "smart_254_raw", "smart_198_raw", "smart_13_raw", "smart_226_raw", "smart_240_raw", "smart_8_raw"], +"svm_225.pkl":["smart_224_raw", "smart_11_raw", "smart_5_raw", "smart_4_raw", "smart_225_raw", "smart_197_raw", "smart_15_raw", "smart_183_raw", "smart_193_raw", "smart_190_raw", "smart_187_raw"], +"svm_169.pkl":["smart_252_raw", "smart_183_raw", "smart_254_raw", "smart_11_raw", "smart_193_raw", "smart_22_raw", "smart_226_raw", "smart_189_raw", "smart_225_raw", "smart_198_raw", "smart_200_raw"], +"svm_79.pkl":["smart_184_raw", "smart_196_raw", "smart_4_raw", "smart_226_raw", "smart_199_raw", "smart_187_raw", "smart_193_raw", "smart_188_raw", "smart_12_raw", "smart_250_raw"], +"svm_69.pkl":["smart_187_raw", "smart_9_raw", "smart_200_raw", "smart_11_raw", "smart_252_raw", "smart_189_raw", "smart_4_raw", "smart_188_raw", "smart_255_raw", "smart_201_raw"], +"svm_201.pkl":["smart_224_raw", "smart_8_raw", "smart_250_raw", "smart_2_raw", "smart_198_raw", "smart_15_raw", "smart_193_raw", "smart_223_raw", "smart_3_raw", "smart_11_raw", "smart_191_raw"], +"svm_114.pkl":["smart_226_raw", "smart_188_raw", "smart_2_raw", "smart_11_raw", "smart_4_raw", "smart_193_raw", "smart_184_raw", "smart_194_raw", "smart_198_raw", "smart_13_raw"], +"svm_219.pkl":["smart_12_raw", "smart_22_raw", "smart_8_raw", "smart_191_raw", "smart_197_raw", "smart_254_raw", "smart_15_raw", "smart_193_raw", "smart_199_raw", "smart_225_raw", "smart_192_raw"], +"svm_168.pkl":["smart_255_raw", "smart_191_raw", "smart_193_raw", "smart_220_raw", "smart_5_raw", "smart_3_raw", "smart_222_raw", "smart_223_raw", "smart_197_raw", "smart_196_raw", "smart_22_raw"], +"svm_243.pkl":["smart_11_raw", "smart_255_raw", "smart_10_raw", "smart_189_raw", "smart_225_raw", "smart_240_raw", "smart_222_raw", "smart_197_raw", "smart_183_raw", "smart_198_raw", "smart_12_raw"], +"svm_195.pkl":["smart_183_raw", "smart_5_raw", "smart_11_raw", "smart_197_raw", "smart_15_raw", "smart_9_raw", "smart_4_raw", "smart_220_raw", "smart_12_raw", "smart_192_raw", "smart_240_raw"], +"svm_222.pkl":["smart_10_raw", "smart_13_raw", "smart_188_raw", "smart_15_raw", "smart_192_raw", "smart_224_raw", "smart_225_raw", "smart_187_raw", "smart_222_raw", "smart_220_raw", "smart_252_raw"], +"svm_62.pkl":["smart_196_raw", "smart_251_raw", "smart_187_raw", "smart_224_raw", "smart_11_raw", "smart_12_raw", "smart_8_raw", "smart_199_raw", "smart_220_raw", "smart_195_raw"], +"svm_151.pkl":["smart_187_raw", "smart_223_raw", "smart_200_raw", "smart_189_raw", "smart_251_raw", "smart_255_raw", "smart_222_raw", "smart_192_raw", "smart_12_raw", "smart_183_raw", "smart_22_raw"], +"svm_125.pkl":["smart_9_raw", "smart_252_raw", "smart_197_raw", "smart_251_raw", "smart_11_raw", "smart_12_raw", "smart_188_raw", "smart_240_raw", "smart_10_raw", "smart_223_raw"], +"svm_124.pkl":["smart_193_raw", "smart_187_raw", "smart_183_raw", "smart_11_raw", "smart_10_raw", "smart_8_raw", "smart_194_raw", "smart_189_raw", "smart_222_raw", "smart_191_raw"], +"svm_67.pkl":["smart_2_raw", "smart_8_raw", "smart_225_raw", "smart_240_raw", "smart_13_raw", "smart_5_raw", "smart_187_raw", "smart_198_raw", "smart_199_raw", "smart_3_raw"], +"svm_115.pkl":["smart_222_raw", "smart_193_raw", "smart_223_raw", "smart_195_raw", "smart_252_raw", "smart_189_raw", "smart_199_raw", "smart_187_raw", "smart_15_raw", "smart_184_raw"], +"svm_1.pkl":["smart_201_raw", "smart_8_raw", "smart_200_raw", "smart_252_raw", "smart_251_raw", "smart_187_raw", "smart_9_raw", "smart_188_raw", "smart_15_raw", "smart_184_raw"], +"svm_112.pkl":["smart_220_raw", "smart_197_raw", "smart_10_raw", "smart_188_raw", "smart_12_raw", "smart_4_raw", "smart_196_raw", "smart_3_raw", "smart_240_raw", "smart_225_raw"], +"svm_138.pkl":["smart_183_raw", "smart_10_raw", "smart_191_raw", "smart_195_raw", "smart_223_raw", "smart_189_raw", "smart_187_raw", "smart_255_raw", "smart_226_raw", "smart_8_raw"], +"svm_229.pkl":["smart_224_raw", "smart_8_raw", "smart_192_raw", "smart_220_raw", "smart_195_raw", "smart_183_raw", "smart_250_raw", "smart_187_raw", "smart_225_raw", "smart_4_raw", "smart_252_raw"], +"svm_145.pkl":["smart_190_raw", "smart_8_raw", "smart_226_raw", "smart_184_raw", "smart_225_raw", "smart_220_raw", "smart_193_raw", "smart_183_raw", "smart_201_raw", "smart_187_raw", "smart_2_raw"], +"svm_59.pkl":["smart_188_raw", "smart_11_raw", "smart_184_raw", "smart_2_raw", "smart_220_raw", "smart_198_raw", "smart_225_raw", "smart_240_raw", "smart_197_raw", "smart_251_raw"], +"svm_204.pkl":["smart_15_raw", "smart_240_raw", "smart_225_raw", "smart_223_raw", "smart_252_raw", "smart_22_raw", "smart_200_raw", "smart_13_raw", "smart_220_raw", "smart_198_raw", "smart_191_raw"], +"svm_88.pkl":["smart_198_raw", "smart_3_raw", "smart_8_raw", "smart_225_raw", "smart_251_raw", "smart_222_raw", "smart_188_raw", "smart_10_raw", "smart_240_raw", "smart_189_raw"], +"svm_182.pkl":["smart_10_raw", "smart_190_raw", "smart_250_raw", "smart_15_raw", "smart_193_raw", "smart_22_raw", "smart_200_raw", "smart_8_raw", "smart_4_raw", "smart_187_raw", "smart_9_raw"], +"svm_61.pkl":["smart_5_raw", "smart_12_raw", "smart_9_raw", "smart_198_raw", "smart_195_raw", "smart_252_raw", "smart_15_raw", "smart_240_raw", "smart_255_raw", "smart_224_raw"], +"svm_50.pkl":["smart_220_raw", "smart_5_raw", "smart_194_raw", "smart_250_raw", "smart_15_raw", "smart_240_raw", "smart_8_raw", "smart_198_raw", "smart_224_raw", "smart_191_raw"], +"svm_210.pkl":["smart_8_raw", "smart_15_raw", "smart_195_raw", "smart_224_raw", "smart_5_raw", "smart_191_raw", "smart_198_raw", "smart_225_raw", "smart_200_raw", "smart_251_raw", "smart_240_raw"], +"svm_16.pkl":["smart_222_raw", "smart_10_raw", "smart_250_raw", "smart_189_raw", "smart_191_raw", "smart_2_raw", "smart_5_raw", "smart_193_raw", "smart_9_raw", "smart_187_raw"], +"svm_85.pkl":["smart_252_raw", "smart_184_raw", "smart_9_raw", "smart_5_raw", "smart_254_raw", "smart_3_raw", "smart_195_raw", "smart_10_raw", "smart_12_raw", "smart_222_raw"], +"svm_36.pkl":["smart_201_raw", "smart_251_raw", "smart_184_raw", "smart_3_raw", "smart_5_raw", "smart_183_raw", "smart_194_raw", "smart_195_raw", "smart_224_raw", "smart_2_raw"], +"svm_33.pkl":["smart_223_raw", "smart_254_raw", "smart_225_raw", "smart_9_raw", "smart_199_raw", "smart_5_raw", "smart_189_raw", "smart_194_raw", "smart_240_raw", "smart_4_raw"], +"svm_3.pkl":["smart_225_raw", "smart_194_raw", "smart_3_raw", "smart_189_raw", "smart_9_raw", "smart_254_raw", "smart_240_raw", "smart_5_raw", "smart_255_raw", "smart_223_raw"], +"svm_93.pkl":["smart_8_raw", "smart_188_raw", "smart_5_raw", "smart_10_raw", "smart_222_raw", "smart_2_raw", "smart_254_raw", "smart_12_raw", "smart_193_raw", "smart_224_raw"], +"svm_120.pkl":["smart_189_raw", "smart_224_raw", "smart_222_raw", "smart_193_raw", "smart_5_raw", "smart_201_raw", "smart_8_raw", "smart_254_raw", "smart_194_raw", "smart_22_raw"], +"svm_128.pkl":["smart_195_raw", "smart_184_raw", "smart_251_raw", "smart_8_raw", "smart_5_raw", "smart_196_raw", "smart_10_raw", "smart_4_raw", "smart_225_raw", "smart_191_raw"], +"svm_212.pkl":["smart_225_raw", "smart_192_raw", "smart_10_raw", "smart_12_raw", "smart_222_raw", "smart_184_raw", "smart_13_raw", "smart_226_raw", "smart_5_raw", "smart_201_raw", "smart_22_raw"], +"svm_221.pkl":["smart_255_raw", "smart_2_raw", "smart_224_raw", "smart_192_raw", "smart_252_raw", "smart_13_raw", "smart_183_raw", "smart_193_raw", "smart_15_raw", "smart_199_raw", "smart_200_raw"], +"svm_223.pkl":["smart_4_raw", "smart_194_raw", "smart_9_raw", "smart_255_raw", "smart_188_raw", "smart_201_raw", "smart_3_raw", "smart_226_raw", "smart_192_raw", "smart_251_raw", "smart_191_raw"], +"svm_44.pkl":["smart_255_raw", "smart_11_raw", "smart_200_raw", "smart_3_raw", "smart_195_raw", "smart_201_raw", "smart_4_raw", "smart_5_raw", "smart_10_raw", "smart_191_raw"], +"svm_213.pkl":["smart_22_raw", "smart_191_raw", "smart_183_raw", "smart_4_raw", "smart_194_raw", "smart_255_raw", "smart_254_raw", "smart_193_raw", "smart_11_raw", "smart_10_raw", "smart_220_raw"], +"svm_131.pkl":["smart_22_raw", "smart_194_raw", "smart_184_raw", "smart_250_raw", "smart_10_raw", "smart_189_raw", "smart_183_raw", "smart_240_raw", "smart_12_raw", "smart_252_raw"], +"svm_6.pkl":["smart_194_raw", "smart_250_raw", "smart_223_raw", "smart_224_raw", "smart_184_raw", "smart_191_raw", "smart_201_raw", "smart_9_raw", "smart_252_raw", "smart_3_raw"], +"svm_161.pkl":["smart_255_raw", "smart_222_raw", "smart_226_raw", "smart_254_raw", "smart_183_raw", "smart_22_raw", "smart_12_raw", "smart_190_raw", "smart_11_raw", "smart_192_raw", "smart_251_raw"], +"svm_72.pkl":["smart_13_raw", "smart_184_raw", "smart_223_raw", "smart_240_raw", "smart_250_raw", "smart_251_raw", "smart_201_raw", "smart_196_raw", "smart_5_raw", "smart_4_raw"], +"svm_27.pkl":["smart_189_raw", "smart_188_raw", "smart_255_raw", "smart_251_raw", "smart_240_raw", "smart_15_raw", "smart_9_raw", "smart_191_raw", "smart_226_raw", "smart_10_raw"], +"svm_141.pkl":["smart_9_raw", "smart_191_raw", "smart_2_raw", "smart_226_raw", "smart_13_raw", "smart_22_raw", "smart_193_raw", "smart_222_raw", "smart_220_raw", "smart_225_raw", "smart_3_raw"], +"svm_57.pkl":["smart_12_raw", "smart_252_raw", "smart_190_raw", "smart_226_raw", "smart_10_raw", "smart_189_raw", "smart_193_raw", "smart_2_raw", "smart_9_raw", "smart_223_raw"], +"svm_236.pkl":["smart_200_raw", "smart_189_raw", "smart_226_raw", "smart_252_raw", "smart_250_raw", "smart_193_raw", "smart_13_raw", "smart_2_raw", "smart_254_raw", "smart_22_raw", "smart_9_raww"], +"svm_208.pkl":["smart_223_raw", "smart_15_raw", "smart_251_raw", "smart_5_raw", "smart_198_raw", "smart_252_raw", "smart_4_raw", "smart_8_raw", "smart_220_raw", "smart_254_raw", "smart_193_raw"], +"svm_230.pkl":["smart_184_raw", "smart_5_raw", "smart_191_raw", "smart_198_raw", "smart_11_raw", "smart_255_raw", "smart_189_raw", "smart_254_raw", "smart_196_raw", "smart_199_raw", "smart_223_raw"], +"svm_134.pkl":["smart_8_raw", "smart_194_raw", "smart_4_raw", "smart_189_raw", "smart_223_raw", "smart_5_raw", "smart_187_raw", "smart_9_raw", "smart_192_raw", "smart_220_raw"], +"svm_71.pkl":["smart_220_raw", "smart_13_raw", "smart_194_raw", "smart_197_raw", "smart_192_raw", "smart_22_raw", "smart_184_raw", "smart_199_raw", "smart_222_raw", "smart_183_raw"], +"svm_109.pkl":["smart_224_raw", "smart_252_raw", "smart_2_raw", "smart_200_raw", "smart_5_raw", "smart_194_raw", "smart_222_raw", "smart_198_raw", "smart_4_raw", "smart_13_raw"] +} diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_1.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_1.pkl new file mode 100644 index 000000000000..5eb30f300e56 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_1.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_10.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_10.pkl new file mode 100644 index 000000000000..9259c1e74334 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_10.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_104.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_104.pkl new file mode 100644 index 000000000000..d5d5cf5b7bc1 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_104.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_105.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_105.pkl new file mode 100644 index 000000000000..4aadc3cfbf1d Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_105.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_109.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_109.pkl new file mode 100644 index 000000000000..c99c353be31f Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_109.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_112.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_112.pkl new file mode 100644 index 000000000000..367a3304aa3b Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_112.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_114.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_114.pkl new file mode 100644 index 000000000000..946d5cef1bab Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_114.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_115.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_115.pkl new file mode 100644 index 000000000000..ff834929ec65 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_115.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_118.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_118.pkl new file mode 100644 index 000000000000..eec8689ea63c Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_118.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_119.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_119.pkl new file mode 100644 index 000000000000..6a26c050267c Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_119.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_12.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_12.pkl new file mode 100644 index 000000000000..5cbe9775a153 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_12.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_120.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_120.pkl new file mode 100644 index 000000000000..d2041c267a41 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_120.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_123.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_123.pkl new file mode 100644 index 000000000000..0ab6187e99da Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_123.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_124.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_124.pkl new file mode 100644 index 000000000000..8f9ea4ec7c89 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_124.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_125.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_125.pkl new file mode 100644 index 000000000000..4d49900f9322 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_125.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_128.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_128.pkl new file mode 100644 index 000000000000..6a18726de2fe Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_128.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_131.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_131.pkl new file mode 100644 index 000000000000..e6a55dcaeced Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_131.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_134.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_134.pkl new file mode 100644 index 000000000000..51171e00c594 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_134.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_138.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_138.pkl new file mode 100644 index 000000000000..bc98e0c7255f Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_138.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_14.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_14.pkl new file mode 100644 index 000000000000..c4547dc6394e Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_14.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_141.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_141.pkl new file mode 100644 index 000000000000..86d9f38de313 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_141.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_145.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_145.pkl new file mode 100644 index 000000000000..24ff96231037 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_145.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_151.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_151.pkl new file mode 100644 index 000000000000..92bfd3f1b860 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_151.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_16.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_16.pkl new file mode 100644 index 000000000000..11664b3dd01d Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_16.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_161.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_161.pkl new file mode 100644 index 000000000000..2d421685e6f8 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_161.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_168.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_168.pkl new file mode 100644 index 000000000000..12a811cfab59 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_168.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_169.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_169.pkl new file mode 100644 index 000000000000..0c51446c689b Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_169.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_174.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_174.pkl new file mode 100644 index 000000000000..d2945ce9f9a7 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_174.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_18.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_18.pkl new file mode 100644 index 000000000000..d05520ccd878 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_18.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_182.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_182.pkl new file mode 100644 index 000000000000..7fcfb3cbdec3 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_182.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_185.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_185.pkl new file mode 100644 index 000000000000..785301c17963 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_185.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_186.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_186.pkl new file mode 100644 index 000000000000..4ea83da7773c Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_186.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_195.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_195.pkl new file mode 100644 index 000000000000..12273f7ce7e1 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_195.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_201.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_201.pkl new file mode 100644 index 000000000000..c866cf00e63f Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_201.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_204.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_204.pkl new file mode 100644 index 000000000000..8cf1c3aa28ee Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_204.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_206.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_206.pkl new file mode 100644 index 000000000000..cba64e800496 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_206.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_208.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_208.pkl new file mode 100644 index 000000000000..ba0df0abdbd2 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_208.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_210.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_210.pkl new file mode 100644 index 000000000000..6b5bee219e3a Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_210.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_212.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_212.pkl new file mode 100644 index 000000000000..11eafc64c565 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_212.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_213.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_213.pkl new file mode 100644 index 000000000000..0b8475c581cc Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_213.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_219.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_219.pkl new file mode 100644 index 000000000000..4a248c14ca05 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_219.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_221.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_221.pkl new file mode 100644 index 000000000000..e37c6b4fb3d7 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_221.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_222.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_222.pkl new file mode 100644 index 000000000000..e54303863e09 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_222.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_223.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_223.pkl new file mode 100644 index 000000000000..8b208f4e8237 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_223.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_225.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_225.pkl new file mode 100644 index 000000000000..3f2b62984afb Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_225.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_227.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_227.pkl new file mode 100644 index 000000000000..5e4fb56f4b75 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_227.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_229.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_229.pkl new file mode 100644 index 000000000000..1e9c33599ed7 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_229.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_230.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_230.pkl new file mode 100644 index 000000000000..36f8205cead5 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_230.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_234.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_234.pkl new file mode 100644 index 000000000000..199f9ba5110c Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_234.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_235.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_235.pkl new file mode 100644 index 000000000000..d986526eca2d Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_235.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_236.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_236.pkl new file mode 100644 index 000000000000..160e22fae38a Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_236.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_239.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_239.pkl new file mode 100644 index 000000000000..8d98572acce8 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_239.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_243.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_243.pkl new file mode 100644 index 000000000000..4fca95e1da0e Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_243.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_27.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_27.pkl new file mode 100644 index 000000000000..011974ed1b94 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_27.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_3.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_3.pkl new file mode 100644 index 000000000000..e5e97a8888b2 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_3.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_33.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_33.pkl new file mode 100644 index 000000000000..e709d7b46e57 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_33.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_36.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_36.pkl new file mode 100644 index 000000000000..3d87b8bd904c Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_36.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_44.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_44.pkl new file mode 100644 index 000000000000..9abcece9239d Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_44.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_50.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_50.pkl new file mode 100644 index 000000000000..b7ce5eda94a8 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_50.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_57.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_57.pkl new file mode 100644 index 000000000000..fe7832894bb4 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_57.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_59.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_59.pkl new file mode 100644 index 000000000000..76217777be8a Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_59.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_6.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_6.pkl new file mode 100644 index 000000000000..4fb09d374642 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_6.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_61.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_61.pkl new file mode 100644 index 000000000000..319fc5f457ba Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_61.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_62.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_62.pkl new file mode 100644 index 000000000000..25b21aed63be Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_62.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_67.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_67.pkl new file mode 100644 index 000000000000..1e6e7383a618 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_67.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_69.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_69.pkl new file mode 100644 index 000000000000..22d349a7c5e6 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_69.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_71.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_71.pkl new file mode 100644 index 000000000000..e0760add9256 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_71.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_72.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_72.pkl new file mode 100644 index 000000000000..5096aa8e4662 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_72.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_78.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_78.pkl new file mode 100644 index 000000000000..7958f3b6c256 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_78.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_79.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_79.pkl new file mode 100644 index 000000000000..2ed3a0fe9110 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_79.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_82.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_82.pkl new file mode 100644 index 000000000000..2e1884094b77 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_82.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_85.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_85.pkl new file mode 100644 index 000000000000..88161af56fa3 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_85.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_88.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_88.pkl new file mode 100644 index 000000000000..715633982ced Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_88.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_93.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_93.pkl new file mode 100644 index 000000000000..703429fe3c8b Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_93.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_97.pkl b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_97.pkl new file mode 100644 index 000000000000..9653d20f397b Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/prophetstor/svm_97.pkl differ diff --git a/src/pybind/mgr/diskprediction_local/models/redhat/config.json b/src/pybind/mgr/diskprediction_local/models/redhat/config.json new file mode 100644 index 000000000000..127d6ea4d8b2 --- /dev/null +++ b/src/pybind/mgr/diskprediction_local/models/redhat/config.json @@ -0,0 +1,3 @@ +{ +"seagate": ["user_capacity", "smart_1_raw", "smart_5_raw", "smart_7_raw", "smart_10_raw", "smart_187_raw", "smart_188_raw", "smart_190_raw", "smart_193_raw", "smart_197_raw", "smart_198_raw", "smart_241_raw", "smart_1_normalized", "smart_5_normalized", "smart_7_normalized", "smart_10_normalized", "smart_187_normalized", "smart_188_normalized", "smart_190_normalized", "smart_193_normalized", "smart_197_normalized", "smart_198_normalized", "smart_241_normalized"] +} diff --git a/src/pybind/mgr/diskprediction_local/models/redhat/seagate_predictor.joblib b/src/pybind/mgr/diskprediction_local/models/redhat/seagate_predictor.joblib new file mode 100644 index 000000000000..ee7d420a2fb4 Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/redhat/seagate_predictor.joblib differ diff --git a/src/pybind/mgr/diskprediction_local/models/redhat/seagate_scaler.joblib b/src/pybind/mgr/diskprediction_local/models/redhat/seagate_scaler.joblib new file mode 100644 index 000000000000..0b769b983f4e Binary files /dev/null and b/src/pybind/mgr/diskprediction_local/models/redhat/seagate_scaler.joblib differ diff --git a/src/pybind/mgr/diskprediction_local/models/seagate_predictor.joblib b/src/pybind/mgr/diskprediction_local/models/seagate_predictor.joblib deleted file mode 100644 index ee7d420a2fb4..000000000000 Binary files a/src/pybind/mgr/diskprediction_local/models/seagate_predictor.joblib and /dev/null differ diff --git a/src/pybind/mgr/diskprediction_local/models/seagate_scaler.joblib b/src/pybind/mgr/diskprediction_local/models/seagate_scaler.joblib deleted file mode 100644 index 0b769b983f4e..000000000000 Binary files a/src/pybind/mgr/diskprediction_local/models/seagate_scaler.joblib and /dev/null differ diff --git a/src/pybind/mgr/diskprediction_local/module.py b/src/pybind/mgr/diskprediction_local/module.py index 191b25cdb468..f450713df41c 100644 --- a/src/pybind/mgr/diskprediction_local/module.py +++ b/src/pybind/mgr/diskprediction_local/module.py @@ -25,6 +25,10 @@ class Module(MgrModule): 'name': 'predict_interval', 'default': str(86400), }, + { + 'name': 'predictor_model', + 'default': 'prophetstor', + }, ] COMMANDS = [] @@ -123,7 +127,6 @@ class Module(MgrModule): def _predict_life_expentancy(self, devid): predicted_result = '' - from .predictor import get_diskfailurepredictor_path, DiskFailurePredictor health_data = {} predict_datas = [] try: @@ -136,17 +139,38 @@ class Module(MgrModule): except Exception as e: self.log.error('failed to get device %s health data due to %s', devid, str(e)) - obj_predictor = DiskFailurePredictor() - obj_predictor.initialize("{}/models".format(get_diskfailurepredictor_path())) + # initialize appropriate disk failure predictor model + from .predictor import get_diskfailurepredictor_path + if self.predictor_model == 'prophetstor': + from .predictor import PSDiskFailurePredictor + obj_predictor = PSDiskFailurePredictor() + ret = obj_predictor.initialize("{}/models/{}".format(get_diskfailurepredictor_path(), self.predictor_model)) + if ret is not None: + self.log.error('Error initializing predictor') + return predicted_result + elif self.predictor_model == 'redhat': + from .predictor import RHDiskFailurePredictor + obj_predictor = RHDiskFailurePredictor() + ret = obj_predictor.initialize("{}/models/{}".format(get_diskfailurepredictor_path(), self.predictor_model)) + if ret is not None: + self.log.error('Error initializing predictor') + return predicted_result + else: + self.log.error('invalid value received for MODULE_OPTIONS.predictor_model') + return predicted_result if len(health_data) >= 6: o_keys = sorted(health_data.keys(), reverse=True) for o_key in o_keys: + # get values for current day (?) dev_smart = {} s_val = health_data[o_key] + + # add all smart attributes ata_smart = s_val.get('ata_smart_attributes', {}) for attr in ata_smart.get('table', []): - if attr.get('raw', {}).get('string'): + # get raw smart values + if attr.get('raw', {}).get('string') is not None: if str(attr.get('raw', {}).get('string', '0')).isdigit(): dev_smart['smart_%s_raw' % attr.get('id')] = \ int(attr.get('raw', {}).get('string', '0')) @@ -158,8 +182,26 @@ class Module(MgrModule): else: dev_smart['smart_%s_raw' % attr.get('id')] = \ attr.get('raw', {}).get('value', 0) + # get normalized smart values + if attr.get('value') is not None: + dev_smart['smart_%s_normalized' % attr.get('id')] = \ + attr.get('value') + # add power on hours manually if not available in smart attributes if s_val.get('power_on_time', {}).get('hours') is not None: dev_smart['smart_9_raw'] = int(s_val['power_on_time']['hours']) + # add device capacity + if s_val.get('user_capacity') is not None: + if s_val.get('user_capacity').get('bytes') is not None: + dev_smart['user_capacity'] = s_val.get('user_capacity').get('bytes') + else: + self.log.debug('user_capacity not found in smart attributes list') + # add device model + if s_val.get('model_name') is not None: + dev_smart['model_name'] = s_val.get('model_name') + # add vendor + if s_val.get('vendor') is not None: + dev_smart['vendor'] = s_val.get('vendor') + # if smart data was found, then add that to list if dev_smart: predict_datas.append(dev_smart) if len(predict_datas) >= 12: diff --git a/src/pybind/mgr/diskprediction_local/predictor.py b/src/pybind/mgr/diskprediction_local/predictor.py index 5464b2ec4297..1a19bf61a520 100644 --- a/src/pybind/mgr/diskprediction_local/predictor.py +++ b/src/pybind/mgr/diskprediction_local/predictor.py @@ -1,7 +1,11 @@ """Machine learning model for disk failure prediction. -This class provides serves the disk failure prediction module. It uses the -models developed at the AICoE in the Office of the CTO at Red Hat. +This classes defined here provide the disk failure prediction module. +RHDiskFailurePredictor uses the models developed at the AICoE in the +Office of the CTO at Red Hat. These models were built using the open +source Backblaze SMART metrics dataset. +PSDiskFailurePredictor uses the models developed by ProphetStor as an +example. An instance of the predictor is initialized by providing the path to trained models. Then, to predict hard drive health and deduce time to failure, the @@ -11,7 +15,7 @@ It will return a string to indicate disk failure status: "Good", "Warning", An example code is as follows: ->>> model = disk_failure_predictor.DiskFailurePredictor() +>>> model = disk_failure_predictor.RHDiskFailurePredictor() >>> status = model.initialize("./models") >>> if status: >>> model.predict(disk_days) @@ -20,6 +24,7 @@ An example code is as follows: import os import json import joblib +import pickle import logging import numpy as np @@ -33,8 +38,8 @@ def get_diskfailurepredictor_path(): return dir_path -class DiskFailurePredictor(object): - """Disk failure prediction +class RHDiskFailurePredictor(object): + """Disk failure prediction module developed at Red Hat This class implements a disk failure prediction module. """ @@ -56,6 +61,8 @@ class DiskFailurePredictor(object): "HGST": "HGST", } + LOGGER = logging.getLogger() + def __init__(self): """ This function may throw exception due to wrong file operation. @@ -92,52 +99,13 @@ class DiskFailurePredictor(object): self.model_dirpath = model_dirpath - def __format_raw_data(self, disk_days): - """Massages the input raw data into a form that can be used by the - predictor for preprocessing, feeding to model, etc. Specifically, - converts list of dictionaries to a pandas.DataFrame. - - Arguments: - disk_days {list} -- list of n dictionaries representing SMART data - from the past n days. Value of n depends on the - Module defined in module.py - - Returns: - pandas.DataFrame -- df where each row holds SMART attributes and - possibly other data for the drive from one day. - """ - # list of dictionaries to dataframe - df = pd.DataFrame(disk_days) - - # change from dict type {'bytes': 123} to just float64 type 123 - df["user_capacity"] = df["user_capacity"].apply(lambda x: x["bytes"]) - - # change from dict type {'table': [{}, {}, {}]} to list type [{}, {}, {}] - df["ata_smart_attributes"] = df["ata_smart_attributes"].apply( - lambda x: x["table"] - ) - - # make a separate column for raw and normalized values of each smart id - for day_idx in range(len(disk_days)): - for attr_dict in df.iloc[0]["ata_smart_attributes"]: - smart_id = attr_dict["id"] - df.at[day_idx, "smart_{}_raw".format(smart_id)] = int( - attr_dict["raw"]["value"] - ) - df.at[day_idx, "smart_{}_normalized".format(smart_id)] = int( - attr_dict["value"] - ) - - # drop the now-redundant column - df = df.drop("ata_smart_attributes", axis=1) - return df - - def __preprocess(self, disk_days_df, manufacturer): + def __preprocess(self, disk_days, manufacturer): """Scales and transforms input dataframe to feed it to prediction model Arguments: - disk_days_df {pandas.DataFrame} -- df where each row holds drive - features from one day. + disk_days {list} -- list in which each element is a dictionary with key,val + as feature name,value respectively. + e.g.[{'smart_1_raw': 0, 'user_capacity': 512 ...}, ...] manufacturer {str} -- manufacturer of the hard drive Returns: @@ -148,16 +116,20 @@ class DiskFailurePredictor(object): try: model_smart_attr = self.model_context[manufacturer] except KeyError as e: - print("No context (SMART attributes on which model has been trained) found for manufacturer: {}"\ - .format(manufacturer) + RHDiskFailurePredictor.LOGGER.debug( + "No context (SMART attributes on which model has been trained) found for manufacturer: {}".format( + manufacturer + ) ) return None - # keep only the required features + # convert to dataframe, keeping only the required features try: - disk_days_df = disk_days_df[model_smart_attr] + disk_days_df = pd.DataFrame(disk_days, columns=model_smart_attr) except KeyError as e: - print("Mismatch in SMART attributes used to train model and SMART attributes available") + RHDiskFailurePredictor.LOGGER.debug( + "Mismatch in SMART attributes used to train model and SMART attributes available" + ) return None # featurize n (6 to 12) days data - mean,std,coefficient of variation @@ -183,8 +155,7 @@ class DiskFailurePredictor(object): featurized_df = featurized_df.fillna(0) # capacity is not a feature that varies over time - # FIXME: will this values roll over - featurized_df["user_capacity"] = disk_days_df["user_capacity"] + featurized_df["user_capacity"] = disk_days_df["user_capacity"].iloc[0] # scale features scaler_path = os.path.join(self.model_dirpath, manufacturer + "_scaler.joblib") @@ -202,38 +173,40 @@ class DiskFailurePredictor(object): Returns: str -- manufacturer name """ - for prefix, manufacturer in DiskFailurePredictor.MANUFACTURER_MODELNAME_PREFIXES.items(): + for prefix, manufacturer in RHDiskFailurePredictor.MANUFACTURER_MODELNAME_PREFIXES.items(): if model_name.startswith(prefix): return manufacturer # print error message - print("Could not infer manufacturer from model name {}".format(model_name)) + RHDiskFailurePredictor.LOGGER.debug( + "Could not infer manufacturer from model name {}".format(model_name) + ) def predict(self, disk_days): - # massage data into a format that can be fed to models - raw_df = self.__format_raw_data(disk_days) - # get manufacturer preferably as a smartctl attribute # if not available then infer using model name - try: - manufacturer = raw_df["vendor"].iloc[0] - except KeyError as e: - print('"vendor" field not found in smartctl output. Will try to infer manufacturer from model name.') - manufacturer = DiskFailurePredictor.__get_manufacturer(raw_df["model_name"].iloc[0]).lower() + manufacturer = disk_days[0].get("vendor") + if manufacturer is None: + RHDiskFailurePredictor.LOGGER.debug( + '"vendor" field not found in smartctl output. Will try to infer manufacturer from model name.' + ) + manufacturer = RHDiskFailurePredictor.__get_manufacturer( + disk_days[0].get("model_name", "") + ).lower() # print error message, return Unknown, and continue execution if manufacturer is None: - print( + RHDiskFailurePredictor.LOGGER.debug( "Manufacturer could not be determiend. This may be because \ DiskPredictor has never encountered this manufacturer before, \ or the model name is not according to the manufacturer's \ naming conventions known to DiskPredictor" ) - return DiskFailurePredictor.PREDICTION_CLASSES[-1] + return RHDiskFailurePredictor.PREDICTION_CLASSES[-1] # preprocess for feeding to model - preprocessed_data = self.__preprocess(raw_df, manufacturer) + preprocessed_data = self.__preprocess(disk_days, manufacturer) if preprocessed_data is None: - return DiskFailurePredictor.PREDICTION_CLASSES[-1] + return RHDiskFailurePredictor.PREDICTION_CLASSES[-1] # get model for current manufacturer model_path = os.path.join( @@ -241,6 +214,243 @@ class DiskFailurePredictor(object): ) model = joblib.load(model_path) - # use prediction for last day + # use prediction for most recent day + # TODO: ensure that most recent day is last element and most previous day + # is first element in input disk_days pred_class_id = model.predict(preprocessed_data)[-1] - return DiskFailurePredictor.PREDICTION_CLASSES[pred_class_id] + return RHDiskFailurePredictor.PREDICTION_CLASSES[pred_class_id] + + +class PSDiskFailurePredictor(object): + """Disk failure prediction developed at ProphetStor + + This class implements a disk failure prediction module. + """ + + CONFIG_FILE = "config.json" + EXCLUDED_ATTRS = ["smart_9_raw", "smart_241_raw", "smart_242_raw"] + + def __init__(self): + """ + This function may throw exception due to wrong file operation. + """ + + self.model_dirpath = "" + self.model_context = {} + + def initialize(self, model_dirpath): + """ + Initialize all models. + + Args: None + + Returns: + Error message. If all goes well, return an empty string. + + Raises: + """ + + config_path = os.path.join(model_dirpath, self.CONFIG_FILE) + if not os.path.isfile(config_path): + return "Missing config file: " + config_path + else: + with open(config_path) as f_conf: + self.model_context = json.load(f_conf) + + for model_name in self.model_context: + model_path = os.path.join(model_dirpath, model_name) + + if not os.path.isfile(model_path): + return "Missing model file: " + model_path + + self.model_dirpath = model_dirpath + + def __preprocess(self, disk_days): + """ + Preprocess disk attributes. + + Args: + disk_days: Refer to function predict(...). + + Returns: + new_disk_days: Processed disk days. + """ + + req_attrs = [] + new_disk_days = [] + + attr_list = set.intersection(*[set(disk_day.keys()) for disk_day in disk_days]) + for attr in attr_list: + if ( + attr.startswith("smart_") and attr.endswith("_raw") + ) and attr not in self.EXCLUDED_ATTRS: + req_attrs.append(attr) + + for disk_day in disk_days: + new_disk_day = {} + for attr in req_attrs: + if float(disk_day[attr]) >= 0.0: + new_disk_day[attr] = disk_day[attr] + + new_disk_days.append(new_disk_day) + + return new_disk_days + + @staticmethod + def __get_diff_attrs(disk_days): + """ + Get 5 days differential attributes. + + Args: + disk_days: Refer to function predict(...). + + Returns: + attr_list: All S.M.A.R.T. attributes used in given disk. Here we + use intersection set of all disk days. + + diff_disk_days: A list struct comprises 5 dictionaries, each + dictionary contains differential attributes. + + Raises: + Exceptions of wrong list/dict operations. + """ + + all_attrs = [set(disk_day.keys()) for disk_day in disk_days] + attr_list = list(set.intersection(*all_attrs)) + attr_list = disk_days[0].keys() + prev_days = disk_days[:-1] + curr_days = disk_days[1:] + diff_disk_days = [] + # TODO: ensure that this ordering is correct + for prev, cur in zip(prev_days, curr_days): + diff_disk_days.append( + {attr: (int(cur[attr]) - int(prev[attr])) for attr in attr_list} + ) + + return attr_list, diff_disk_days + + def __get_best_models(self, attr_list): + """ + Find the best model from model list according to given attribute list. + + Args: + attr_list: All S.M.A.R.T. attributes used in given disk. + + Returns: + modelpath: The best model for the given attribute list. + model_attrlist: 'Ordered' attribute list of the returned model. + Must be aware that SMART attributes is in order. + + Raises: + """ + + models = self.model_context.keys() + + scores = [] + for model_name in models: + scores.append( + sum(attr in attr_list for attr in self.model_context[model_name]) + ) + max_score = max(scores) + + # Skip if too few matched attributes. + if max_score < 3: + print("Too few matched attributes") + return None + + best_models = {} + best_model_indices = [ + idx for idx, score in enumerate(scores) if score > max_score - 2 + ] + for model_idx in best_model_indices: + model_name = list(models)[model_idx] + model_path = os.path.join(self.model_dirpath, model_name) + model_attrlist = self.model_context[model_name] + best_models[model_path] = model_attrlist + + return best_models + # return os.path.join(self.model_dirpath, model_name), model_attrlist + + @staticmethod + def __get_ordered_attrs(disk_days, model_attrlist): + """ + Return ordered attributes of given disk days. + + Args: + disk_days: Unordered disk days. + model_attrlist: Model's ordered attribute list. + + Returns: + ordered_attrs: Ordered disk days. + + Raises: None + """ + + ordered_attrs = [] + + for one_day in disk_days: + one_day_attrs = [] + + for attr in model_attrlist: + if attr in one_day: + one_day_attrs.append(one_day[attr]) + else: + one_day_attrs.append(0) + + ordered_attrs.append(one_day_attrs) + + return ordered_attrs + + def predict(self, disk_days): + """ + Predict using given 6-days disk S.M.A.R.T. attributes. + + Args: + disk_days: A list struct comprises 6 dictionaries. These + dictionaries store 'consecutive' days of disk SMART + attributes. + Returns: + A string indicates prediction result. One of following four strings + will be returned according to disk failure status: + (1) Good : Disk is health + (2) Warning : Disk has some symptoms but may not fail immediately + (3) Bad : Disk is in danger and data backup is highly recommended + (4) Unknown : Not enough data for prediction. + + Raises: + Pickle exceptions + """ + + all_pred = [] + + proc_disk_days = self.__preprocess(disk_days) + attr_list, diff_data = PSDiskFailurePredictor.__get_diff_attrs(proc_disk_days) + modellist = self.__get_best_models(attr_list) + if modellist is None: + return "Unknown" + + for modelpath in modellist: + model_attrlist = modellist[modelpath] + ordered_data = PSDiskFailurePredictor.__get_ordered_attrs( + diff_data, model_attrlist + ) + + try: + with open(modelpath, "rb") as f_model: + clf = pickle.load(f_model) + + except UnicodeDecodeError: + # Compatibility for python3 + with open(modelpath, "rb") as f_model: + clf = pickle.load(f_model, encoding="latin1") + + pred = clf.predict(ordered_data) + + all_pred.append(1 if any(pred) else 0) + + score = 2 ** sum(all_pred) - len(modellist) + if score > 10: + return "Bad" + if score > 4: + return "Warning" + return "Good"