From 5157dbac46895fa5654ba3ccebe61ead4a597b94 Mon Sep 17 00:00:00 2001 From: Tommy Parnell Date: Wed, 7 May 2014 16:25:51 -0700 Subject: [PATCH] committing broken stuff as i have to stop --- src/NOCQ.Application/Program.cs | 32 +++++++++------------ src/NOCQ/DB/RedisDatabase.cs | 2 +- src/NOCQ/Extensability/Catalog.cs | 14 +++++---- src/NOCQ/Extensability/CatalogRepository.cs | 15 ++++++++++ src/NOCQ/Imports/DataImports.cs | 4 +-- src/NOCQ/Imports/IDataImportHook.cs | 4 +-- src/NOCQ/Imports/IDataImportMetadata.cs | 22 ++++++++++++++ src/NOCQ/NOCQ.csproj | 2 ++ src/NOCQ/Plugins/Email/ImapInput.cs | 13 ++++++++- 9 files changed, 77 insertions(+), 31 deletions(-) create mode 100644 src/NOCQ/Extensability/CatalogRepository.cs create mode 100644 src/NOCQ/Imports/IDataImportMetadata.cs diff --git a/src/NOCQ.Application/Program.cs b/src/NOCQ.Application/Program.cs index 2c2c572..e516ef7 100644 --- a/src/NOCQ.Application/Program.cs +++ b/src/NOCQ.Application/Program.cs @@ -5,31 +5,25 @@ using NOCQ.Plugins.Email; using System.Collections; using System.Collections.Generic; using System.Threading.Tasks; - +using NOCQ.Extensability; namespace NOCQ.Application { class MainClass { public static void Main (string[] args) { - var list = new List(); - for (var i = 0; i < 3000; i++) - { - var al = new Alert() - {Data = "data" + Guid.NewGuid(), Runbook = "runbook", Service = "service", - Severity = "sev", - Source = "Source", - System = "System", - TimeStamp = new DateTime(2011,1,1) - }; - list.Add(al); - } - list.ForEach(al => RedisDatabase.SaveAlert(al, "127.0.0.1", RedisQueues.Input, 6379, 3000)); - for (var i = 0; i < 3000; i++) - { - var s = RedisDatabase.GetNextAlert("127.0.0.1", RedisQueues.Input, 6379, 3000); - Console.WriteLine(s.Data); - } + var s = RedisDatabase.GetNextAlert("127.0.0.1", RedisQueues.Input, 6379, 3000); + + // process s + var importPlugs = CatalogRepository.GetImportPlugins(); + + importPlugs.ToList().ForEach(x => + { + Task.Factory.StartNew(x.Value.Run, TaskCreationOptions.LongRunning); + Console.WriteLine(x.Value.Name); + }); + + //RedisDatabase.SaveAlert(, "127.0.0.1", RedisQueues.Output, 6379, 3000); Console.ReadLine(); diff --git a/src/NOCQ/DB/RedisDatabase.cs b/src/NOCQ/DB/RedisDatabase.cs index e0d749f..2057496 100644 --- a/src/NOCQ/DB/RedisDatabase.cs +++ b/src/NOCQ/DB/RedisDatabase.cs @@ -5,7 +5,7 @@ using System.Configuration; using Newtonsoft.Json; namespace NOCQ { - public class RedisDatabase + public sealed class RedisDatabase { public RedisDatabase(){} diff --git a/src/NOCQ/Extensability/Catalog.cs b/src/NOCQ/Extensability/Catalog.cs index e49d680..6ce0ddb 100644 --- a/src/NOCQ/Extensability/Catalog.cs +++ b/src/NOCQ/Extensability/Catalog.cs @@ -2,17 +2,19 @@ using System.ComponentModel.Composition.Hosting; using System.ComponentModel.Composition; using System.Reflection; -namespace NOCQ +namespace NOCQ.Extensability { public class Catalog { - static DirectoryCatalog dcatalog = new DirectoryCatalog("plugins", "*.dll"); + //static DirectoryCatalog dcatalog = new DirectoryCatalog("plugins", "*.dll"); static AssemblyCatalog acatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly()); - static AggregateCatalog catalog = new AggregateCatalog(dcatalog, acatalog); - static public CompositionContainer Container = new CompositionContainer(catalog); - public Catalog() + private static AggregateCatalog Cat = new AggregateCatalog(acatalog); + private static CompositionContainer _container = new CompositionContainer(Cat); + public CompositionContainer Container { get { return _container; } } + public Catalog() { - Container.ComposeParts(this); + _container.ComposeParts(this); + } } } diff --git a/src/NOCQ/Extensability/CatalogRepository.cs b/src/NOCQ/Extensability/CatalogRepository.cs new file mode 100644 index 0000000..02cb8fb --- /dev/null +++ b/src/NOCQ/Extensability/CatalogRepository.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; + +namespace NOCQ.Extensability +{ + public static class CatalogRepository + { + public static IEnumerable> GetImportPlugins() + { + var ts = new Catalog().Container.GetExports(); + return ts; + } + } +} + diff --git a/src/NOCQ/Imports/DataImports.cs b/src/NOCQ/Imports/DataImports.cs index f2e048d..b3c5398 100644 --- a/src/NOCQ/Imports/DataImports.cs +++ b/src/NOCQ/Imports/DataImports.cs @@ -6,8 +6,8 @@ namespace NOCQ [Export] public class DataImports { - [ImportMany] - IEnumerable DataHooks {get; set;} + [ImportMany(AllowRecomposition = true)] + public IEnumerable> DataHooks {get; set;} } } diff --git a/src/NOCQ/Imports/IDataImportHook.cs b/src/NOCQ/Imports/IDataImportHook.cs index ada4c45..e6edac8 100644 --- a/src/NOCQ/Imports/IDataImportHook.cs +++ b/src/NOCQ/Imports/IDataImportHook.cs @@ -3,10 +3,10 @@ using System.ComponentModel.Composition; namespace NOCQ { - [InheritedExport] + public interface IDataImportHook { - string Name { get; set; } + string Name { get; set;} void Run(); void Stop(); } diff --git a/src/NOCQ/Imports/IDataImportMetadata.cs b/src/NOCQ/Imports/IDataImportMetadata.cs new file mode 100644 index 0000000..54d1330 --- /dev/null +++ b/src/NOCQ/Imports/IDataImportMetadata.cs @@ -0,0 +1,22 @@ +using System; +using System.ComponentModel.Composition; + +namespace NOCQ +{ + interface IDataImportMetadata + { + string Name {get;set;} + } + [MetadataAttribute] + public class IDataImportAttr : ExportAttribute, IDataImportMetadata + { + public string Name {get;set;} + + IDataImportAttr(string name) + :base(typeof(IDataImportHook)) + { + Name = name; + } + } +} + diff --git a/src/NOCQ/NOCQ.csproj b/src/NOCQ/NOCQ.csproj index f5541ed..a7e12e0 100644 --- a/src/NOCQ/NOCQ.csproj +++ b/src/NOCQ/NOCQ.csproj @@ -73,6 +73,8 @@ + + diff --git a/src/NOCQ/Plugins/Email/ImapInput.cs b/src/NOCQ/Plugins/Email/ImapInput.cs index 70f5344..5dbe838 100644 --- a/src/NOCQ/Plugins/Email/ImapInput.cs +++ b/src/NOCQ/Plugins/Email/ImapInput.cs @@ -4,11 +4,22 @@ using AE.Net.Mail; using System.Collections.Generic; using System.Linq; using System.Text.RegularExpressions; +using System.ComponentModel.Composition; namespace NOCQ.Plugins.Email { - public class ImapInput + + [IDataImportAttr("Email")] + public class ImapInput: IDataImportHook { + public string Name + { + get + { + {return "IMAP";} + } + } + string loginName { get; set; } string password { get; set; } string server { get; set; }