Zbbix API рдХреЛ C # рдореЗрдВ рд╕рдордЭрдирд╛

рдЬрд╝реИрдмрд┐рдХреНрд╕ рдореЗрдВ рдореЙрдирд┐рдЯрд░рд┐рдВрдЧ рд╕рд░реНрд╡рд░ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдУрдкрди рдПрдкреАрдЖрдИ рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗрд╡рд▓ рд░реВрдмреА, рдкреАрдПрдЪрдкреА рдФрд░ рдкрд╛рдпрдерди рдХреЗ рд▓рд┐рдП рдореМрдЬреВрдж рд╣реИред рдореБрдЭреЗ рдЕрдкрдиреЗ рджрдо рдкрд░ рдкрд╣рд┐рдпрд╛ рдХреЛ рдлрд┐рд░ рд╕реЗ рдордЬрдмреВрдд рдХрд░рдирд╛ рдерд╛ред рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рддрдХ рдкрд╣реБрдВрдЪ 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 рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рд▓реЗрдЦ рдХреЗ рд▓рдХреНрд╖реНрдп рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИ, рд╣рдо рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдмрдврд╝реЗрдВрдЧреЗ:
  1. private string GetWebRequest( string body)
  2. {
  3. WebRequest wb = WebRequest.Create(url);
  4. wb.ContentType = @"application/json-rpc" ;
  5. wb.Credentials = CredentialCache.DefaultCredentials;
  6. ASCIIEncoding encoding = new ASCIIEncoding();
  7. string postData = body;
  8. byte [] data = encoding.GetBytes(postData);
  9. wb.Method = "POST" ;
  10. wb.ContentLength = data.Length;
  11. Stream newStream = wb.GetRequestStream();
  12. newStream.Write(data, 0, data.Length);
  13. newStream.Close();
  14. HttpWebResponse response = (HttpWebResponse)wb.GetResponse();
  15. Stream dataStream = response.GetResponseStream();
  16. StreamReader reader = new StreamReader(dataStream);
  17. return reader.ReadToEnd();
  18. }
  19. public string obj2json( object obj)
  20. {
  21. JavaScriptSerializer serializer = new JavaScriptSerializer();
  22. return serializer.Serialize(obj);
  23. }
  24. public string CallApi( string method, object param)
  25. {
  26. object Query = new
  27. {
  28. jsonrpc = "2.0" ,
  29. auth = auth_hash,
  30. id = id.ToString(),
  31. method = method,
  32. Params = param
  33. };
  34. String qr = obj2json(Query);
  35. qr=qr.Replace( "Params" , "params" );
  36. id++;
  37. string result = GetWebRequest(qr);
  38. return result;
  39. }

* This source code was highlighted with Source Code Highlighter .

CallAPI рдлрд╝рдВрдХреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП API рдХреЙрд▓ рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рдзрд┐ рдФрд░ рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ (Zabbix рдПрдкреАрдЖрдИ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рд╡рд╕реНрддреБ рдХреЗ рд░реВрдк рдореЗрдВ)ред рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдереЛрдбрд╝реЗ рдХрдо рд╣реЛрдВрдЧреЗред Obj2json рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп, рдФрд░ GetWebRequest рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдкрд╖реНрдЯ рд╣реИ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рдЬреЛрдбрд╝реВрдВрдЧрд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз POST рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рднреЗрдЬрд╛ рдЧрдпрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдкрд░ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрдкрдпреЛрдЧ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде "user.authenticate" рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реЛрдЧрд╛, рдЬреЛ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреЗ рдЕрдиреБрд░реЛрдз рдХрд╛ рдХреНрд╖реЗрддреНрд░ рд╣реИред рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рддреИрдпрд╛рд░ рдХрд╛рд░реНрдп, рдЙрдкрд░реЛрдХреНрдд рдмрд╛рддреЛрдВ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
  1. public bool login()
  2. {
  3. bool res;
  4. Update( new UpdateInfoMessage( this ) { message = " " , status = "LOGIN" });
  5. try
  6. {
  7. var userinfo = new { user = _user, password = _password };
  8. string result = CallApi( "user.authenticate" , userinfo);
  9. auth_hash = (serializer.Deserialize< string >(result)).result;
  10. res= true ;
  11. Update( new UpdateInfoMessage( this ) { message = " " , status = "LOGIN" });
  12. }
  13. catch (Exception ex)
  14. {
  15. Update( new UpdateInfoMessage( this ) { message = " :" + ex.Message, status = "LOGIN" });
  16. res= false ;
  17. }
  18. return res;
  19. }

* This source code was highlighted with Source Code Highlighter .

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рддрд░реНрдХ рдмрджрд╕реВрд░рдд рд╕рд░рд▓ рд╣реИ, рд╣рдо рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ, рд╡рд┐рдзрд┐ рдХрд╛ рдирд╛рдо рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред рдЕрдЧрд░ рд╕рдмрдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╡рд╣рд╛рдБ рд╕реНрдерд┐рдд рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рдХрдХреНрд╖рд╛ рдХреЗ рд╡реИрд╢реНрд╡рд┐рдХ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдкрд░рд┐рдгрд╛рдо рджреЗрддреЗ рд╣реИрдВред рдЕрдЧрд░ рдХреБрдЫ рдЧрд▓рдд рд╣реБрдЖ рд╣реИ - рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝реЗрдВ рдФрд░ рдЭреВрда рдХреЛ рд╡рд╛рдкрд╕ рдХрд░реЗрдВред рдпрд╣ рдЕрджреНрдпрддрди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рднреА рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ - рдпрд╣ рд╣рдорд╛рд░реА рдХрдХреНрд╖рд╛ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдореБрдЦреНрдп рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдЕрдиреБрд░реЛрдз рдХреЛ рдХреИрд╕реЗ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдП рдФрд░ рд╕рд░реНрд╡рд░ рд╕реЗ рд╕рд░рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд▓реЗрдХрд┐рди рд╕рд░реНрд╡рд░ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдПрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпрд╛рдВ рд╣реИрдВред рдирдИ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрди рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рд╡рд░реНрдЧ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛:
  1. 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 , . :
    1. using System;
    2. using System.Collections. Generic ;
    3. using System.Collections.ObjectModel;
    4. using System.Linq;
    5. using System.Text;
    6.  
    7. namespace Zabbix
    8. {
    9. 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


Source: https://habr.com/ru/post/In111641/


All Articles