using System; using MySql.Data.MySqlClient; using ln.logging; using ln.skyscanner.entities; using System.Linq; using ln.types.net; using ln.types; using System.Globalization; using ln.types.odb.ng; namespace ln.skyscanner.import.skytron { public class SkytronImport { MySqlConnection mysql; public SkytronImport(String connectionString) { mysql = new MySqlConnection(connectionString); } public void Import(Mapper mapper) { try { mysql.Open(); ImportStammdaten(mapper); ImportNodes(mapper); ImportL2Segmente(mapper); } catch (Exception e) { Logging.Log(e); if (mysql != null) mysql.Close(); throw; } } public void ImportStammdaten(Mapper mapper) { MySqlCommand command = mysql.CreateCommand(); command.CommandText = "SELECT * FROM sender_stammdaten"; using (MySqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { PointOfPresence pop = mapper.Load(Query.Equals("ForeignName", reader.GetInt32("senderid").ToString())).FirstOrDefault(); if (pop == null) { Logging.Log(LogLevel.INFO, "New PoP: {0} / {1}", reader.GetInt32("senderid"), reader.GetString("stationsname")); pop = new PointOfPresence(); pop.ForeignName = reader.GetInt32("senderid").ToString(); pop.Name = reader.GetString("stationsname"); String lati = reader.GetString("koordinaten_breite"); String longi = reader.GetString("koordinaten_laenge"); if (!String.Empty.Equals(lati) && !String.Empty.Equals(longi)) pop.GeoLocation = new GeoLocation(float.Parse(lati,CultureInfo.InvariantCulture.NumberFormat),float.Parse(longi, CultureInfo.InvariantCulture.NumberFormat)); mapper.Save(pop); } else { Logging.Log(LogLevel.INFO, "Known PoP: {0}",pop); } } } } public void ImportNodes(Mapper mapper) { MySqlCommand command = mysql.CreateCommand(); command.CommandText = "SELECT * FROM sender_ip_discovery"; using (MySqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { String id = reader.GetString("id"); IPv4 primaryIP = IPv4.Parse(reader.GetString("ip")); Node node = mapper.Load(Query.Equals("uniqueIdentity", id)).FirstOrDefault(); if (node == null) { node = new Node(primaryIP); node.UniqueIdentity = id; Logging.Log(LogLevel.INFO, "New Node: {0} / {1}",id,primaryIP); } node.Vendor = reader.GetString("hersteller"); node.Product = reader.GetString("produkt"); node.Comment = reader.GetString("devicename"); if (reader.GetInt32("http_port") != 0) { string proto = reader.GetInt32("http_port") == 443 ? "https" : "http"; node.RemoveURI("http"); node.RemoveURI("https"); node.AddURI(new URI(String.Format("{2}://{0}:{1}", primaryIP, reader.GetString("http_port"), proto ))); } if (reader.GetInt32("ssh_port") != 0) { node.RemoveURI("ssh"); node.AddURI(new URI(String.Format("ssh://{0}:{1}@{2}:{3}", reader.GetString("ssh_user"), reader.GetString("ssh_passwort"), primaryIP, reader.GetString("ssh_port") ))); } node.RemoveURI("snmp"); if (!String.Empty.Equals(reader.GetString("snmp_community"))) { node.AddURI(new URI(String.Format("snmp://{0}@{1}#1", reader.GetString("snmp_community"), primaryIP ))); } if (!String.Empty.Equals(reader.GetString("snmp_v3_user"))) { node.AddURI(new URI(String.Format("snmp://{0}:{1}:{2}@{3}#3", reader.GetString("snmp_v3_user"), reader.GetString("snmp_v3_auth_password"), reader.GetString("snmp_v3_encrypt_password"), primaryIP ))); } node.Severity = CheckSeverity.PRODUCTION; mapper.Save(node); } } } public void ImportL2Segmente(Mapper mapper) { MySqlCommand command = mysql.CreateCommand(); command.CommandText = "SELECT * FROM sender_ip_subnetze"; using (MySqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Network4 net4 = Network4.Parse(reader.GetString("cidr")); L2Segment l2 = mapper.Load(Query.Equals("Network", net4)).FirstOrDefault(); if (l2 == null) { l2 = new L2Segment(); l2.Name = String.Format("SUB#{0}", reader.GetInt32("id").ToString()); l2.Comment = reader.GetString("beschreibung"); l2.Network = net4; Logging.Log(LogLevel.INFO, "New L2Segment: {0} / {1}",net4,l2.Name); String sid = reader.GetString("senderid1"); if ((sid != null) && !String.Empty.Equals(sid)) { PointOfPresence pop = mapper.Load(Query.Equals("ForeignName", sid)).FirstOrDefault(); if (pop != null) l2.PoPs.Add(pop); } sid = reader.GetString("senderid2"); if ((sid != null) && !String.Empty.Equals(sid)) { PointOfPresence pop = mapper.Load(Query.Equals("ForeignName", sid)).FirstOrDefault(); if (pop != null) l2.PoPs.Add(pop); } sid = reader.GetString("senderid3"); if ((sid != null) && !String.Empty.Equals(sid)) { PointOfPresence pop = mapper.Load(Query.Equals("ForeignName", sid)).FirstOrDefault(); if (pop != null) l2.PoPs.Add(pop); } sid = reader.GetString("senderid4"); if ((sid != null) && !String.Empty.Equals(sid)) { PointOfPresence pop = mapper.Load(Query.Equals("ForeignName", sid)).FirstOrDefault(); if (pop != null) l2.PoPs.Add(pop); } mapper.Save(l2); } } } } } }