{"id":292716,"date":"2019-07-29T15:01:10","date_gmt":"2019-07-29T15:01:10","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=292716"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=292716","title":{"rendered":"\u041e\u0442\u0447\u0451\u0442\u044b \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0421\u0425\u0414 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e R. \u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0433\u0440\u0430\u0444\u0438\u043a\u0438, xlsx, email \u0438 \u0432\u0441\u0451 \u0432\u043e\u0442 \u044d\u0442\u043e"},"content":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u0434 \u043f\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0434\u0438\u0441\u043a\u043e\u0432 \u0421\u0425\u0414 <strong>EMC VNX<\/strong> \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0438 \u043e\u0434\u043d\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u043e\u043b\u0438 \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c. \u0424\u043e\u0440\u043c\u0430\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u0443 \u0440\u0430\u0434, \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0443 \u0441\u0435\u0431\u044f.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/41\/jd\/_b\/41jd_bx4gm5lydfdyj9qcj-r0io.png\" alt=\"\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\"><\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h2 id=\"predystoriya\">\u041f\u0440\u0435\u0434\u044b\u0441\u0442\u043e\u0440\u0438\u044f<\/h2>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043e\u0442\u043a\u0443\u0434\u0430 &#171;\u043d\u043e\u0433\u0438 \u0440\u0430\u0441\u0442\u0443\u0442&#187;.<br \/>  \u0415\u0441\u0442\u044c \u0443 \u043d\u0430\u0441 \u0426\u041e\u0414. \u0422\u0430\u043c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0441\u0432\u0435\u0436\u0438\u0435 \u0421\u0425\u0414. \u0421\u0425\u0414 \u043c\u043d\u043e\u0433\u043e, \u043e\u0442\u043a\u0430\u0437\u043e\u0432 \u0434\u0438\u0441\u043a\u043e\u0432 \u0442\u043e\u0436\u0435. \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e \u0432 \u0426\u041e\u0414 \u0435\u0437\u0434\u044f\u0442 \u043b\u044e\u0434\u0438 \u0438 \u043c\u0435\u043d\u044f\u044e\u0442 \u0434\u0438\u0441\u043a\u0438 \u0432 \u0421\u0425\u0414. \u0420\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u0437\u0430\u043c\u0435\u043d\u0435 \u0434\u0438\u0441\u043a\u043e\u0432 \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u043e\u0442 \u0441\u0438\u0441\u0442\u0435\u043c\u044b &#171;<strong>Recommended disk replacement<\/strong>&#171;. <\/p>\n<p>  <\/p>\n<p><em>\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435\u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e.<\/em><\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/5l\/ho\/ne\/5lhonedh_eha1d0gm2vnzrv2ry4.png\" alt=\"\u0412\u0441\u0451 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435\"><\/p>\n<p>  <\/p>\n<p>\u041d\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 LUN, \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u044d\u0442\u0438\u0445 \u0421\u0425\u0414 \u0438 \u043f\u0440\u0435\u0437\u0435\u043d\u0442\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0412\u0438\u0440\u0442\u0443\u043b\u044c\u043d\u043e\u0439 \u0441\u0440\u0435\u0434\u0435 \u0441\u0442\u0430\u043b\u0438 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e \u0434\u0435\u0433\u0440\u0430\u0434\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041f\u043e\u0441\u043b\u0435 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0442\u0435\u0445\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u043e\u0439 \u0432\u0435\u043d\u0434\u043e\u0440\u0430 \u0441\u0442\u0430\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0434\u0438\u0441\u043a\u0438 \u0443\u0436\u0435 \u043d\u0430\u0434\u043e \u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0433\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f, \u043d\u043e \u0438 \u043f\u0440\u0438 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043d\u0435 \u0441\u0447\u0438\u0442\u0430\u0435\u0442 critical \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438.<\/p>\n<p>  <\/p>\n<p>\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u043f\u043e SNMP \u044d\u0442\u0438\u043c\u0438 \u0421\u0425\u0414 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041d\u0443\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043b\u0438 \u0434\u043e\u0440\u043e\u0433\u043e\u0439 \u043f\u0440\u043e\u043f\u0440\u0438\u0435\u0442\u0430\u0440\u043d\u044b\u0439 \u0441\u043e\u0444\u0442 (\u0435\u0433\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435\u0442), \u043b\u0438\u0431\u043e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u0443\u044e \u0443\u0442\u0438\u043b\u0438\u0442\u0443 <strong>NaviSECCli<\/strong>, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043a \u043a\u0430\u0436\u0434\u043e\u043c\u0443 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0443 (\u0438\u0445 \u0434\u0432\u0430) \u043a\u0430\u0436\u0434\u043e\u0439 \u0421\u0425\u0414, \u0430 \u044d\u0442\u043e\u0433\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c.<\/p>\n<p>  <\/p>\n<p>\u0411\u044b\u043b\u043e \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0431\u043e\u0440 \u043b\u043e\u0433\u043e\u0432 \u0438 \u043f\u043e\u0438\u0441\u043a \u0432 \u043d\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a. \u0410 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043e \u0437\u0430\u043c\u0435\u043d\u0435 \u0434\u0438\u0441\u043a\u043e\u0432 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432 \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u043e\u0442\u0447\u0451\u0442\u0430. <\/p>\n<p>  <\/p>\n<h2 id=\"pervye-shagi\">\u041f\u0435\u0440\u0432\u044b\u0435 \u0448\u0430\u0433\u0438<\/h2>\n<p>  <\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u043a\u043e\u043b\u043b\u0435\u0433 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043a\u043e\u0434 \u043d\u0430 <strong>PowerShell<\/strong>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0434\u0435\u043b\u0430\u043b \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0411\u0440\u0430\u043b \u043d\u0430 \u0432\u0445\u043e\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043b\u0430 ip \u0430\u0434\u0440\u0435\u0441\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0421\u0425\u0414;<\/li>\n<li>\u0446\u0438\u043a\u043b\u043e\u043c \u0448\u0451\u043b \u043f\u043e ip \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 <em>\u0410<\/em>, \u0437\u0430\u0442\u0435\u043c \u043f\u043e ip \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 <em>\u0412<\/em>; <\/li>\n<li>\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043b \u0438\u0445 \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0445 \u043d\u043e\u043c\u0435\u0440\u043e\u0432 \u0434\u0438\u0441\u043a\u043e\u0432;<\/li>\n<li>\u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b \u0432\u0441\u0435 \u0441\u0442\u0440\u043e\u0447\u043a\u0438 \u043b\u043e\u0433\u043e\u0432 \u0438 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043b \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u044f \u0438\u0441\u043a\u043e\u043c\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439;<\/li>\n<li>\u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u043e\u0431\u044a\u0435\u043a\u0442 <strong>PowerShell<\/strong> \u0438 \u0432 \u0435\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0430\u0440\u0441\u0438\u043b \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u0441\u0442\u0440\u043e\u0447\u0435\u043a;<\/li>\n<li>\u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u043b \u0432\u0441\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0438\u0435\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u044b\u0434\u0430\u0432\u0430\u043b \u0432 \u0432\u0438\u0434\u0435 csv.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041a\u043e\u0434 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043d\u0438\u0436\u0435. \u0421\u0440\u0430\u0437\u0443 \u043e\u0433\u043e\u0432\u043e\u0440\u044e\u0441\u044c, \u0447\u0442\u043e \u043e\u043d \u0440\u0430\u0431\u043e\u0447\u0438\u0439, \u043d\u043e \u043c\u044b \u0432\u043d\u0435\u0434\u0440\u0438\u043b\u0438 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043d\u0430 PowerShell<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"perl\">cd 'd:\\Navisphere CLI\\' $csv = \"D:\\VNX-IP.csv\" $Filter1 = \"name1\" $Filter2 = \"name2\" $Filter3 = \"name3\" $Data = import-csv $csv -Delimiter ';' | Where {$_.cl -EQ $Filter1 -Or $_.cl -EQ $Filter2 -Or $_.cl -EQ $Filter3} | Sort-Object -Property @{Expression={$_.cl}; Ascending=$true}, @{Expression={$_.Name} ;Ascending=$true} #$Filter1 = \"nameOfcl\" #$Data = import-csv $csv -Delimiter ';' | Where {$_.Name -EQ $Filter1} $Data | select Name,IP,cl  $yStart = (Get-Date).AddDays(-30).ToString('yyyy') $yEnd = (Get-Date).ToString('yyyy') $mStart = (Get-Date).AddDays(-30).ToString('MM') $mEnd = (Get-Date).ToString('MM') $dStart = (Get-Date).AddDays(-30).ToString('dd') $dEnd = (Get-Date).ToString('dd')  #$start = (Get-Date).AddDays(-3).ToString('MM\\\/dd\\\/yy') #$end = (Get-Date).ToString('MM\\\/dd\\\/yy') $i = 1 $table = ForEach ($row in $Data) {     Write-Host $row.Name -ForegroundColor \"Yellow\"     Write-Host \"SP A\"     Write-Host (Get-Date).ToString('HH:mm:ss')     $txt = .\\NaviSECCli.exe -scope 0 -h $row.newA -user myusername -password mypassword getlog -date $mStart\/$dStart\/$yStart $mEnd\/$dEnd\/$yEnd | Select-String -Pattern \"\\(820\\)\",\"\\(803\\)\",\"\\(801\\)\",\"\\(920\\)\",\"\\(901\\)\"     ForEach ($n in $txt) {         $x = $n -Split(' ')         $disk = $x[3] + \"_\" + $x[5] + \"_\" + $x[7].Split(\"(\")[0]         $sn = (.\\NaviSECCli.exe -scope 0 -h $row.newA -user myusername -password mypassword getdisk $disk -serial)[1] | %{$_ -replace \"Serial Number:           \",\"\"} | %{$_ -replace \"State:                   \",\"\"} | %{$_ -replace \" \",\"\"}         New-Object PSObject -Property @{             i = $i             cl = $row.cl             Storage = $row.Name              SP = \"A\"             Date = $x[0]             Time = $x[1]             Disk = $disk             Error = (($n -Split('\\['))[0] -Split('\\)'))[1].Trim()             eCode = (($n -Split('\\('))[1] -Split('\\)'))[0]             SN = $sn         }         $i = $i + 1     }     Write-Host \"SP B\"     Write-Host (Get-Date).ToString('HH:mm:ss')     $txt = .\\NaviSECCli.exe -scope 0 -h $row.newB -user myusername -password mypassword getlog -date $mStart\/$dStart\/$yStart $mEnd\/$dEnd\/$yEnd | Select-String -Pattern \"\\(820\\)\",\"\\(803\\)\",\"\\(801\\)\",\"\\(920\\)\",\"\\(901\\)\"     ForEach ($n in $txt) {         $x = $n -Split(' ')         $disk = $x[3] + \"_\" + $x[5] + \"_\" + $x[7].Split(\"(\")[0]         $sn = (.\\NaviSECCli.exe -scope 0 -h $row.newA -user myusername -password mypassword getdisk $disk -serial)[1] | %{$_ -replace \"Serial Number:           \",\"\"} | %{$_ -replace \"State:                   \",\"\"} | %{$_ -replace \" \",\"\"}         New-Object PSObject -Property @{             i = $i             cl = $row.cl             Storage = $row.Name              SP = \"B\"             Date = $x[0]             Time = $x[1]             Disk = $disk             Error = (($n -Split('\\['))[0] -Split('\\)'))[1].Trim()             eCode = (($n -Split('\\('))[1] -Split('\\)'))[0]             SN = $sn         }         $i = $i + 1     }     Write-Host \" \"   } $table | select i,cl,Storage,SP,Date,Time,Disk,Error,eCode,SN | Export-Csv -Path 'd:\\VNX-Errors.csv' -NoTypeInformation -UseCulture -Encoding UTF8 <\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0412\u0441\u0451 \u0431\u044b\u043b\u043e \u0445\u043e\u0440\u043e\u0448\u043e, \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c &#171;\u043b\u043e\u0441\u043a\u0430&#187; \u0432 \u0432\u0438\u0434\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u043f\u0438\u0441\u044c\u043c\u0430 \u0437\u0430\u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0435\u0433\u043e\u0441\u044f csv. \u041d\u043e (!) \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u043b\u0430 \u0432\u0441\u044f \u044d\u0442\u0430 \u0431\u0435\u0434\u0430 \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u043b\u0433\u043e. \u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430 \u043c\u0435\u0441\u044f\u0446, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043e\u0431\u0438\u0440\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u0430 <strong>45 \u043c\u0438\u043d\u0443\u0442<\/strong>, \u0447\u0442\u043e \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u043b\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043f\u043e\u043c\u0438\u043c\u043e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043d\u0430\u043b\u0438\u0437 \u0437\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0433\u043e\u0434, \u0430 \u044d\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u0441\u043e\u0432\u0441\u0435\u043c \u0434\u043e\u043b\u0433\u043e. \u041d\u043e &#171;\u043e\u0442\u0432\u0435\u0440\u0433\u0430\u044f \u2014 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0439&#187;. \u0421\u0442\u0430\u043b\u0438 \u0434\u0443\u043c\u0430\u0442\u044c.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/jn\/85\/ts\/jn85tsztuso-z7ulzxh2a1jk7yq.jpeg\"><\/p>\n<p>  <\/p>\n<p>\u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u0438 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u0412 <strong>PowerShell<\/strong> \u0431\u043e\u043b\u044c\u0448\u0435 5 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <strong>workflow<\/strong> \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c, \u0430 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u043c\u044b \u043f\u043e\u043a\u0430 \u043d\u0435 &#171;\u0440\u0430\u0441\u043a\u0443\u0440\u0438\u043b\u0438&#187;. \u0422\u0430\u043a \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 <strong>R<\/strong>. \u0412 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u043e\u043f\u0440\u043e\u0441 \u0421\u0425\u0414 \u0434\u0435\u043b\u0430\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <strong>NaviSECCli<\/strong>, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u0432\u043f\u043e\u043b\u043d\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0438\u0437 \u043f\u043e\u0434 <strong>R<\/strong>, \u0442\u0430\u043a \u0447\u0442\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0432\u043f\u043e\u043b\u043d\u0435 \u0441\u0435\u0431\u0435 \u0433\u043e\u0434\u043d\u043e\u0435.<br \/>  \u0421\u043a\u0430\u0437\u0430\u043d\u043e \u2014 <del>\u043f\u043e\u043f\u0440\u043e\u043a\u0440\u0430\u0441\u0442\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u0430\u0440\u0443 \u0434\u043d\u0435\u0439<\/del> \u2014 \u0441\u0434\u0435\u043b\u0430\u043d\u043e!<\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u0448\u0438\u043b\u0438, \u0447\u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u0443\u044e \u0440\u0430\u0441\u0441\u044b\u043b\u043a\u0443, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0443\u044e \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u043f\u0438\u0441\u044c\u043c\u0430 <strong>\u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a<\/strong>, \u043a\u0430\u043a\u043e\u0439-\u0442\u043e <strong>\u0433\u0440\u0430\u0444\u0438\u043a<\/strong> \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0430\u0432\u0430\u0440\u0438\u0439 (\u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u0447\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0443), \u0430 \u0442\u0430\u043a\u0436\u0435 <strong>\u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0435<\/strong> \u0432 \u0432\u0438\u0434\u0435 xlsx \u0442\u0430\u0431\u043b\u0438\u0446\u044b. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u043b\u0438, \u0447\u0442\u043e \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0438\u043c\u0435\u0442\u044c 3 \u0432\u043a\u043b\u0430\u0434\u043a\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0414\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0430\u0432\u0430\u0440\u0438\u044f\u043c \u0437\u0430 3 \u0434\u043d\u044f \u0441 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u043e\u0439 \u043f\u043e \u0434\u0438\u0441\u043a\u0430\u043c \u0438 \u0442\u0438\u043f\u0430\u043c \u0430\u0432\u0430\u0440\u0438\u0439<\/li>\n<li>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0443\u044e \u0432\u043a\u043b\u0430\u0434\u043a\u0443, \u043d\u043e \u0437\u0430 30 \u0434\u043d\u0435\u0439<\/li>\n<li>\u0421\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 (\u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u0445\u043e\u0447\u0435\u0442 \u0441\u0430\u043c \u043f\u043e\u0433\u043e\u043d\u044f\u0442\u044c \u0438\u0445 \u0432 Excel)<\/li>\n<\/ul>\n<p>  <\/p>\n<h4 id=\"algoritm-skripta\">\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043a\u0440\u0438\u043f\u0442\u0430<\/h4>\n<p>  <\/p>\n<p><strong>1.<\/strong> \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0437 csv \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c;<br \/>  <strong>2.<\/strong> \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445;<br \/>  <strong>3.<\/strong> \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432 data frame;<br \/>  <strong>4.<\/strong> \u0434\u0435\u043b\u0430\u0435\u043c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445;<br \/>  <strong>5.<\/strong> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c xlsx \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442;<br \/>  <strong>6.<\/strong> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 png;<br \/>  <strong>7.<\/strong> \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043f\u0438\u0441\u044c\u043c\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435;<br \/>  <strong>8.<\/strong> \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0438\u0441\u044c\u043c\u043e.<\/p>\n<p>  <\/p>\n<h2 id=\"proydyom-po-punktam-algoritma\">\u041f\u0440\u043e\u0439\u0434\u0451\u043c \u043f\u043e \u043f\u0443\u043d\u043a\u0442\u0430\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/h2>\n<p>  <\/p>\n<h3 id=\"1-zagruzhaem-iz-csv-imeyuschiesya-dannye-po-kontrolleram\">1. \u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0438\u0437 csv \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c<\/h3>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u043e\u0440\u043c\u0430\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 VNX<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\"># A tibble: 83 x 9    Name  IP         cl      type   newA      newB      oldA      oldB      cntIP        &lt;chr&gt; &lt;chr&gt;      &lt;chr&gt;   &lt;chr&gt;  &lt;chr&gt;     &lt;chr&gt;     &lt;chr&gt;     &lt;chr&gt;     &lt;chr&gt;      1 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~  2 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~  3 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~  4 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~  5 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~  6 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~  7 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~  8 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~  9 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~ 10 XXX   10.***.**~ XclNam~ 5300-1 10.201.1~ 10.201.1~ 10.***.*~ 10.***.*~ 10.***.*~ # ... with 73 more rows<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0441\u0431\u043e\u0440\u0430 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u043e\u0431\u043e\u0438\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c (\u0441\u0442\u043e\u043b\u0431\u0446\u044b <em>newA<\/em> \u0438 <em>newB<\/em>) \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u041f\u041e \u043e\u0442 <em>\u0415\u041c\u0421<\/em> \u2014 <strong>NaviCLI<\/strong> \u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u043c\u0438 \u043a\u043b\u044e\u0447\u0430\u043c\u0438.<br \/>  \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u043f\u0435\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0438\u0432\u0448\u0443\u044e\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b ip \u0430\u0434\u0440\u0435\u0441\u0430 \u043e\u0431\u043e\u0438\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0431\u044b\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043e\u0434\u0438\u043d \u0446\u0438\u043a\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443, \u0430 \u043d\u0435 \u0434\u0432\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445. \u0414\u0435\u043b\u0430\u0435\u043c \u044d\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>gather<\/strong>. \u0412\u043e\u043f\u0440\u043e\u0441\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 &#171;\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u043c&#187; \u0438\u043b\u0438 &#171;\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u043c&#187; \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 <strong>tidyverse<\/strong>. \u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/garrettgman.github.io\/tidying\/\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0427\u0438\u0442\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 <strong>read_csv2<\/strong>, \u0442\u0430\u043a\u0436\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u0442\u0438\u043f\u044b \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0447\u0435\u0440\u0435\u0437 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>col_types<\/strong>. \u042d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0430\u044f \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430, \u0442.\u043a. \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0443. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043d\u0435 \u0442\u0430\u043a \u0432\u0430\u0436\u043d\u043e, \u0442.\u043a. \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 csv \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 100 \u0441\u0442\u0440\u043e\u043a, \u043d\u043e \u043f\u0440\u0438\u0432\u044b\u043a\u0430\u0435\u043c \u043f\u0438\u0441\u0430\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"python\"># \u0424\u0430\u0439\u043b \u0441 IP VNX.  # \u0424\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043f\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c \u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e,  # \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 ip \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0410 \u0438 \u0412 \u0431\u044b\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435. VNX_ip &lt;- vnxIPfilePath %&gt;% read_csv2(   col_types = cols(     Name = col_character(),     IP = col_character(),     cl = col_character(),     type = col_character(),     newA = col_character(),     newB = col_character(),     oldA = col_character(),     oldB = col_character()   ) ) %&gt;%   filter(cl %in% productCls) %&gt;%   gather(key = \"cntName\",           value = \"cntIP\",           5:6)<\/code><\/pre>\n<p>  <\/p>\n<p>\u041d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0432\u043e\u0442 \u0442\u0430\u043a\u043e\u0439 data frame (\u043d\u043e\u0432\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u2014 <strong>cntName<\/strong> \u0438 <strong>cntIP<\/strong>):<\/p>\n<p>  <\/p>\n<pre><code class=\"python\"># A tibble: 30 x 8    Name  IP            cl       type  oldA         oldB         cntName cntIP           &lt;chr&gt; &lt;chr&gt;         &lt;chr&gt;    &lt;chr&gt; &lt;chr&gt;        &lt;chr&gt;        &lt;chr&gt;   &lt;chr&gt;         1 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~  2 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~  3 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~  4 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~  5 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~  6 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~  7 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~  8 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~  9 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~ 10 XXX   10.***.***.*~ XclNameX 5300~ 10.***.***.~ 10.***.***.~ newA    10.***.***.~ # ... with 20 more rows<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"2-3-zapuskaem-cherez-parallelnye-vychisleniya-cikl-po-vsem-kontrolleram-s-poiskom-zapisey-o-trebuemyh-avariynyh-soobscheniyah-rezultaty-obedinyaem-v-data-frame\">2-3. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0446\u0438\u043a\u043b \u043f\u043e \u0432\u0441\u0435\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430\u043c \u0441 \u043f\u043e\u0438\u0441\u043a\u043e\u043c \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0445 \u0430\u0432\u0430\u0440\u0438\u0439\u043d\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f\u0445. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u043c \u0432 data-frame<\/h3>\n<p>  <\/p>\n<p>\u0414\u0430\u043b\u0435\u0435 \u2014 \u0441\u0430\u043c\u043e\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435. <em>\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f<\/em>.<\/p>\n<p>  <\/p>\n<p>\u0412 <strong>R<\/strong> \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e (\u0441\u043a\u043e\u0440\u0435\u0435 \u0434\u0430\u0436\u0435 \u043c\u043d\u043e\u0433\u043e) \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u0438\u0433\u043b\u044f\u043d\u0443\u043b\u0430\u0441\u044c \u0441\u0432\u044f\u0437\u043a\u0430 \u0438\u0437 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a <strong>foreach<\/strong> \u0438 <strong>doParallel<\/strong>. \u041f\u0440\u043e \u043d\u0438\u0445 \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0432 <strong>R<\/strong> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/nceas.github.io\/oss-lessons\/parallel-computing-in-r\/parallel-computing-in-r.html\">\u0442\u0443\u0442<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043a\u043e\u0440\u043e\u0442\u043a\u043e, \u0442\u043e \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0441\u0435\u0433\u043e <strong>3 \u0448\u0430\u0433\u0430<\/strong>:<br \/>  <strong>\u0428\u0430\u0433 1<\/strong>. \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u044f\u0434\u0440\u0430<del>\u0447\u0438\u0441\u0442\u044b\u0439\u0438\u0437\u0443\u043c\u0440\u0443\u0434<\/del> CPU \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0432 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u0445 \u0447\u0435\u0440\u0435\u0437 <strong>registerDoParallel<\/strong> (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043c\u044b \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0434\u0435\u0442\u0435\u043a\u0442\u0438\u0440\u0443\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0434\u0435\u0440 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439)<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u044f\u0434\u0440\u0430 CPU<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">numCores &lt;- detectCores() registerDoParallel(numCores)<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p><strong>\u0428\u0430\u0433 2<\/strong>. \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u0446\u0438\u043a\u043b \u0447\u0435\u0440\u0435\u0437 <strong>foreach<\/strong> (\u043d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <strong>%dopar%<\/strong>, \u0447\u0442\u043e\u0431\u044b \u0446\u0438\u043a\u043b \u0448\u0451\u043b \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e \u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c, \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 <strong>.combine<\/strong> \u0441\u043f\u043e\u0441\u043e\u0431, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442). \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 <strong>.combine = rbind<\/strong>, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043d\u0430 \u0432\u044b\u0445\u043e\u0434\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0438\u043c\u0435\u0442\u044c <strong>data frame<\/strong>.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041a\u043e\u0434 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\"># \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 VNX \u043c\u044b \u0432\u044b\u0434\u0451\u0440\u0433\u0438\u0432\u0430\u0435\u043c ip \u0438 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e. # \u0415\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u0442, \u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c # \u0415\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0435\u0441\u0442\u044c, \u0442\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e dataframe # \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f %dopar% \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0434\u0443\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.  # \u041c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c, \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0432 \u0432\u044b\u0437\u043e\u0432 system.time \u0438 \u0437\u0430\u043c\u0435\u0440\u0438\u0442\u044c \u0442\u0430\u043a,  # \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c %dopar% \u043d\u0430 %do%. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0430 \u0432 4-5. # system.time({ errors_df &lt;- foreach(i = 1:nrow(VNX_ip),                      .combine = rbind,                      .packages = \"tidyverse\") %dopar% {                        errors_raw &lt;- system(                          paste(                            \"NaviSECCli.exe -scope 0 -h\",                            VNX_ip$cntIP[i],                            \"-user myusername -password mypassword getlog -date\",                            bigPeriodForm,                            currDateForm                          ),                          intern = TRUE                        ) %&gt;%                          str_subset(pattern = regex(paste0(errorNumbers, collapse = \"|\")))                          # \u0415\u0441\u043b\u0438 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0438\u0441\u043a\u043e\u043c\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442, \u0442\u043e \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b                        if (length(errors_raw) &gt; 0) {                           # \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043a\u0438                          # \u0412\u044b\u0440\u0435\u0437\u0430\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0441\u043a\u043e\u0431\u043a\u0435 \u043a\u0440\u0443\u0433\u043b\u043e\u0439 \u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0439,                           # \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u0443\u0447\u0443 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432 \u0432 \u043a\u043e\u043d\u0446\u0435,                           # \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0435 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f.                          errorsDescr &lt;- errors_raw %&gt;%                            gsub(\"(.*\\\\) )(.*)(\\\\s+\\\\[.*)\",                                 \"\\\\2\",                                 x = .) %&gt;%                            trimws() %&gt;%                            gsub('([[:punct:]])|\\\\s+',                                 '_',                                 .)                           # \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0442\u0435\u043a\u0441\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0438\u0437 \u043d\u0435\u0451 \u0438\u043c\u0435\u043d\u0430 \u0434\u0438\u0441\u043a\u043e\u0432                          errors &lt;- errors_raw %&gt;%                            str_split(pattern = \"\\\\s+\", simplify = T) %&gt;%                            as_tibble() %&gt;%                            mutate(Disk = paste0(V4, \"_\", V6, \"_\", V8) %&gt;%                                     gsub(                                       pattern = \"\\\\([0-9]{3}\\\\)\",                                       replacement = \"\",                                       x = .)                            )                           # \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c dataframe \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438                          data_frame(cl = VNX_ip$cl[i],                                     Storage = VNX_ip$Name[i],                                     Date = errors$V1 %&gt;% as.Date(format = \"%m\/%d\/%Y\"),                                     Time = errors$V2,                                     Disk = errors$Disk,                                     Error = errorsDescr,                                      eCode = errors$V8 %&gt;%                                        str_extract(paste0(errorNumbers, collapse = \"|\")) %&gt;%                                        str_extract(\"[0-9]+\")) %&gt;%                            mutate(DateTime = as.POSIXct(paste(Date, Time), format =                                                           \"%Y-%m-%d %H:%M:%S\"))                         }                      } # })<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p><strong>\u0428\u0430\u0433 3<\/strong>. \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c\u0430 \u0447\u0435\u0440\u0435\u0437 <strong>stopImplicitCluster()<\/strong><\/p>\n<p>  <\/p>\n<h4 id=\"chut-podrobnee-po-poluchenii-chitaemoy-tablicy-iz-raw-teksta-oshibok\">\u0427\u0443\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043f\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0438\u0437 raw \u0442\u0435\u043a\u0441\u0442\u0430 \u043e\u0448\u0438\u0431\u043e\u043a<\/h4>\n<p>  <\/p>\n<p>\u0412 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0432\u0438\u0434\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u044f\u0442 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"python\">head(errors_raw) [1] \"07\/13\/2019 00:01:46 Bus 0 Enclosure 3 Disk 9(801) Soft SCSI Bus Error                     [0x00]   841d1080 10006                                    \" [2] \"07\/13\/2019 00:01:46 Bus 0 Enclosure 3 Disk 9(801) Soft SCSI Bus Error                     [0x00]   841e1a00 10006                                    \" [3] \"07\/13\/2019 00:01:46 Bus 0 Enclosure 3 Disk 9(801) Soft SCSI Bus Error                     [0x00]   8420b600 10006                                    \" [4] \"07\/13\/2019 00:01:46 Bus 0 Enclosure 3 Disk 9(801) Soft SCSI Bus Error                     [0x00]   84206900 10006                                    \" [5] \"07\/13\/2019 00:01:46 Bus 0 Enclosure 3 Disk 9(801) Soft SCSI Bus Error                     [0x00]   841fc900 10006                                    \" [6] \"07\/13\/2019 00:01:46 Bus 0 Enclosure 3 Disk 9(801) Soft SCSI Bus Error                     [0x00]   841fc000 10006<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0443 \u043d\u0430\u0441 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0435, \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0434\u0430\u0436\u0435 \u0432 <em>csv<\/em> \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u044f\u0442\u0441\u044f. \u041d\u043e \u0432\u0441\u0451 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e. \u0421\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 \u0442\u0443\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u0434\u0430\u0442\u0430 \u0438 \u0432\u0440\u0435\u043c\u044f \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u044b \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c (\u043d\u0430\u0438\u043c\u0435\u043d\u044c\u0448\u0435\u0435 \u0438\u0437 \u0437\u043e\u043b);<\/li>\n<li>\u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043e\u043a \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 &#171;\u0441\u043b\u043e\u0432&#187;, \u0442.\u0435. \u0442\u043e\u0436\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0451\u043d \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u043c;<\/li>\n<li>\u043c\u0435\u0436\u0434\u0443 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0434\u0438\u0441\u043a\u0430 \u0438 \u043a\u043e\u0434\u043e\u043c \u043e\u0448\u0438\u0431\u043a\u0438 (\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u0441\u043a\u043e\u0431\u043a\u0430\u0445) \u043f\u0440\u043e\u0431\u0435\u043b\u0430 \u043f\u043e\u0447\u0435\u043c\u0443-\u0442\u043e \u043d\u0435\u0442.<br \/>  \u0412 \u043e\u0431\u0449\u0435\u043c, \u0440\u0430\u0439 \u0434\u043b\u044f \u043b\u044e\u0431\u0438\u0442\u0435\u043b\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0439 \ud83d\ude42<\/li>\n<\/ul>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/yk\/rf\/2i\/ykrf2irog7eq_o3j3d0-ijnild0.jpeg\" alt=\"\u0411\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0431\u043b\u044e\u0434\u043e\u043a\"><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043d\u0430 \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0435 \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044d\u0442\u043e \u0434\u0435\u043b\u043e \u0432\u043a\u0443\u0441\u0430, \u043d\u043e \u0443\u0442\u043e\u0447\u043d\u044e, \u0447\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u044b\u0434\u0438\u0440\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e, \u043a\u0430\u043a \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0440\u0430\u0441\u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u043c\u0435\u0436\u0434\u0443 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043a\u0440\u0443\u0433\u043b\u043e\u0439 \u0441\u043a\u043e\u0431\u043a\u043e\u0439 \u043d\u043e\u043c\u0435\u0440\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u0438 \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u044e\u0449\u0435\u0439 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u043a\u043e\u0431\u043a\u043e\u0439 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. \u0412 \u0446\u0438\u043a\u043b\u0435 \u044d\u0442\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f <strong>errors<\/strong>.<\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0447\u0442\u043e \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e data frame, \u043c\u044b, \u0436\u0435\u043b\u0430\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0446\u0438\u043a\u043b \u043f\u043e ip \u0430\u0434\u0440\u0435\u0441\u0430\u043c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432, \u0437\u0430\u0434\u0430\u0451\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u0441 ip \u0430\u0434\u0440\u0435\u0441\u0430\u043c\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 (\u0442.\u0435. <strong>i = VNX_ip$cntIP<\/strong>), \u0430 \u0447\u0435\u0440\u0435\u0437 \u043d\u043e\u043c\u0435\u0440 \u0441\u0442\u0440\u043e\u043a\u0438 (\u0442.\u0435. <strong>i = 1:nrow(VNX_ip)<\/strong>). \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u043f\u0440\u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 data frame \u0441 \u0443\u0436\u0435 \u0440\u0430\u0441\u043f\u0430\u0440\u0441\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u043c\u0435\u0440 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0438 \u0438\u043c\u044f \u0421\u0425\u0414 \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0437\u043e\u0432\u044b <strong>VNX_ip$cl[i]<\/strong> \u0438 <strong>VNX_ip$Name[i]<\/strong> \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u0434\u0435\u043b\u0430\u0442\u044c \u0434\u0436\u043e\u0439\u043d\u044b, \u0447\u0442\u043e \u0431\u044b\u043b\u043e \u0431\u044b \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0438 \u0445\u0443\u0436\u0435 \u0447\u0438\u0442\u0430\u043b\u043e\u0441\u044c \u0431\u044b \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c data frame (\u0430 \u0435\u0441\u043b\u0438 \u0447\u0435\u0441\u0442\u043d\u043e, \u0442\u043e <strong>tibble<\/strong>, \u043d\u043e \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0432\u0441\u0435 \u043d\u0443\u0436\u043d\u044b\u0435 \u043d\u0430\u043c \u0434\u0430\u043d\u043d\u044b\u0435. \u0422.\u0435. \u043d\u0430 \u043a\u0430\u043a\u043e\u0439 \u0421\u0425\u0414, \u043d\u0430 \u043a\u0430\u043a\u043e\u043c \u0434\u0438\u0441\u043a\u0435, \u043a\u043e\u0433\u0434\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043a\u0430\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0432\u0438\u0434 Data frame<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">&gt; errors_df # A tibble: 2,705 x 8    cl      Storage    Date       Time    Disk  Error       eCode DateTime               &lt;chr&gt;   &lt;chr&gt;      &lt;date&gt;     &lt;chr&gt;   &lt;chr&gt; &lt;chr&gt;       &lt;chr&gt; &lt;dttm&gt;               1 XclNam~ XStorageN~ 2019-07-18 12:09:~ 0_1_3 Soft_SCSI_~ 801   2019-07-18 12:09:55  2 XclNam~ XStorageN~ 2019-07-18 15:09:~ 0_1_3 Soft_SCSI_~ 801   2019-07-18 15:09:56  3 XclNam~ XStorageN~ 2019-07-18 16:28:~ 0_1_3 Soft_SCSI_~ 801   2019-07-18 16:28:50  4 XclNam~ XStorageN~ 2019-07-19 06:36:~ 0_1_6 Soft_SCSI_~ 801   2019-07-19 06:36:39  5 XclNam~ XStorageN~ 2019-07-19 20:57:~ 0_1_6 Soft_Media~ 820   2019-07-19 20:57:35  6 XclNam~ XStorageN~ 2019-07-22 11:00:~ 0_2_~ Soft_SCSI_~ 801   2019-07-22 11:00:43  7 XclNam~ XStorageN~ 2019-07-22 11:00:~ 0_2_~ Soft_SCSI_~ 801   2019-07-22 11:00:44  8 XclNam~ XStorageN~ 2019-07-22 12:02:~ 0_2_~ Soft_SCSI_~ 801   2019-07-22 12:02:31  9 XclNam~ XStorageN~ 2019-07-23 23:29:~ 0_3_8 Soft_SCSI_~ 801   2019-07-23 23:29:49 10 XclNam~ XStorageN~ 2019-07-13 00:01:~ 0_3_9 Soft_SCSI_~ 801   2019-07-13 00:01:46 # ... with 2,695 more rows<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0421\u0430\u043c\u043e\u0435 \u0448\u0438\u043a\u0430\u0440\u043d\u043e\u0435, \u0447\u0442\u043e \u0432\u0435\u0441\u044c \u0446\u0438\u043a\u043b \u043f\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u043e\u043f\u0440\u043e\u0441\u0443 \u0432\u0441\u0435\u0445 \u0421\u0425\u0414 \u0437\u0430\u043d\u0438\u043c\u0430\u0435\u0442 <strong>\u043d\u0435 45 \u043c\u0438\u043d\u0443\u0442, \u0430 30 \u0441\u0435\u043a\u0443\u043d\u0434<\/strong>.<\/p>\n<p>  <\/p>\n<p><em>\u0421\u043b\u0430\u0432\u0430 \u0431\u043e\u0433\u0443, \u0447\u0442\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u043e\u0442 \u0441\u043b\u0443\u0447\u0430\u0439, \u043a\u043e\u0433\u0434\u0430 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u2014 \u044d\u0442\u043e \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u044b\u0441\u0442\u0440\u043e.<\/em><br \/>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/pr\/nf\/u9\/prnfu9eet3au2ktv5-uk1vauskk.jpeg\" alt=\"\u0448\u0443\u0442\u043a\u0430\"><\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u043e\u0438\u0442 \u0443\u0442\u043e\u0447\u043d\u0438\u0442\u044c, \u0447\u0442\u043e \u043a\u043e\u0434 \u043d\u0430 <strong>PowerShell<\/strong> \u0442\u0430\u043a\u0436\u0435 \u0432 \u0446\u0438\u043a\u043b\u0435 \u0441\u043e\u0431\u0438\u0440\u0430\u043b \u0441\u0435\u0440\u0438\u0439\u043d\u044b\u0435 \u043d\u043e\u043c\u0435\u0440\u0430 \u0434\u0438\u0441\u043a\u043e\u0432 \u0441\u043e \u0432\u0441\u0435\u0445 \u0421\u0425\u0414, \u0430 \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430 \u043d\u0430 <strong>R<\/strong> \u044d\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u043a\u0430\u0437\u0430\u043b\u0438\u0441\u044c \u043b\u0438\u0448\u043d\u0438\u043c\u0438. \u0422\u0430\u043a \u0447\u0442\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u0447\u0435\u0441\u0442\u043d\u043e\u0435, \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0435\u0435.<\/p>\n<p>  <\/p>\n<h3 id=\"4-5-obrabotka-i-preobrazovanie-dannyh-formirovanie-xlsx-dokumenta\">4-5. \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445. \u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 xlsx \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430<\/h3>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f xlsx \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0432\u0435\u043b\u043e\u0441\u044c \u043a \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u043f\u043e 3 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u0434\u043d\u044f\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c\u0443 \u043c\u0435\u0441\u044f\u0446\u0443 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0441 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 &#171;\u0433\u043e\u0440\u0438\u0437\u043e\u043d\u0442\u0430\u043b\u044c\u043d\u044b\u0439&#187; \u0444\u043e\u0440\u043c\u0430\u0442, \u0447\u0442\u043e\u0431\u044b \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f \u043e\u0448\u0438\u0431\u043e\u043a \u0431\u044b\u043b \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f (\u0447\u0442\u043e\u0431\u044b 2 \u0440\u0430\u0437\u0430 \u043d\u0435 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0448\u0430\u0433\u0438)<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">myErrorStats &lt;- function(data, period, orderColname = quo(Soft_Media_Error)) {   data %&gt;%      filter(Date &gt; period) %&gt;%     group_by(cl, Storage, Disk, Error) %&gt;%      summarise(count = n()) %&gt;%      spread(Error, count, fill = 0) %&gt;%     arrange(desc(!!orderColname)) }<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0438\u043f\u043e\u0432 \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0431\u044b\u043b\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>spread<\/strong> \u0441 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c <strong>fill = 0<\/strong>, \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u044b <strong>0<\/strong>. \u0411\u0435\u0437 \u044d\u0442\u043e\u0433\u043e \u043a\u043b\u044e\u0447\u0430, \u0435\u0441\u043b\u0438 \u0431\u044b \u0432 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0434\u0435\u043d\u044c \u043d\u0435 \u0431\u044b\u043b\u043e \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0442\u0438\u043f\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u2014 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0431\u044b\u043b\u0438 \u0431\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f <strong>NA<\/strong>. <\/p>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0442\u044c \u0438\u043c\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0434\u043b\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u043c\u0435\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u0432\u043e\u0435\u0431\u0440\u0430\u0437\u043d\u044b\u0439 \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441 <strong>dplyr<\/strong>, \u043f\u0440\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/dplyr.tidyverse.org\/articles\/programming.html\">\u0442\u0443\u0442<\/a>. <\/p>\n<p>  <\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043f\u0440\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u043e\u0434\u043d\u043e\u043c\u0443 \u0438\u0437 \u043d\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438 <em>\u043a\u0432\u043e\u0442\u0438\u0440\u0443\u0435\u043c<\/em> \u0435\u0433\u043e (<strong>orderColname = quo(Soft_Media_Error)<\/strong>), \u0430 \u0437\u0430\u0442\u0435\u043c, \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435, \u0441\u0442\u0430\u0432\u0438\u043c \u043f\u0435\u0440\u0435\u0434 \u043d\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u044b <strong>!!<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c <strong>arrange(desc(!!orderColname))<\/strong>. <\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441 \u043e\u0448\u0438\u0431\u043a\u0430\u043c\u0438 \u0437\u0430 \u043c\u0435\u0441\u044f\u0446<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">&gt; errorsBigPeriod # A tibble: 77 x 7    cl    Storage Disk  Hard_SCSI_Bus_E~ Recommend_Disk_~ Soft_Media_Error    &lt;chr&gt; &lt;chr&gt;   &lt;chr&gt;            &lt;dbl&gt;            &lt;dbl&gt;            &lt;dbl&gt;  1 XclN~ XStora~ 1_1_~                0                1               64  2 XclN~ XStora~ 0_2_5                0                0               29  3 XclN~ XStora~ 1_1_~                0                1               29  4 XclN~ XStora~ 0_3_2                0                0               27  5 XclN~ XStora~ 0_3_~                1                0               25  6 XclN~ XStora~ 1_3_5                0                1               23  7 XclN~ XStora~ 0_2_9                0                0               21  8 XclN~ XStora~ 0_3_4                0                0               14  9 XclN~ XStora~ 0_1_~                0                0               14 10 XclN~ XStora~ 1_0_1                0                0               12 # ... with 67 more rows, and 1 more variable: Soft_SCSI_Bus_Error &lt;dbl&gt;<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 xlsx \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 \u044f \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b \u0432 <a href=\"https:\/\/habr.com\/ru\/post\/454400\/\">\u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e \u043e\u0442\u0447\u0451\u0442\u0430\u043c \u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 \u0412\u041c<\/a>, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u043d\u0435 \u0431\u0443\u0434\u0443. \u0412\u0435\u0441\u044c \u043a\u043e\u0434 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u0432 \u043a\u043e\u043d\u0446\u0435 \u0441\u0442\u0430\u0442\u044c\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/td\/7v\/vx\/td7vvxmj5guiwtxhjyxif4cany8.jpeg\"><\/p>\n<p>  <\/p>\n<p>\u0422\u0443\u0442 \u0432\u0430\u0436\u043d\u044b\u0435 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0432\u044b\u0448\u0430\u044e\u0442 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0441\u0442\u044c \u043e\u0442\u0447\u0451\u0442\u0430:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u043a\u043b\u0430\u0434\u043a\u0438 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u0440\u044b\u0442\u0430 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u0430\u044f);<\/li>\n<li>\u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u0435\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043e\u043a;<\/li>\n<li>\u0430\u0432\u0442\u043e\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043a\u043e\u043b\u043e\u043d\u043e\u043a, \u0447\u0442\u043e\u0431\u044b \u0432\u0435\u0441\u044c \u0442\u0435\u043a\u0441\u0442 \u0431\u044b\u043b \u0447\u0438\u0442\u0430\u0435\u043c \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0434\u0432\u0438\u0433\u0430\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0438.<\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"6-formiruem-grafik-kotoryy-sohranyaem-v-png\">6. \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0432 png<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u043f\u043e \u0432\u0441\u0435\u043c \u0421\u0425\u0414 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0434\u0435\u043d\u044c \u0441 \u0440\u0430\u0437\u0431\u0438\u0432\u043a\u043e\u0439 \u043f\u043e \u0442\u0438\u043f\u0430\u043c. \u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u044b\u043b\u043e \u0440\u0435\u0448\u0435\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 <a href=\"https:\/\/ggplot2.tidyverse.org\/\">ggplot2<\/a>.<\/p>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 \u043e\u0434\u043d\u043e\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u0438 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u043b \u0432\u043e\u0442 \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/7t\/jc\/aj\/7tjcajacotjzcoo3y0j9oc2od80.png\"><\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u043b\u043b\u0435\u0433\u0438 \u0441\u043a\u0430\u0437\u0430\u043b\u0438, \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0435\u0447\u0438\u0442\u0430\u0435\u043c\u043e.<br \/>  <del>\u0427\u0442\u043e \u0431\u044b \u043e\u043d\u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u043b\u0438?!!!!<\/del><br \/>  \u0417\u0430\u043c\u0435\u0447\u0430\u043d\u0438\u044f \u0431\u044b\u043b\u0438 \u0443\u0447\u0442\u0435\u043d\u044b \u0438 \u043a \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u043c \u0441\u0442\u043e\u043b\u0431\u0438\u043a\u0430\u043c (<strong>geom_bar<\/strong>) \u0431\u044b\u043b\u0430 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u044f <strong>facet_grid<\/strong> \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430 \u043d\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u043e\u0448\u0438\u0431\u043e\u043a.<br \/>  \u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u0441\u0435\u0445 \u0443\u0441\u0442\u0440\u043e\u0438\u043b.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/l1\/vc\/v5\/l1vcv5950ji9iymrlyrij0uds3w.png\" alt=\"\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\"><\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445, \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u0430, \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0432 \u0444\u0430\u0439\u043b<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#### \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 #### # \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u043f\u043e \u0434\u043d\u044f\u043c errorsTotal &lt;- errors_df %&gt;%   group_by(Date, Error) %&gt;%   summarise(count = n()) %&gt;%   # spread(Error, count, fill = 0) %&gt;%   arrange(desc(Date))  # \u0420\u0438\u0441\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043f\u043e \u0434\u043d\u044f\u043c \u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c. # \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u043c \u0432 \u0432\u0438\u0434\u0435 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0430, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u044b\u043b. plot &lt;-   errorsTotal %&gt;% ggplot(aes(x = Date, y = count, fill = Error)) +   geom_bar(stat = \"identity\",            width = 0.5,            color = \"grey\") +   theme_minimal() +   # theme(legend.position=\"top\") +   scale_color_grey() +   labs(title = \"\u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 EMC VNX\",        subtitle = \"\u0421\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043f\u043e \u0434\u0438\u0441\u043a\u0430\u043c \u0432 \u0434\u0435\u043d\u044c\",        fill = \"\u0422\u0438\u043f \u043e\u0448\u0438\u0431\u043a\u0438\") +   xlab(\"\u0414\u0430\u0442\u0430\") +   ylab(\"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0434\u0435\u043d\u044c\") +   scale_fill_brewer(palette = \"Spectral\") +   facet_grid(rows = vars(factor(     Error,     levels = c(       \"Soft_SCSI_Bus_Error\",       \"Soft_Media_Error\",       \"Hard_SCSI_Bus_Error\",       \"Recommend_Disk_Replacement\"     )   )))  # # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a # plot  # \u041f\u0443\u0442\u044c \u043a png, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a plot_filePath &lt;- file.path(\"results\", \"plot.png\")  # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0432 png \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 \u043f\u043e\u0447\u0442\u0443 ggsave(filename = plot_filePath, plot = plot)<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<p>\u0418\u0437 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0433\u043e \u0432 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0438\u043a\u0430.<\/p>\n<p>  <\/p>\n<p>\u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c, \u0447\u0442\u043e\u0431\u044b \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0431\u044b\u043b\u0438 \u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u044f\u0434\u043e\u0432 \u0432 <strong>facet_grid<\/strong> \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u0432 \u0432\u0438\u0434\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u0430 (<strong>factor<\/strong>), \u0430 \u0442\u043e\u0447\u043d\u0435\u0435 \u0434\u0430\u0436\u0435 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0430 (<strong>ordered factor<\/strong>). Factor \u2014 \u044d\u0442\u043e \u0442\u0430\u043a\u043e\u0439 \u0445\u0438\u0442\u0440\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 R, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u0437 \u0441\u0435\u0431\u044f \u043d\u0430\u0431\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0440\u043e\u043a, \u0442.\u0435. <strong>character<\/strong>-\u043e\u0432), \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0430\u0431\u043e\u0440 \u044d\u0442\u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0441\u0442\u0440\u043e\u0433\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0443\u0440\u043e\u0432\u043d\u044f\u043c\u0438 \u0444\u0430\u043a\u0442\u043e\u0440\u0430), \u0434\u0430 \u0435\u0449\u0451 \u044d\u0442\u0438 \u0443\u0440\u043e\u0432\u043d\u0438 \u0438 \u043e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0417\u0432\u0443\u0447\u0438\u0442 \u0441\u043b\u043e\u0436\u043d\u043e, \u043d\u043e \u0432\u0441\u0451 \u0432\u0441\u0442\u0430\u0451\u0442 \u043d\u0430 \u0441\u0432\u043e\u0438 \u043c\u0435\u0441\u0442\u0430, \u0435\u0441\u043b\u0438 \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0441\u044f\u0446\u0435\u0432 \u2014 \u044d\u0442\u043e \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u043a\u0442\u043e\u0440\u0430. \u0422.\u0435. \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a\u0438\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443 \u043c\u0435\u0441\u044f\u0446\u0435\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u043d\u0430\u0435\u043c (\u043d\u0443 \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c), \u0447\u0442\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u0434\u0451\u0442 \u042f\u043d\u0432\u0430\u0440\u044c, \u043f\u043e\u0442\u043e\u043c \u0424\u0435\u0432\u0440\u0430\u043b\u044c, \u043f\u043e\u0442\u043e\u043c \u041c\u0430\u0440\u0442 \u0438 \u0442.\u0434. \u0412\u043e\u0442 \u043f\u043e \u044d\u0442\u043e\u043c\u0443 \u0436\u0435 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0443 \u043c\u044b \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0444\u0430\u043a\u0442\u043e\u0440.<\/p>\n<p>  <\/p>\n<h3 id=\"7-8-formiruem-pismo-soderzhaschee-sobrannye-dannye-otpravlyaem-pismo\">7-8. \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043f\u0438\u0441\u044c\u043c\u043e, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0435 \u0441\u043e\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u043f\u0438\u0441\u044c\u043c\u043e<\/h3>\n<p>  <\/p>\n<p>\u0424\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0438 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u0438\u0441\u044c\u043c\u0430, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0432 <strong>Windows scheduller<\/strong> \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b\u0430 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0430 \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u043e <a href=\"https:\/\/habr.com\/ru\/post\/454400\/\">\u043e\u0442\u0447\u0451\u0442\u0430\u043c \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0412\u041c<\/a>. \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u043d\u043e\u0441\u0438\u043c \u0432 \u0442\u0435\u043a\u0441\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0438 \u0431\u043e\u043b\u0435\u0435-\u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043d\u044f\u0442\u043d\u043e \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c. \u041d\u0435 \u0437\u0430\u0431\u044b\u0432\u0430\u0435\u043c \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0418\u0442\u043e\u0433\u043e\u0432\u044b\u0439 \u0432\u0438\u0434 \u043f\u0438\u0441\u044c\u043c\u0430<\/b><\/p>\n<div class=\"spoiler_text\">\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/w6\/rg\/fi\/w6rgfilewjuf24olnavadpu6zhm.jpeg\"><\/p>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"vyvody\">\u0412\u044b\u0432\u043e\u0434\u044b<\/h2>\n<p>  <\/p>\n<p><strong>R<\/strong> \u0432 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0440\u0430\u0437 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0441\u0435\u0431\u044f, \u043a\u0430\u043a \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0441\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432. \u0410 \u0441 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\u043c \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0435\u0449\u0451 \u0438 \u0431\u044b\u0441\u0442\u0440\u044b\u043c.<br \/>  \u0422\u0430\u043a\u0436\u0435 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0430, \u0447\u0442\u043e <strong>PowerShell<\/strong> \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u0441\u0435\u0431\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u043d\u0430 \u0437\u0430\u0434\u0430\u0447\u0430\u0445 \u043f\u043e \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0443 \u043b\u043e\u0433\u043e\u0432 \u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0443 \u0438\u0445 \u0432 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442.<br \/>  \u0411\u043e\u043b\u044c\u0448\u043e\u0435 \u0441\u043f\u0430\u0441\u0438\u0431\u043e \u0432\u0441\u0435\u043c, \u043a\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b \u0434\u043e \u043a\u043e\u043d\u0446\u0430 \u0441\u0442\u043e\u043b\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0431\u0443\u043a\u0432.<\/p>\n<p>  <\/p>\n<h4 id=\"polnostyu-kod-prilozheniya\">\u041f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f<\/h4>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 R<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">#### ENV #### # \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043b\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0438\u0437 \u043f\u043e\u0434 \u0448\u0435\u0434\u0443\u043b\u043b\u0435\u0440\u0430 (\u043e\u043d \u0441\u0447\u0438\u0442\u0430\u0435\u0442 \u0434\u043e\u043c\u0430\u0448\u043d\u0435\u0439 \u0434\u0438\u0440\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0435\u0439 system32) setwd(\"C:\\\\Scripts\\\\VNX_disks_check\/\")  # \u041f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 library(tidyverse) library(lubridate) library(zoo) library(stringi) library(xlsx) library(mailR) library(foreach) library(doParallel)  #### CONST ####  # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043f\u0443\u0442\u0438 \u043a \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u043c \u0444\u0430\u0439\u043b\u0430\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u0435 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 vnxIPfilePath &lt;- file.path(\"data\", \"VNX-IP.csv\")  # \u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c bigPeriod &lt;- Sys.Date() - 30  # \u041c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c smallPeriod &lt;- Sys.Date() - 3  # \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u044b\u0445 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 productCls &lt;- c(\"name1\", \"name2\", \"name3\")  # \u0424\u0430\u0439\u043b \u0441 IP VNX.  # \u0424\u0438\u043b\u044c\u0442\u0440\u0443\u0435\u043c \u043f\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u043c \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430\u043c \u0438 \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u0443\u0435\u043c \u0435\u0433\u043e,  # \u0447\u0442\u043e\u0431\u044b \u0432\u0441\u0435 ip \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 \u0410 \u0438 \u0412 \u0431\u044b\u043b\u0438 \u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435. VNX_ip &lt;- vnxIPfilePath %&gt;% read_csv2(   col_types = cols(     Name = col_character(),     IP = col_character(),     cl = col_character(),     type = col_character(),     newA = col_character(),     newB = col_character(),     oldA = col_character(),     oldB = col_character()   ) ) %&gt;%   filter(cl %in% productCls) %&gt;%   gather(key = \"cntName\",           value = \"cntIP\",           5:6)  #### \u0417\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u0441 VNX #### # \u0412 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u0432\u044b\u0437\u043e\u0432 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0432\u043e\u0442 \u0442\u0430\u043a (\u0434\u0430 \u043f\u0430\u0440\u043e\u043b\u044c \u0432 \u0442\u0435\u043a\u0441\u0442\u0435 \u0432 \u043e\u043a\u0440\u044b\u0442\u043e\u043c \u0432\u0438\u0434\u0435) # NaviSECCli.exe -scope 0 -h 10.201.16.15 -user root -password Secrt4yo getlog -date 07\/16\/2019 07\/17\/2019  # \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0441\u043f\u0438\u0441\u043e\u043a \u043e\u0448\u0438\u0431\u043e\u043a, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0445\u043e\u0442\u0438\u043c \u0432\u044b\u0446\u0435\u043f\u0438\u0442\u044c.  # \u0421\u0440\u0430\u0437\u0443 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0441\u043a\u043e\u0431\u043a\u0438 \u0438 \u044d\u043a\u0440\u0430\u043d\u0438\u0440\u0443\u0435\u043c \u0438\u0445, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043a\u0430\u0445 errorNumbers &lt;- c(\"\\\\(820\\\\)\", \"\\\\(803\\\\)\", \"\\\\(801\\\\)\", \"\\\\(920\\\\)\", \"\\\\(901\\\\)\")  ## \u041f\u0440\u043e\u0431\u0443\u0435\u043c \u0437\u0430\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u044c ## # \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u044f\u0434\u0435\u0440 \u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u0438\u0445 \u0434\u043b\u044f \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u0438\u0437\u043c\u0430 numCores &lt;- detectCores() registerDoParallel(numCores)  # \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0434\u0430\u0442\u044b \u0432 \u0444\u043e\u0440\u043c\u0430\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u043d\u0438\u043c\u0430\u0435\u0442 NaviCLI # \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c 1 \u0434\u0435\u043d\u044c \u043a \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0434\u0430\u0442\u0435, \u0447\u0442\u043e\u0431\u044b \u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0430\u0432\u0430\u0440\u0438\u0438 \u043f\u043e \"\u0437\u0430\u0432\u0442\u0440\u0430\u0448\u043d\u0438\u0439\" \u0434\u0435\u043d\u044c,  # \u0442.\u0435. \u043f\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u0430 \u043d\u0435 \u043d\u0430 \u043f\u043e\u043b\u043d\u043e\u0447\u044c \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u0435\u043d\u043e\u0433\u043e \u0434\u043d\u044f, \u043a\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u0431\u0435\u0437 \u044d\u0442\u043e\u0439 \u0445\u0438\u0442\u0440\u043e\u0441\u0442\u0438. bigPeriodForm &lt;- bigPeriod %&gt;% format(format = \"%m\/%d\/%Y\") currDateForm &lt;- (Sys.Date() + 1) %&gt;% format(format = \"%m\/%d\/%Y\")  # \u0417\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c \u043d\u0430\u0448 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441. # \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u0438\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 VNX \u043c\u044b \u0432\u044b\u0434\u0451\u0440\u0433\u0438\u0432\u0430\u0435\u043c ip \u0438 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u043c \u0435\u0433\u043e. # \u0415\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043e\u043a \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0435\u0442, \u0442\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u043c # \u0415\u0441\u043b\u0438 \u043e\u0448\u0438\u0431\u043a\u0438 \u0435\u0441\u0442\u044c, \u0442\u043e \u043f\u0440\u043e\u0434\u0435\u043b\u044b\u0432\u0430\u0435\u043c \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043f\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e dataframe # \u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f %dopar% \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0438\u0434\u0443\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u043e.  # \u041c\u043e\u0436\u043d\u043e \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f \u0432 \u044d\u0442\u043e\u043c, \u0440\u0430\u0441\u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0438\u0432 \u0432\u044b\u0437\u043e\u0432 system.time \u0438 \u0437\u0430\u043c\u0435\u0440\u0438\u0442\u044c \u0442\u0430\u043a,  # \u0430 \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c %dopar% \u043d\u0430 %do%. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u0430 \u0432 4-5. # system.time({ errors_df &lt;- foreach(i = 1:nrow(VNX_ip),                      .combine = rbind,                      .packages = \"tidyverse\") %dopar% {                        errors_raw &lt;- system(                          paste(                            \"NaviSECCli.exe -scope 0 -h\",                            VNX_ip$cntIP[i],                            \"-user myusername -password mypassword getlog -date\",                            bigPeriodForm,                            currDateForm                          ),                          intern = TRUE                        ) %&gt;%                          str_subset(pattern = regex(paste0(errorNumbers, collapse = \"|\")))                          # \u0415\u0441\u043b\u0438 \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u0438\u0441\u043a\u043e\u043c\u044b\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0435\u0442, \u0442\u043e \u0438 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043c\u0430\u043d\u0438\u043f\u0443\u043b\u044f\u0446\u0438\u0438 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b                        if (length(errors_raw) &gt; 0) {                           # \u0412\u044b\u0440\u0435\u0437\u0430\u0435\u043c \u0442\u0435\u043a\u0441\u0442 \u043f\u043e \u0441\u043a\u043e\u0431\u043a\u0435 \u043a\u0440\u0443\u0433\u043b\u043e\u0439 \u0438 \u043a\u0432\u0430\u0434\u0440\u0430\u0442\u043d\u043e\u0439,                           # \u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043a\u0443\u0447\u0443 \u043f\u0440\u043e\u0431\u0435\u043b\u043e\u0432 \u0432 \u043a\u043e\u043d\u0446\u0435,                           # \u043c\u0435\u043d\u044f\u0435\u043c \u043f\u0440\u043e\u0431\u0435\u043b\u044b \u043c\u0435\u0436\u0434\u0443 \u0441\u043b\u043e\u0432\u0430\u043c\u0438 \u043d\u0430 \u043d\u0438\u0436\u043d\u0438\u0435 \u043f\u043e\u0434\u0447\u0451\u0440\u043a\u0438\u0432\u0430\u043d\u0438\u044f.                          errorsDescr &lt;- errors_raw %&gt;%                            gsub(\"(.*\\\\) )(.*)(\\\\s+\\\\[.*)\",                                 \"\\\\2\",                                 x = .) %&gt;%                            trimws() %&gt;%                            gsub('([[:punct:]])|\\\\s+',                                 '_',                                 .)                           # \u041f\u0435\u0440\u0435\u0432\u043e\u0434\u0438\u043c \u0442\u0435\u043a\u0441\u0442 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0438 \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0438\u0437 \u043d\u0435\u0451 \u0438\u043c\u0435\u043d\u0430 \u0434\u0438\u0441\u043a\u043e\u0432                          errors &lt;- errors_raw %&gt;%                            str_split(pattern = \"\\\\s+\", simplify = T) %&gt;%                            as_tibble() %&gt;%                            mutate(Disk = paste0(V4, \"_\", V6, \"_\", V8) %&gt;%                                     gsub(                                       pattern = \"\\\\([0-9]{3}\\\\)\",                                       replacement = \"\",                                       x = .)                            )                           # \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c dataframe \u0441 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u043c\u0438 \u043f\u043e\u043b\u044f\u043c\u0438                          data_frame(cl = VNX_ip$cl[i],                                     Storage = VNX_ip$Name[i],                                     Date = errors$V1 %&gt;% as.Date(format = \"%m\/%d\/%Y\"),                                     Time = errors$V2,                                     Disk = errors$Disk,                                     Error = errorsDescr,                                      eCode = errors$V8 %&gt;%                                        str_extract(paste0(errorNumbers, collapse = \"|\")) %&gt;%                                        str_extract(\"[0-9]+\")) %&gt;%                            mutate(DateTime = as.POSIXct(paste(Date, Time), format =                                                           \"%Y-%m-%d %H:%M:%S\"))                         }                      } # })  # \u041e\u0447\u0438\u0449\u0430\u0435\u043c \u043e\u0442 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u043f\u0430\u0440\u0430\u043b\u0435\u043b\u0438\u0437\u043c\u0430. \u041d\u0435 \u0443\u0432\u0435\u0440\u0435\u043d \u0432 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043d\u043e \u0432 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445 \u0442\u0430\u043a. stopImplicitCluster()  #### \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 ####  # \u0424\u0443\u043d\u043a\u0446\u0438\u044f \u043f\u043e \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0442\u0430\u0431\u043b\u0438\u0446. \u0425\u0438\u0442\u0440\u044b\u0435 \u0444\u043e\u0440\u043c\u044b \u0437\u0430\u043f\u0438\u0441\u0438 \u043d\u0443\u0436\u043d\u044b, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443. \u041d\u0438\u0436\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. # https:\/\/dplyr.tidyverse.org\/articles\/programming.html myErrorStats &lt;- function(data, period, orderColname = quo(Soft_Media_Error)) {   data %&gt;%      filter(Date &gt; period) %&gt;%     group_by(cl, Storage, Disk, Error) %&gt;%      summarise(count = n()) %&gt;%      spread(Error, count, fill = 0) %&gt;%     arrange(desc(!!orderColname)) }  # \u0421\u0442\u0440\u043e\u0438\u043c \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0438 \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u044e. errorsBigPeriod &lt;- errors_df %&gt;%    myErrorStats(bigPeriod)  # \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u0441\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u0437\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0439 \u043f\u0435\u0440\u0438\u043e\u0434 \u0438 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0432\u0430\u0435\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c errorsSmallPeriod &lt;- errors_df %&gt;%    myErrorStats(smallPeriod)  # \u041f\u0443\u0442\u044c \u043a \u0444\u0430\u0439\u043b\u0443, \u043a\u0443\u0434\u0430 \u0445\u043e\u0442\u0438\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b errors_filePath &lt;- file.path(\"results\", \"VNX_Errors.xlsx\")  #### \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 xlsx \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430 #### # \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u0443\u044e \u043a\u043d\u0438\u0433\u0443 wb&lt;-createWorkbook(type=\"xlsx\")  # \u0421\u0442\u0438\u043b\u0438 \u0434\u043b\u044f \u0438\u043c\u0435\u043d\u043e\u0432 \u0440\u044f\u0434\u043e\u0432 \u0438 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0430\u0445 TABLE_ROWNAMES_STYLE &lt;- CellStyle(wb) + Font(wb, isBold=TRUE) TABLE_COLNAMES_STYLE &lt;- CellStyle(wb) + Font(wb, isBold=TRUE) +   Alignment(wrapText=TRUE, horizontal=\"ALIGN_CENTER\") +   Border(color=\"black\", position=c(\"TOP\", \"BOTTOM\"),           pen=c(\"BORDER_THIN\", \"BORDER_THICK\"))  # \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043d\u043e\u0432\u044bt \u043b\u0438\u0441\u0442s sheetSmall &lt;- createSheet(wb, sheetName = \"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 3 \u0434\u043d\u044f\") sheetBig &lt;- createSheet(wb, sheetName = \"\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043c\u0435\u0441\u044f\u0446\") sheetRaw &lt;- createSheet(wb, sheetName = \"\u0421\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435\")  ## \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u0442\u0430\u0431\u043b\u0438\u0446\u044b addDataFrame(   errorsSmallPeriod %&gt;% as.data.frame(),   sheetSmall,   startRow = 1,   startColumn = 1,   row.names = FALSE,   byrow = FALSE,   colnamesStyle = TABLE_COLNAMES_STYLE,   rownamesStyle = TABLE_ROWNAMES_STYLE )  addDataFrame(   errorsBigPeriod %&gt;% as.data.frame(),   sheetBig,   startRow = 1,   startColumn = 1,   row.names = FALSE,   byrow = FALSE,   colnamesStyle = TABLE_COLNAMES_STYLE,   rownamesStyle = TABLE_ROWNAMES_STYLE )  # \u0412 \u0441\u044b\u0440\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u043c \u0438\u0437 \u0434\u0432\u0443\u0445 \u043a\u043e\u043b\u043e\u043d\u043e\u043a \u043a\u043e\u043b\u043e\u043d\u043a\u0443 DateTime \u0438 \u0441\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u043c \u043f\u043e \u043d\u0435\u0439 addDataFrame(   errors_df %&gt;%     as.data.frame() %&gt;%     arrange(desc(DateTime)),   sheetRaw,   startRow = 1,   startColumn = 1,   row.names = FALSE,   byrow = FALSE,   colnamesStyle = TABLE_COLNAMES_STYLE,   rownamesStyle = TABLE_ROWNAMES_STYLE )  # \u041c\u0435\u043d\u044f\u0435\u043c \u0448\u0438\u0440\u0438\u043d\u0443, \u0447\u0442\u043e\u0431\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c autoSizeColumn(sheet = sheetSmall, colIndex=c(1:ncol(errorsSmallPeriod))) autoSizeColumn(sheet = sheetBig, colIndex=c(1:ncol(errorsBigPeriod))) autoSizeColumn(sheet = sheetRaw, colIndex=c(1:ncol(errors_df)))  # \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0435\u0441\u0442\u044c \u043b\u0438 \u0442\u0430\u043a\u043e\u0439 \u0444\u0430\u0439\u043b. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c - \u0443\u0434\u0430\u043b\u044f\u0435\u043c. if (file.exists(errors_filePath)) {file.remove(errors_filePath)}  # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c xlsx \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 saveWorkbook(wb, errors_filePath)  #### \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 #### # \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c \u043f\u043e \u0434\u043d\u044f\u043c errorsTotal &lt;- errors_df %&gt;%   group_by(Date, Error) %&gt;%   summarise(count = n()) %&gt;%   # spread(Error, count, fill = 0) %&gt;%   arrange(desc(Date))  # \u0420\u0438\u0441\u0443\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u043f\u043e \u0434\u043d\u044f\u043c \u0438 \u043f\u043e \u0442\u0438\u043f\u0430\u043c plot &lt;-   errorsTotal %&gt;% ggplot(aes(x = Date, y = count, fill = Error)) +   geom_bar(stat = \"identity\",            width = 0.5,            color = \"grey\") +   theme_minimal() +   # theme(legend.position=\"top\") +   scale_color_grey() +   labs(title = \"\u041e\u0448\u0438\u0431\u043a\u0438 \u043d\u0430 EMC VNX\",        subtitle = \"\u0421\u0443\u043c\u043c\u0430\u0440\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 \u043f\u043e \u0434\u0438\u0441\u043a\u0430\u043c \u0432 \u0434\u0435\u043d\u044c\",        fill = \"\u0422\u0438\u043f \u043e\u0448\u0438\u0431\u043a\u0438\") +   xlab(\"\u0414\u0430\u0442\u0430\") +   ylab(\"\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043e\u0448\u0438\u0431\u043e\u043a \u0432 \u0434\u0435\u043d\u044c\") +   scale_fill_brewer(palette = \"Spectral\") +   facet_grid(rows = vars(factor(     Error,     levels = c(       \"Soft_SCSI_Bus_Error\",       \"Soft_Media_Error\",       \"Hard_SCSI_Bus_Error\",       \"Recommend_Disk_Replacement\"     )   )))  # # \u0412\u044b\u0432\u043e\u0434\u0438\u043c \u0433\u0440\u0430\u0444\u0438\u043a # plot  # \u041f\u0443\u0442\u044c \u043a png, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a plot_filePath &lt;- file.path(\"results\", \"plot.png\")  # \u0421\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u043c \u0433\u0440\u0430\u0444\u0438\u043a \u0432 png \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0432 \u043f\u043e\u0447\u0442\u0443 ggsave(filename = plot_filePath, plot = plot)  #### \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0435 \u043f\u0438\u0441\u044c\u043c\u043e ####  # \u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u0435\u0439 \u043f\u043e\u0447\u0442\u044b emailRecepientsList &lt;- c(\"sendall-tech@domain.ru\")  # \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u0439 \u043f\u043e\u0447\u0442\u044b emailParams &lt;- list(   from = \"login@domain.ru\",   to = emailRecepientsList,   smtpParams = list(     host.name = \"10.10.10.1\",     port = 25,     user.name = \"login@domain.ru\",     passwd = \"mypassword\",     ssl = FALSE   ) )  # \u0421\u0443\u043c\u043c\u0430 \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u0441\u0435\u0445 \u0442\u0438\u043f\u043e\u0432 (\u0443\u0431\u0438\u0440\u0430\u0435\u043c \u043b\u0438\u0448\u043d\u0438\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c).  # \u0414\u0435\u043b\u0430\u0435\u043c \u0447\u0435\u0440\u0435\u0437 \u0432\u044b\u0447\u0438\u0442\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0432\u044b\u0445 \u0441\u0442\u0440\u043e\u043a, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432 \u043e\u0448\u0438\u0431\u043e\u043a \u043a\u0430\u043a\u043e\u0433\u043e \u0442\u043e \u0442\u0438\u043f\u0430 \u043c\u043e\u0436\u0435\u0442 \u043d\u0435 \u0431\u044b\u0442\u044c, \u0430 \u043c\u043d\u0435 \u043b\u0435\u043d\u044c \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f. errorsTotal &lt;- errorsSmallPeriod[-c(1,2,3)] %&gt;% sum()  # \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0442\u0435\u043b\u043e \u043f\u0438\u0441\u044c\u043c\u0430 emailBody &lt;- paste0(   '&lt;html&gt;                     &lt;h3&gt;\u0414\u043e\u0431\u0440\u044b\u0439 \u0434\u0435\u043d\u044c, \u0443\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u0433\u0438.&lt;\/h3&gt;                     &lt;p&gt;\u0417\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 3 \u0434\u043d\u044f \u0431\u044b\u043b\u043e \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043e &lt;strong&gt;', errorsTotal, '&lt;\/strong&gt; \u043e\u0448\u0438\u0431\u043e\u043a \u043d\u0430 \u0434\u0438\u0441\u043a\u0430\u0445 EMC VNX&lt;\/p&gt;                     &lt;p&gt;\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435 \u043d\u0438\u0436\u0435, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0432\u043e \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0438.&lt;\/p&gt;                     &lt;p&gt;\u0424\u0430\u0439\u043b \u0438\u043c\u0435\u0435\u0442 3 \u0432\u043a\u043b\u0430\u0434\u043a\u0438:                     &lt;ul&gt;                       &lt;li&gt;\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 3 \u0434\u043d\u044f. \u041e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u043e &lt;strong&gt;Soft_Media_Error&lt;\/strong&gt;.&lt;\/li&gt;                       &lt;li&gt;\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430 30 \u0434\u043d\u0435\u0439. \u041e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u043e &lt;strong&gt;Soft_Media_Error&lt;\/strong&gt;.&lt;\/li&gt;                       &lt;li&gt;\u0421\u044b\u0440\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u041e\u0442\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u043f\u043e &lt;strong&gt;\u0414\u0430\u0442\u0435&lt;\/strong&gt;.&lt;\/li&gt;                     &lt;\/ul&gt;                     \u041d\u0430 \u0434\u0438\u0441\u043a\u0430\u0445 \u0441 \u0431\u043e\u043b\u044c\u0448\u0438\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u0448\u0438\u0431\u043e\u043a \u0432\u0435\u043b\u0438\u043a\u0430 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u043a\u043e\u0440\u043e\u0433\u043e \u043e\u0442\u043a\u0430\u0437\u0430. \u0418\u0445 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c.&lt;\/p&gt;                     &lt;p&gt;&lt;img src=\"', plot_filePath, '\"&gt;&lt;\/p&gt;                     &lt;\/html&gt;' )  #### \u0424\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u043f\u0438\u0441\u044c\u043c\u043e \u0441 \u043f\u043b\u043e\u0445\u043e\u043f\u043e\u0434\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c\u0438 \u043c\u0430\u0448\u0438\u043d\u0430\u043c\u0438 #### send.mail(from = emailParams$from,           to = emailParams$to,           subject = \"\u0421\u0432\u043e\u0434\u043a\u0430 \u043f\u043e \u043e\u0448\u0438\u0431\u043a\u0430\u043c \u043d\u0430 \u0434\u0438\u0441\u043a\u0430\u0445 EMC VNX\",           body = emailBody,           encoding = \"utf-8\",           html = TRUE,           inline = TRUE,           smtp = emailParams$smtpParams,           authenticate = TRUE,           send = TRUE,           attach.files = c(errors_filePath),           debug = FALSE)<\/code><\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2 id=\"parametry-okruzheniya-i-versii-ispolzuemogo-po\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0438 \u0432\u0435\u0440\u0441\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0433\u043e \u041f\u041e<\/h2>\n<p>  <\/p>\n<ul>\n<li><strong>\u041c\u043e\u0434\u0435\u043b\u0438 \u0421\u0425\u0414<\/strong>: EMC VNX 5300<\/li>\n<li><strong>\u0412\u0435\u0440\u0441\u0438\u044f \u041f\u041e \u0434\u043b\u044f \u043e\u043f\u0440\u043e\u0441\u0430 \u0421\u0425\u0414<\/strong>: NaviCLI-Win-32-x86-en_US-7.31.25.1.29-1<\/li>\n<li><strong>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0432\u0438\u0440\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u0440\u0438\u043f\u0442<\/strong>: 4*2 CPU, 8 Gb RAM<\/li>\n<\/ul>\n<p>  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u044f R<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"python\">&gt; sessionInfo() R version 3.5.3 (2019-03-11) Platform: x86_64-w64-mingw32\/x64 (64-bit) Running under: Windows Server 2012 R2 x64 (build 9600)  Matrix products: default  locale: [1] LC_COLLATE=Russian_Russia.1251  LC_CTYPE=Russian_Russia.1251    LC_MONETARY=Russian_Russia.1251 [4] LC_NUMERIC=C                    LC_TIME=Russian_Russia.1251      attached base packages: [1] parallel  stats     graphics  grDevices utils     datasets  methods   base       other attached packages:  [1] taskscheduleR_1.4 pander_0.6.3      doParallel_1.0.14 iterators_1.0.10  foreach_1.4.4     mailR_0.4.1        [7] xlsx_0.6.1        stringi_1.4.3     zoo_1.8-6         lubridate_1.7.4   wesanderson_0.3.6 forcats_0.4.0     [13] stringr_1.4.0     dplyr_0.8.3       purrr_0.3.2       readr_1.3.1       tidyr_0.8.3       tibble_2.1.3      [19] ggplot2_3.2.0     tidyverse_1.2.1    loaded via a namespace (and not attached):  [1] tidyselect_0.2.5   reshape2_1.4.3     rJava_0.9-11       haven_2.1.1        lattice_0.20-38    colorspace_1.4-1    [7] vctrs_0.2.0        generics_0.0.2     utf8_1.1.4         rlang_0.4.0        R.oo_1.22.0        pillar_1.4.2       [13] glue_1.3.1         withr_2.1.2        R.utils_2.9.0      RColorBrewer_1.1-2 modelr_0.1.4       readxl_1.3.1       [19] plyr_1.8.4         munsell_0.5.0      gtable_0.3.0       cellranger_1.1.0   rvest_0.3.4        R.methodsS3_1.7.1  [25] codetools_0.2-16   labeling_0.3       fansi_0.4.0        xlsxjars_0.6.1     broom_0.5.2        Rcpp_1.0.1         [31] scales_1.0.0       backports_1.1.4    jsonlite_1.6       digest_0.6.20      hms_0.5.0          grid_3.5.3         [37] cli_1.1.0          tools_3.5.3        magrittr_1.5       lazyeval_0.2.2     crayon_1.3.4       pkgconfig_2.0.2    [43] zeallot_0.1.0      data.table_1.12.2  xml2_1.2.0         assertthat_0.2.1   httr_1.4.0         rstudioapi_0.10    [49] R6_2.4.0           nlme_3.1-137       compiler_3.5.3<\/code><\/pre>\n<\/div>\n<\/div>\n<\/div>\n<p>               <script class=\"js-mediator-script\">!function(e){function t(t,n){if(!(n in e)){for(var r,a=e.document,i=a.scripts,o=i.length;o--;)if(-1!==i[o].src.indexOf(t)){r=i[o];break}if(!r){r=a.createElement(\"script\"),r.type=\"text\/javascript\",r.async=!0,r.defer=!0,r.src=t,r.charset=\"UTF-8\";var d=function(){var e=a.getElementsByTagName(\"script\")[0];e.parentNode.insertBefore(r,e)};\"[object Opera]\"==e.opera?a.addEventListener?a.addEventListener(\"DOMContentLoaded\",d,!1):e.attachEvent(\"onload\",d):d()}}}t(\"\/\/mediator.mail.ru\/script\/2820404\/\",\"_mediator\")}(window);<\/script>     <br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/461441\/\"> https:\/\/habr.com\/ru\/post\/461441\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html js-mediator-article\">\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u043d \u043a\u043e\u0434 \u043f\u043e \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 \u043f\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044e \u0434\u0438\u0441\u043a\u043e\u0432 \u0421\u0425\u0414 <strong>EMC VNX<\/strong> \u0441 \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u0430\u043c\u0438 \u0438 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0421\u0442\u0430\u0440\u0430\u043b\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434 \u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u044f\u043c\u0438 \u0438 \u043e\u0434\u043d\u0438\u043c \u0444\u0430\u0439\u043b\u043e\u043c. \u0422\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0440\u043e\u043b\u0438 \u0441\u0432\u043e\u0438 \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c. \u0424\u043e\u0440\u043c\u0430\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0442\u0430\u043a\u0436\u0435 \u0443\u043a\u0430\u0437\u0430\u043d, \u0442\u0430\u043a \u0447\u0442\u043e \u0431\u0443\u0434\u0443 \u0440\u0430\u0434, \u0435\u0441\u043b\u0438 \u043a\u0442\u043e-\u0442\u043e \u043f\u043e\u043f\u0440\u043e\u0431\u0443\u0435\u0442 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0443 \u0441\u0435\u0431\u044f.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/41\/jd\/_b\/41jd_bx4gm5lydfdyj9qcj-r0io.png\" alt=\"\u0412\u043d\u0435\u0448\u043d\u0438\u0439 \u0432\u0438\u0434 \u0433\u0440\u0430\u0444\u0438\u043a\u0430\"><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-292716","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/292716","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=292716"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/292716\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=292716"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=292716"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=292716"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}