ื ื™ื˜ื•ืจ ืคืฉื•ื˜ ืฉืœ ืฉื›ืคื•ืœ DFS ื‘- Zabbix

ืžื‘ื•ื

ืขื ืชืฉืชื™ืช ื“ื™ ื’ื“ื•ืœื” ื•ืžื‘ื•ื–ืจืช ื”ืžืฉืชืžืฉืช ื‘-DFS ื›ื ืงื•ื“ืช ื’ื™ืฉื” ืื—ืช ืœื ืชื•ื ื™ื ื•ืœ-DFSR ืœืฉื›ืคื•ืœ ื ืชื•ื ื™ื ื‘ื™ืŸ ืžืจื›ื–ื™ ื ืชื•ื ื™ื ื•ืฉืจืชื™ ืกื ื™ืคื™ื, ืขื•ืœื” ื”ืฉืืœื” ืฉืœ ื ื™ื˜ื•ืจ ืžืฆื‘ ื”ืฉื›ืคื•ืœ ื”ื–ื”.
ื‘ืžืงืจื”, ื›ืžืขื˜ ืžื™ื“ ืœืื—ืจ ืฉื”ืชื—ืœื ื• ืœื”ืฉืชืžืฉ ื‘-DFSR, ื”ืชื—ืœื ื• ืœื™ื™ืฉื ืืช Zabbix ื‘ืžื˜ืจื” ืœื”ื—ืœื™ืฃ ืืช ื’ืŸ ื”ื—ื™ื•ืช ื”ืงื™ื™ื ื‘ื›ืœื™ื ืฉื•ื ื™ื ื•ืœื”ื‘ื™ื ืืช ื ื™ื˜ื•ืจ ื”ืชืฉืชื™ื•ืช ืœืฆื•ืจื” ืื™ื ืคื•ืจืžื˜ื™ื‘ื™ืช, ืžืœืื” ื•ื”ื’ื™ื•ื ื™ืช ื™ื•ืชืจ. ื ื“ื‘ืจ ืขืœ ืฉื™ืžื•ืฉ ื‘- Zabbix ืœื ื™ื˜ื•ืจ ืฉื›ืคื•ืœ DFS.

ืงื•ื“ื ื›ืœ, ืขืœื™ื ื• ืœื”ื—ืœื™ื˜ ืื™ืœื• ื ืชื•ื ื™ื ืขืœ ืฉื›ืคื•ืœ DFS ืฆืจื™ื›ื™ื ืœื”ืชืงื‘ืœ ื›ื“ื™ ืœื ื˜ืจ ืืช ื”ืžืฆื‘ ืฉืœื•. ื”ืื™ื ื“ื™ืงื˜ื•ืจ ื”ืจืœื•ื•ื ื˜ื™ ื‘ื™ื•ืชืจ ื”ื•ื ืคื™ื’ื•ืจ. ื”ื•ื ืžื›ื™ืœ ืงื‘ืฆื™ื ืฉืœื ืกื•ื ื›ืจื ื• ืขื ื—ื‘ืจื™ื ืื—ืจื™ื ื‘ืงื‘ื•ืฆืช ื”ืฉื›ืคื•ืœ. ืืชื” ื™ื›ื•ืœ ืœืจืื•ืช ืืช ื’ื•ื“ืœื• ื‘ืืžืฆืขื•ืช ื›ืœื™ ื”ืฉื™ืจื•ืช dfsrdiag, ืžื•ืชืงืŸ ืขื ื”ืชืคืงื™ื“ DFSR. ื‘ืžืฆื‘ ืฉื›ืคื•ืœ ืจื’ื™ืœ, ื’ื•ื“ืœ ื”ืขื•ืžืก ืฆืจื™ืš ืœื”ืชืงืจื‘ ืœืืคืก. ื‘ื”ืชืื ืœื›ืš, ืžืกืคืจ ืจื‘ ืฉืœ ืงื‘ืฆื™ื ื‘ืฆื‘ืจ ืžืฆื‘ื™ืข ืขืœ ื‘ืขื™ื•ืช ื‘ืฉื›ืคื•ืœ.

ืขื›ืฉื™ื• ืœื’ื‘ื™ ื”ืฆื“ ื”ืžืขืฉื™ ืฉืœ ื”ื ื•ืฉื.

ืขืœ ืžื ืช ืœืขืงื•ื‘ ืื—ืจ ื’ื•ื“ืœ ื”ืขื•ืžืก ื‘ืืžืฆืขื•ืช Zabbix Agent, ื ืฆื˜ืจืš:

  • ืกืงืจื™ืคื˜ ืฉื™ื ืชื— ืืช ื”ืคืœื˜ dfsrdiag ืœืกืคืง ืขืจื›ื™ ื’ื•ื“ืœ ืคื™ื’ื•ืจ ืกื•ืคื™ื™ื ืœ- Zabbix,
  • ืกืงืจื™ืคื˜ ืฉื™ืงื‘ืข ื›ืžื” ืงื‘ื•ืฆื•ืช ืจืคืœื™ืงืฆื™ื” ื™ืฉ ื‘ืฉืจืช, ืื™ืœื• ืชื™ืงื™ื•ืช ื”ืŸ ืžืฉื›ืคืœื•ืช ื•ืื™ืœื• ืฉืจืชื™ื ื ื•ืกืคื™ื ื›ืœื•ืœื™ื ื‘ื”ืŸ (ืื ื—ื ื• ืœื ืจื•ืฆื™ื ืœื”ื›ื ื™ืก ืืช ื›ืœ ื–ื” ืœ-Zabix ื™ื“ื ื™ืช ืขื‘ื•ืจ ื›ืœ ืฉืจืช, ื ื›ื•ืŸ?).
  • ื”ื•ืกืคืช ืกืงืจื™ืคื˜ื™ื ืืœื” ื›-UserParameter ืœืชืฆื•ืจืช ื”ืกื•ื›ืŸ ืฉืœ Zabbix ืœืฆื•ืจืš ืงืจื™ืื” ื ื•ืกืคืช ืžืฉืจืช ื”ื ื™ื˜ื•ืจ,
  • ื”ืคืขืœืช ืฉื™ืจื•ืช ื”ืกื•ื›ืŸ ืฉืœ Zabbix ื›ืžืฉืชืžืฉ ืฉื™ืฉ ืœื• ื–ื›ื•ื™ื•ืช ืœืงืจื•ื ืืช ืฆื‘ืจ ื”ื”ื–ืžื ื•ืช,
  • ืชื‘ื ื™ืช ืœ-Zabix, ื‘ื” ื™ื•ื’ื“ืจ ืื™ืชื•ืจ ืงื‘ื•ืฆื•ืช, ืขื™ื‘ื•ื“ ื ืชื•ื ื™ื ืฉื”ืชืงื‘ืœื• ื•ื”ื•ืฆืืช ื”ืชืจืื•ืช ืขืœื™ื”ืŸ.

ืžื ืชื— ืกืงืจื™ืคื˜ื™ื

ื›ื“ื™ ืœื›ืชื•ื‘ ืืช ื”ืžื ืชื—, ื‘ื—ืจืชื™ ื‘-VBS ื›ืฉืคื” ื”ืื•ื ื™ื‘ืจืกืœื™ืช ื‘ื™ื•ืชืจ ื”ืงื™ื™ืžืช ื‘ื›ืœ ื”ื’ืจืกืื•ืช ืฉืœ Windows Server. ื”ื”ื™ื’ื™ื•ืŸ ืฉืœ ื”ืกืงืจื™ืคื˜ ืคืฉื•ื˜: ื”ื•ื ืžืงื‘ืœ ืืช ืฉื ืงื‘ื•ืฆืช ื”ืฉื›ืคื•ืœ, ื”ืชื™ืงื™ื” ื”ืžืฉื•ื›ืคืœืช ื•ืฉืžื•ืช ื”ืฉืจืชื™ื ื”ืฉื•ืœื—ื™ื ื•ื”ืžืงื‘ืœื™ื ื“ืจืš ืฉื•ืจืช ื”ืคืงื•ื“ื”. ืคืจืžื˜ืจื™ื ืืœื” ืžื•ืขื‘ืจื™ื ืœืื—ืจ ืžื›ืŸ ืืœ dfsrdiag, ื•ื‘ื”ืชืื ืœืชืคื•ืงื” ืฉืœื• ื”ื•ื ืžื™ื™ืฆืจ:
ืžืกืคืจ ืงื‘ืฆื™ื - ืื ืžืชืงื‘ืœืช ื”ื•ื“ืขื” ืขืœ ื”ื™ืžืฆืื•ืช ืงื‘ืฆื™ื ื‘ืฆื‘ืจ,
0 - ืื ืžืชืงื‘ืœืช ื”ื•ื“ืขื” ืขืœ ื”ื™ืขื“ืจ ืงื‘ืฆื™ื ื‘ืฆื‘ืจ ื”ื”ื–ืžื ื•ืช ("ืœืœื ืคื™ื’ื•ืจ"),
-1 - ืื ืžืชืงื‘ืœืช ื”ื•ื“ืขืช ืฉื’ื™ืื” dfsrdiag ื‘ืขืช ื‘ื™ืฆื•ืข ื‘ืงืฉื” ("[ืฉื’ื™ืื”]").

get-Backlog.vbs

strReplicationGroup=WScript.Arguments.Item(0)
strReplicatedFolder=WScript.Arguments.Item(1)
strSending=WScript.Arguments.Item(2)
strReceiving=WScript.Arguments.Item(3)

Set WshShell = CreateObject ("Wscript.shell")
Set objExec = WSHshell.Exec("dfsrdiag.exe Backlog /RGName:""" & strReplicationGroup & """ /RFName:""" & strReplicatedFolder & """ /SendingMember:" & strSending & " /ReceivingMember:" & strReceiving)
strResult = ""
Do While Not objExec.StdOut.AtEndOfStream
	strResult = strResult & objExec.StdOut.ReadLine() & "\"
Loop

If InStr(strResult, "No Backlog") > 0 then
	intBackLog = 0
ElseIf  InStr(strResult, "[ERROR]") > 0 Then
    intBackLog = -1
Else
	arrLines = Split(strResult, "\")
	arrResult = Split(arrLines(1), ":")
	intBackLog = arrResult(1)
End If

WScript.echo intBackLog

ืชืกืจื™ื˜ ื’ื™ืœื•ื™

ืขืœ ืžื ืช ืฉ-Zabix ืชื•ื›ืœ ืœืงื‘ื•ืข ืืช ื›ืœ ืงื‘ื•ืฆื•ืช ื”ืฉื›ืคื•ืœ ื”ืงื™ื™ืžื•ืช ื‘ืฉืจืช ื•ืœื‘ืจืจ ืืช ื›ืœ ื”ืคืจืžื˜ืจื™ื ื”ื ื“ืจืฉื™ื ืœื‘ืงืฉื” (ืฉื ืชื™ืงื™ื”, ืฉืžื•ืช ืฉืœ ืฉืจืชื™ื ืฉื›ื ื™ื), ืขืœื™ื ื•, ืจืืฉื™ืช, ืœื”ืฉื™ื’ ืžื™ื“ืข ื–ื”, ื•ืฉื ื™ืช, ืœื”ืฆื™ื’ ืื•ืชื• ื‘ืคื•ืจืžื˜ ื”ืžื•ื‘ืŸ ืœื–ืื‘ื™ืงืก. ื”ืคื•ืจืžื˜ ืฉื›ืœื™ ื”ื’ื™ืœื•ื™ ืžื‘ื™ืŸ ื ืจืื” ื›ืš:

        "data":[
                {
                        "{#GROUP}":"Share1",
                        "{#FOLDER}":"Folder1",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"Server2"}

...

                        "{#GROUP}":"ShareN",
                        "{#FOLDER}":"FolderN",
                        "{#SENDING}":"Server1",
                        "{#RECEIVING}":"ServerN"}]}

ื”ื“ืจืš ื”ืงืœื” ื‘ื™ื•ืชืจ ืœื”ืฉื™ื’ ืืช ื”ืžื™ื“ืข ืฉืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ื• ื”ื™ื ื‘ืืžืฆืขื•ืช WMI, ื”ื•ืฆืืชื• ืžื”ืกืขื™ืคื™ื ื”ืžืชืื™ืžื™ื ืฉืœ DfsrReplicationGroupConfig. ื›ืชื•ืฆืื” ืžื›ืš, ื ื•ืœื“ ืกืงืจื™ืคื˜ ืฉื™ื•ืฆืจ ื‘ืงืฉื” ืœ-WMI ื•ืžื•ืฆื™ื ืจืฉื™ืžื” ืฉืœ ืงื‘ื•ืฆื•ืช, ื”ืชื™ืงื™ื•ืช ื•ื”ืฉืจืชื™ื ืฉืœื”ืŸ ื‘ืคื•ืจืžื˜ ื”ื ื“ืจืฉ.

DFSRDiscovery.vbs


dim strComputer, strLine, n, k, i

Set wshNetwork = WScript.CreateObject( "WScript.Network" )
strComputer = wshNetwork.ComputerName

Set oWMIService = GetObject("winmgmts:\" & strComputer & "rootMicrosoftDFS")
Set colRGroups = oWMIService.ExecQuery("SELECT * FROM DfsrReplicationGroupConfig")
wscript.echo "{"
wscript.echo "        ""data"":["
n=0
k=0
i=0
For Each oGroup in colRGroups
  n=n+1
  Set colRGFolders = oWMIService.ExecQuery("SELECT * FROM DfsrReplicatedFolderConfig WHERE ReplicationGroupGUID='" & oGroup.ReplicationGroupGUID & "'")
  For Each oFolder in colRGFolders
    k=k+1
    Set colRGConnections = oWMIService.ExecQuery("SELECT * FROM DfsrConnectionConfig WHERE ReplicationGroupGUID='" & oGroup.ReplicationGroupGUID & "'")
    For Each oConnection in colRGConnections
      i=i+1
      binInbound = oConnection.Inbound
      strPartner = oConnection.PartnerName
      strRGName = oGroup.ReplicationGroupName
      strRFName = oFolder.ReplicatedFolderName
      If oConnection.Enabled = True and binInbound = False Then
        strSendingComputer = strComputer
        strReceivingComputer = strPartner
        strLine1="                {"    
        strLine2="                        ""{#GROUP}"":""" & strRGName & """," 
        strLine3="                        ""{#FOLDER}"":""" & strRFName & """," 
        strLine4="                        ""{#SENDING}"":""" & strSendingComputer & ""","                  
        if (n < colRGroups.Count) or (k < colRGFolders.count) or (i < colRGConnections.Count) then
          strLine5="                        ""{#RECEIVING}"":""" & strReceivingComputer & """},"
        else
          strLine5="                        ""{#RECEIVING}"":""" & strReceivingComputer & """}]}"       
        end if		
        wscript.echo strLine1
        wscript.echo strLine2
        wscript.echo strLine3
        wscript.echo strLine4
        wscript.echo strLine5	   
      End If
    Next
  Next
Next

ืื ื™ ืžืกื›ื™ื, ืื•ืœื™ ื”ืชืกืจื™ื˜ ืœื ื–ื•ืจื— ื‘ืืœื’ื ื˜ื™ื•ืช ืฉืœ ืงื•ื“ ื•ื‘ื”ื—ืœื˜ ืืคืฉืจ ืœืคืฉื˜ ื›ืžื” ื“ื‘ืจื™ื ื‘ื•, ืื‘ืœ ื”ื•ื ืžื‘ืฆืข ืืช ืชืคืงื™ื“ื• ื”ืขื™ืงืจื™ - ืžืชืŸ ืžื™ื“ืข ืขืœ ื”ืคืจืžื˜ืจื™ื ืฉืœ ืงื‘ื•ืฆื•ืช ืฉื›ืคื•ืœ ื‘ืคื•ืจืžื˜ ื”ืžื•ื‘ืŸ ืœ-Zabix.

ื”ื•ืกืคืช ืกืงืจื™ืคื˜ื™ื ืœืชืฆื•ืจืช ืกื•ื›ืŸ Zabbix

ื”ื›ืœ ื›ืืŸ ืคืฉื•ื˜ ื‘ื™ื•ืชืจ. ื”ื•ืกืฃ ืืช ื”ืฉื•ืจื•ืช ื”ื‘ืื•ืช ืœืกื•ืฃ ืงื•ื‘ืฅ ื”ืชืฆื•ืจื” ืฉืœ ื”ืกื•ื›ืŸ:

UserParameter=check_dfsr[*],cscript /nologo "C:Program FilesZabbix Agentget-Backlog.vbs" $1 $2 $3 $4
UserParameter=discovery_dfsr[*],cscript /nologo "C:Program FilesZabbix AgentDFSRDiscovery.vbs"

ื›ืžื•ื‘ืŸ, ืื ื• ืžืชืื™ืžื™ื ืืช ื”ื ืชื™ื‘ื™ื ืœืืœื” ืฉื‘ื”ื ื™ืฉ ืœื ื• ืกืงืจื™ืคื˜ื™ื. ืฉืžืชื™ ืื•ืชื ื‘ืื•ืชื” ืชื™ืงื™ื” ืฉื‘ื” ื”ืกื•ื›ืŸ ืžื•ืชืงืŸ.

ืœืื—ืจ ื‘ื™ืฆื•ืข ืฉื™ื ื•ื™ื™ื, ื”ืคืขืœ ืžื—ื“ืฉ ืืช ืฉื™ืจื•ืช ื”ืกื•ื›ืŸ ืฉืœ Zabbix.

ืฉื™ื ื•ื™ ื”ืžืฉืชืžืฉ ืฉืชื—ืชื™ื• ืคื•ืขืœ ืฉื™ืจื•ืช Zabbix Agent

ืขืœ ืžื ืช ืœืงื‘ืœ ืžื™ื“ืข ื“ืจืš dfsrdiag, ื™ืฉ ืœื”ืคืขื™ืœ ืืช ื›ืœื™ ื”ืฉื™ืจื•ืช ืชื—ืช ื—ืฉื‘ื•ืŸ ืฉื™ืฉ ืœื• ื–ื›ื•ื™ื•ืช ื ื™ื”ื•ืœ ื”ืŸ ืœื—ื‘ืจื™ื ื”ืฉื•ืœื—ื™ื ื•ื”ืŸ ื”ืžืงื‘ืœื™ื ื‘ืงื‘ื•ืฆืช ื”ืฉื›ืคื•ืœ. ืฉื™ืจื•ืช ื”ืกื•ื›ืŸ Zabbix, ื”ืคื•ืขืœ ื›ื‘ืจื™ืจืช ืžื—ื“ืœ ืชื—ืช ื—ืฉื‘ื•ืŸ ื”ืžืขืจื›ืช, ืœื ื™ื•ื›ืœ ืœื‘ืฆืข ื‘ืงืฉื” ื›ื–ื•. ื™ืฆืจืชื™ ื—ืฉื‘ื•ืŸ ื ืคืจื“ ื‘ื“ื•ืžื™ื™ืŸ, ื ืชืชื™ ืœื• ื–ื›ื•ื™ื•ืช ื ื™ื”ื•ืœ ื‘ืฉืจืชื™ื ื”ื“ืจื•ืฉื™ื, ื•ื”ื’ื“ืจืชื™ ืืช ื”ืฉื™ืจื•ืช ื›ืš ืฉื™ืคืขืœ ืชื—ืชื™ื• ื‘ืฉืจืชื™ื ืืœื•.

ืืชื” ื™ื›ื•ืœ ืœืœื›ืช ื‘ื“ืจืš ืื—ืจืช: ื›ื™ dfsrdiag, ืœืžืขืฉื”, ืขื•ื‘ื“ ื“ืจืš ืื•ืชื• WMI, ืื– ืืชื” ื™ื›ื•ืœ ืœื”ืฉืชืžืฉ ืชื™ืื•ืจ, ื›ื™ืฆื“ ืœืชืช ืœื—ืฉื‘ื•ืŸ ื“ื•ืžื™ื™ืŸ ืืช ื”ื–ื›ื•ื™ื•ืช ืœื”ืฉืชืžืฉ ื‘ื• ืžื‘ืœื™ ืœื”ื ืคื™ืง ื–ื›ื•ื™ื•ืช ื ื™ื”ื•ืœ, ืื‘ืœ ืื ื™ืฉ ืœื ื• ืงื‘ื•ืฆื•ืช ืฉื›ืคื•ืœ ืจื‘ื•ืช, ืื– ื”ื ืคืงืช ื–ื›ื•ื™ื•ืช ืœื›ืœ ืงื‘ื•ืฆื” ืชื”ื™ื” ืงืฉื”. ืขื ื–ืืช, ื‘ืžืงืจื” ืฉื ืจืฆื” ืœืคืงื— ืขืœ ืฉื›ืคื•ืœ ื ืคื— ืžืขืจื›ืช ื”ืชื—ื•ื ืขืœ ื‘ืงืจื™ ืชื—ื•ื, ื™ื™ืชื›ืŸ ืฉื–ื• ื”ืืคืฉืจื•ืช ื”ืžืงื•ื‘ืœืช ื”ื™ื—ื™ื“ื”, ืฉื›ืŸ ืžืชืŸ ื–ื›ื•ื™ื•ืช ืžื ื”ืœ ืชื—ื•ื ืœื—ืฉื‘ื•ืŸ ืฉื™ืจื•ืช ื”ื ื™ื˜ื•ืจ ืื™ื ื• ืจืขื™ื•ืŸ ื˜ื•ื‘.

ืชื‘ื ื™ืช ื ื™ื˜ื•ืจ

ืขืœ ืกืžืš ื”ื ืชื•ื ื™ื ืฉืงื™ื‘ืœืชื™, ื™ืฆืจืชื™ ืชื‘ื ื™ืช ืฉ:

  • ืžืคืขื™ืœ ื’ื™ืœื•ื™ ืื•ื˜ื•ืžื˜ื™ ืฉืœ ืงื‘ื•ืฆื•ืช ืฉื›ืคื•ืœ ืคืขื ื‘ืฉืขื”,
  • ื‘ื•ื“ืง ืืช ื’ื•ื“ืœ ื”ืคื™ื’ื•ืจ ืขื‘ื•ืจ ื›ืœ ืงื‘ื•ืฆื” ืื—ืช ืœ-5 ื“ืงื•ืช,
  • ืžื›ื™ืœ ื˜ืจื™ื’ืจ ืฉืžื•ืฆื™ื ื”ืชืจืื” ื›ืืฉืจ ื’ื•ื“ืœ ื”-backlog ืขื‘ื•ืจ ื›ืœ ืงื‘ื•ืฆื” ื”ื•ื ื™ื•ืชืจ ืž-100 ืœืžืฉืš 30 ื“ืงื•ืช. ื”ื˜ืจื™ื’ืจ ืžืชื•ืืจ ื›ืื‘ ื˜ื™ืคื•ืก ืฉืžืชื•ื•ืกืฃ ืื•ื˜ื•ืžื˜ื™ืช ืœืงื‘ื•ืฆื•ืช ืฉื–ื•ื”ื•,
  • ื‘ื•ื ื” ื’ืจืคื™ื ืฉืœ ื’ื•ื“ืœ ืฆื‘ืจ ืขื‘ื•ืจ ื›ืœ ืงื‘ื•ืฆืช ืฉื›ืคื•ืœ.

ืืชื” ื™ื›ื•ืœ ืœื”ื•ืจื™ื“ ืืช ื”ืชื‘ื ื™ืช ืขื‘ื•ืจ Zabbix 2.2 ื›ืืŸ.

ืกืš ื”ื›ืœ

ืœืื—ืจ ื™ื™ื‘ื•ื โ€‹โ€‹ื”ืชื‘ื ื™ืช ืœืชื•ืš Zabbix ื•ื™ืฆื™ืจืช ื—ืฉื‘ื•ืŸ ืขื ื”ื–ื›ื•ื™ื•ืช ื”ื“ืจื•ืฉื•ืช, ื ืฆื˜ืจืš ืจืง ืœื”ืขืชื™ืง ืืช ื”ืกืงืจื™ืคื˜ื™ื ืœืฉืจืชื™ ื”ืงื‘ืฆื™ื ืฉื ืจืฆื” ืœื ื˜ืจ ืขื‘ื•ืจ DFSR, ืœื”ื•ืกื™ืฃ ืฉืชื™ ืฉื•ืจื•ืช ืœืชืฆื•ืจืช ื”ืกื•ื›ืŸ ืขืœื™ื”ื ื•ืœื”ืคืขื™ืœ ืžื—ื“ืฉ ืืช ืฉื™ืจื•ืช ื”ืกื•ื›ืŸ Zabbix. , ืžื’ื“ื™ืจื™ื ืื•ืชื• ืœืคืขื•ืœ ื›ื—ืฉื‘ื•ืŸ ื”ืจืฆื•ื™. ืื™ืŸ ืฆื•ืจืš ื‘ื”ื’ื“ืจื•ืช ื™ื“ื ื™ื•ืช ืื—ืจื•ืช ืขื‘ื•ืจ ื ื™ื˜ื•ืจ DFSR.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”