рдЬрд╝реИрдмрд┐рдХреНрд╕ рдореЗрдВ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдкрди рдПрдкреАрдЖрдИ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рд░реВрдмреА, рдкреАрдПрдЪрдкреА рдФрд░ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИред рдореБрдЭреЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рдХрд░рдирд╛ рдерд╛ред рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ
JSONRPC рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ
рдЬрд╛рддреА рд╣реИ ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП,
Zabbix API рд╡рд░реНрдЬрди рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
{ "jsonrpc" : "2.0" , "method" : "apiinfo.version" , "params" :[], "auth" : "a6e895b98fde40f4f7badf112fd983bf" , "id" :2 } <br>{ "jsonrpc" : "2.0" , "result" : "1.3" , "id" :2 } * This source code was highlighted with Source Code Highlighter .
JSON-RPC рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рд▓реЗрдЦ рдХреЗ рд▓рдХреНрд╖реНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ:
private string GetWebRequest( string body)
{
WebRequest wb = WebRequest.Create(url);
wb.ContentType = @"application/json-rpc" ;
wb.Credentials = CredentialCache.DefaultCredentials;
ASCIIEncoding encoding = new ASCIIEncoding();
string postData = body;
byte [] data = encoding.GetBytes(postData);
wb.Method = "POST" ;
wb.ContentLength = data.Length;
Stream newStream = wb.GetRequestStream();
newStream.Write(data, 0, data.Length);
newStream.Close();
HttpWebResponse response = (HttpWebResponse)wb.GetResponse();
Stream dataStream = response.GetResponseStream();
StreamReader reader = new StreamReader(dataStream);
return reader.ReadToEnd();
}
public string obj2json( object obj)
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
return serializer.Serialize(obj);
}
public string CallApi( string method, object param)
{
object Query = new
{
jsonrpc = "2.0" ,
auth = auth_hash,
id = id.ToString(),
method = method,
Params = param
};
String qr = obj2json(Query);
qr=qr.Replace( "Params" , "params" );
id++;
string result = GetWebRequest(qr);
return result;
}
* This source code was highlighted with Source Code Highlighter .
CallAPI рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП API рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдзрд┐ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (Zabbix рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ)ред рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝реЗ рдХрдо рд╣реЛрдВрдЧреЗред
Obj2json рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп, рдФрд░
GetWebRequest рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛
рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз POST рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде "user.authenticate" рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдп, рдЙрдкрд░реЛрдХреНрдд рдмрд╛рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
public bool login()
{
bool res;
Update( new UpdateInfoMessage( this ) { message = " " , status = "LOGIN" });
try
{
var userinfo = new { user = _user, password = _password };
string result = CallApi( "user.authenticate" , userinfo);
auth_hash = (serializer.Deserialize< string >(result)).result;
res= true ;
Update( new UpdateInfoMessage( this ) { message = " " , status = "LOGIN" });
}
catch (Exception ex)
{
Update( new UpdateInfoMessage( this ) { message = " :" + ex.Message, status = "LOGIN" });
res= false ;
}
return res;
}
* This source code was highlighted with Source Code Highlighter .
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрд░реНрдХ рдмрджрд╕реВрд░рдд рд╕рд░рд▓ рд╣реИ, рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдХрдХреНрд╖рд╛ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ рд╣реИ - рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝реЗрдВ рдФрд░ рдЭреВрда рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдпрд╣
рдЕрджреНрдпрддрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ - рдпрд╣ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреИрд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рд░рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпрд╛рдВ рд╣реИрдВред рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
public class Result: IEnumerable
{
//
public T[] result;
///
public ZabbixConnection server;
// Zabbix API, maps.get, triggers.update .
protected string method;
//
protected object Params;
// ,
public string stringResult;
// .
public object SyncRoot;
// , "method" "Params"
protected virtual void init() { }
public Result(ZabbixConnection Server)
{
init();
server = Server;
SyncRoot = new object ();
}
public Result()
{
init();
}
// , result collection
public virtual void get ()
{
JavaScriptSerializer serializer = new JavaScriptSerializer();
lock (SyncRoot)
{
stringResult = (server.CallApi(method, Params));
result = serializer.Deserialize<Result>(stringResult).result;
if (result== null ){result= new T[1];}
}
}
public T this [ int index]
{
get
{
return result[index];
}
}
public IEnumerator GetEnumerator()
{
foreach (T item in result)
{
yield return item;
}
}
IEnumerator IEnumerable .GetEnumerator()
{
return GetEnumerator();
}
}
, Zabbix API . , Init , . :
using System;
using System.Collections. Generic ;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
namespace Zabbix
{
public class Hosts:Result
{
protected override void init()
{
method = "host.get" ;
Params = new { output = "extend" };
}
public Hosts(ZabbixConnection Server) : base (Server) { }
}
public class Host
{
public string host;
public string hostid;
public string ip;
public override string ToString()
{
return host;
}
}
}
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдЙрд╕реА рддрд░рд╣ рдЖрдк рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рд╡рд╣ рдЯреНрд░рд┐рдЧрд░, рд╣реЛрд╕реНрдЯ рд╕рдореВрд╣, рдИрд╡реЗрдВрдЯ рдпрд╛ рд╢реЗрдбреНрдпреВрд▓ рдбреЗрдЯрд╛ рд╣реЛред рд╕рднреА рддрд░реАрдХреЛрдВ рдФрд░ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╡рд┐рд╡рд░рдг Zabbix рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕ рд╡рд┐рд╖рдп рдХреЛ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдпрд╣ рдЫреЛрдЯрд╛ рдирд╣реАрдВ рдирд┐рдХрд▓рд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рдореИрдВрдиреЗ .NET рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ Zabbix API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрдо рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред рдЕрдзрд┐рдХ рдкреВрд░реНрдг рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб, рд╕рд╛рде рд╣реА WPF рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреНрд▓рд╛рдЗрдВрдЯ, рдпрд╣рд╛рдВ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: https://github.com/p1nger/odzl