This commit is contained in:
Wolfgang Hottgenroth 2015-10-09 17:14:45 +02:00
parent 79d7787e02
commit ac2d5cccb9
9 changed files with 250 additions and 61 deletions

Binary file not shown.

216
Snmp2Mysql/DatabaseLink.cs Normal file
View File

@ -0,0 +1,216 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MySql.Data.MySqlClient;
using System.Data;
using System.Collections;
namespace Snmp2Mysql
{
class DatabaseLinkException : Exception
{
public DatabaseLinkException(string msg) : base(msg) { }
public DatabaseLinkException(string msg, Exception rootCause) : base(msg, rootCause) { }
}
abstract class DatabaseConnectionHelper : IDisposable
{
protected string mDbConnStr;
protected MySqlConnection mConn;
public DatabaseConnectionHelper(string dbConnStr)
{
mDbConnStr = dbConnStr;
try
{
mConn = new MySqlConnection(mDbConnStr);
mConn.Open();
if (mConn.State != ConnectionState.Open)
{
throw new DatabaseLinkException("unable to open database connection");
}
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
Console.WriteLine("MySQL Exception: {0}", ex.Message);
throw new DatabaseLinkException("failed to connect", ex);
}
}
public void Close()
{
if (mConn != null)
{
mConn.Close();
mConn = null;
}
}
public void Dispose()
{
Close();
}
~DatabaseConnectionHelper()
{
Close();
}
}
class DeviceDataItemTuple
{
private int mId;
private string mOid;
public DeviceDataItemTuple(int id, string oid)
{
mId = id;
mOid = oid;
}
public int Id
{
get { return mId; }
}
public string Oid
{
get { return mOid; }
}
}
class DeviceDataItemProvider : DatabaseConnectionHelper, IEnumerable<DeviceDataItemTuple>
{
private int mDevice;
public DeviceDataItemProvider(string dbConnStr, int device) : base(dbConnStr)
{
mDevice = device;
}
IEnumerator IEnumerable.GetEnumerator()
{
throw new Exception("not supported");
}
IEnumerator<DeviceDataItemTuple> IEnumerable<DeviceDataItemTuple>.GetEnumerator()
{
string stmt = "SELECT dedi.id, di.oid FROM devicedataitem_t dedi, dataitem_t di WHERE dedi.device = " + mDevice + " AND dedi.dataitem = di.id";
MySqlCommand cmd = new MySqlCommand(stmt, mConn);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// Console.WriteLine("{0} {1}", reader[0], reader[1]);
DeviceDataItemTuple r = new DeviceDataItemTuple((int)reader[0], (string)reader[1]);
yield return r;
}
}
}
}
class DeviceTuple
{
private DeviceDataItemProvider mDeviceDataItemProvider;
private string mDeviceAddress;
private string mCommunity;
public DeviceTuple(DeviceDataItemProvider deviceDataItemProvider, string deviceAddress, string community)
{
mDeviceDataItemProvider = deviceDataItemProvider;
mDeviceAddress = deviceAddress;
mCommunity = community;
}
public DeviceDataItemProvider DeviceDataItemProvider
{
get { return mDeviceDataItemProvider; }
}
public string DeviceAddress
{
get { return mDeviceAddress; }
}
public string Community
{
get { return mCommunity; }
}
}
class DeviceProvider : DatabaseConnectionHelper, IEnumerable<DeviceTuple>
{
public DeviceProvider(string dbConnStr) : base(dbConnStr) { }
IEnumerator IEnumerable.GetEnumerator()
{
throw new Exception("not supported");
}
IEnumerator<DeviceTuple> IEnumerable<DeviceTuple>.GetEnumerator()
{
string stmt = "SELECT id, address, community FROM device_t";
MySqlCommand cmd = new MySqlCommand(stmt, mConn);
using (MySqlDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
// Console.WriteLine("{0} {1} {2}", reader[0], reader[1], reader[2]);
int deviceId = (int)reader[0];
string deviceAddress = (string)reader[1];
string community = (string)reader[2];
DeviceDataItemProvider deviceDataItemProvider = new DeviceDataItemProvider(mDbConnStr, deviceId);
DeviceTuple r = new DeviceTuple(deviceDataItemProvider, deviceAddress, community);
yield return r;
}
}
}
}
class DataCollector : DatabaseConnectionHelper
{
public DataCollector(string dbConnStr) : base(dbConnStr) { }
public void add(int id, string value)
{
string stmt = "INSERT INTO collecteddata_t (devicedataitem, value) VALUES(" + id + ", '" + value + "')";
MySqlCommand cmd = new MySqlCommand(stmt, mConn);
cmd.ExecuteNonQuery();
}
}
class DatabaseLink
{
private string mDbConnStr;
public DatabaseLink(string dbConnStr)
{
mDbConnStr = dbConnStr;
}
public DeviceProvider DeviceProvider
{
get { return new DeviceProvider(mDbConnStr); }
}
public DataCollector DataCollector
{
get { return new DataCollector(mDbConnStr); }
}
}
}

View File

@ -3,11 +3,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;
using SnmpSharpNet;
using System.Collections;
using MySql.Data.MySqlClient;
using System.Data;
namespace Snmp2Mysql
{
@ -17,68 +12,38 @@ namespace Snmp2Mysql
{
static void Main(string[] args)
{
SnmpGetter snmpGetter = new SnmpGetter("public", "172.16.2.1");
snmpGetter.AddOid(1, "1.3.6.1.2.1.1.1.0");
snmpGetter.AddOid(2, "1.3.6.1.2.1.1.3.0");
SnmpGetterResultProvider res = snmpGetter.Exec();
foreach (SnmpGetterResult r in res)
string dbConnStr = "SERVER=localhost;" +
"DATABASE=statsdb;" +
"UID=statsuser;" +
"PASSWORD=test123;";
DatabaseLink dbLink = new DatabaseLink(dbConnStr);
using (DataCollector dc = dbLink.DataCollector)
using (DeviceProvider dp = dbLink.DeviceProvider)
{
Console.WriteLine("{0} {1} {2}: {3}", r.Index, r.Oid, r.Type, r.Value);
}
MySqlConnection conn = null;
try
{
// Create Connection String from Input data
string myConnectionString = "SERVER=localhost;" +
"DATABASE=testdb;" +
"UID=testuser;" +
"PASSWORD=test123;";
conn = new MySqlConnection(myConnectionString);
conn.Open();
if (conn.State == ConnectionState.Open)
foreach (DeviceTuple dt in dp)
{
Console.WriteLine("Connection Established");
// Console.WriteLine("dt: {0}, {1}", dt.DeviceAddress, dt.Community);
string stmt = "SELECT * FROM testtable";
MySqlCommand cmd = new MySqlCommand(stmt, conn);
MySqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
using (SnmpGetter snmpGetter = new SnmpGetter(dt.Community, dt.DeviceAddress))
{
Console.WriteLine("{0} {1}", reader[0], reader[1]);
using (DeviceDataItemProvider ddip = dt.DeviceDataItemProvider)
{
foreach (DeviceDataItemTuple ddit in dt.DeviceDataItemProvider)
{
// Console.WriteLine(" ddit: {0}, {1}", ddit.Id, ddit.Oid);
snmpGetter.AddOid(ddit.Id, ddit.Oid);
}
}
SnmpGetterResultProvider res = snmpGetter.Exec();
foreach (SnmpGetterResult r in res)
{
Console.WriteLine("{0} {1} {2}: {3}", r.Index, r.Oid, r.Type, r.Value);
dc.add((int)r.Index, r.Value);
}
}
reader.Close();
}
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
Console.WriteLine("MySQL Exception: {0}", ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("Unknown Exception: {0}", ex.Message);
}
finally
{
if (conn != null)
{
conn.Close();
conn = null;
}
}
}
}
}

View File

@ -47,6 +47,7 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="DatabaseLink.cs" />
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SnmpGetter.cs" />

View File

@ -88,7 +88,7 @@ namespace Snmp2Mysql
}
class SnmpGetter
class SnmpGetter : IDisposable
{
private OctetString mCommunity;
private IpAddress mHost;
@ -118,6 +118,11 @@ namespace Snmp2Mysql
}
}
public void Dispose()
{
Close();
}
~SnmpGetter()
{
Close();

Binary file not shown.

View File

@ -3,3 +3,5 @@ c:\users\dehottgw\documents\visual studio 2013\Projects\Snmp2Mysql\Snmp2Mysql\bi
c:\users\dehottgw\documents\visual studio 2013\Projects\Snmp2Mysql\Snmp2Mysql\bin\Debug\Snmp2Mysql.pdb
c:\users\dehottgw\documents\visual studio 2013\Projects\Snmp2Mysql\Snmp2Mysql\obj\Debug\Snmp2Mysql.exe
c:\users\dehottgw\documents\visual studio 2013\Projects\Snmp2Mysql\Snmp2Mysql\obj\Debug\Snmp2Mysql.pdb
c:\users\dehottgw\documents\visual studio 2013\Projects\Snmp2Mysql\Snmp2Mysql\bin\Debug\MySql.Data.dll
c:\users\dehottgw\documents\visual studio 2013\Projects\Snmp2Mysql\Snmp2Mysql\bin\Debug\SnmpSharpNet.dll

Binary file not shown.