summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/blink/message.rb64
-rw-r--r--lib/blink/storage.rb48
2 files changed, 112 insertions, 0 deletions
diff --git a/lib/blink/message.rb b/lib/blink/message.rb
new file mode 100644
index 000000000..31d5fa503
--- /dev/null
+++ b/lib/blink/message.rb
@@ -0,0 +1,64 @@
+# $Id$
+
+module Blink
+ #------------------------------------------------------------
+ # provide feedback of various types to the user
+ # modeled after syslog messages
+ # each level of message prints in a different color
+ class Message
+ @@messages = Array.new
+ @@levels = [ :debug, :verbose, :notice, :warning, :error ]
+ @@colors = {
+ :debug => SLATE,
+ :verbose => ORANGE,
+ :notice => PINK,
+ :warning => GREEN,
+ :error => YELLOW
+ }
+
+ attr_accessor :level, :message, :source
+
+ def Message.loglevels
+ return @@levels
+ end
+
+ def initialize(args)
+ unless args.include?(:level) && args.include?(:message) &&
+ args.include?(:source)
+ raise "Blink::Message called incorrectly"
+ end
+
+ if args[:level].class == String
+ @level = args[:level].intern
+ elsif args[:level].class == Symbol
+ @level = args[:level]
+ else
+ raise "Level is not a string or symbol: #{args[:level].class}"
+ end
+ @message = args[:message]
+ @source = args[:source]
+ @time = Time.now
+ # this should include the host name, and probly lots of other
+ # stuff, at some point
+ unless @@levels.include?(level)
+ raise "Invalid message level #{level}"
+ end
+
+ @@messages.push(self)
+ Blink.newmessage(self)
+ end
+
+ def to_s
+ # this probably won't stay, but until this leaves the console,
+ # i'm going to use coloring...
+ #return "#{@time} #{@source} (#{@level}): #{@message}"
+ #return @@colors[@level] + "%s %s (%s): %s" % [
+ # @time, @source, @level, @message
+ #] + RESET
+ return @@colors[@level] + "%s (%s): %s" % [
+ @source, @level, @message
+ ] + RESET
+ end
+ end
+ #------------------------------------------------------------
+end
diff --git a/lib/blink/storage.rb b/lib/blink/storage.rb
new file mode 100644
index 000000000..9fc21d38b
--- /dev/null
+++ b/lib/blink/storage.rb
@@ -0,0 +1,48 @@
+# $Id$
+
+module Blink
+ # a class for storing state
+ class Storage
+ include Singleton
+ @@state = Hash.new { |hash,key|
+ hash[key] = Hash.new(nil)
+ }
+ @@splitchar = "\t"
+
+ def initialize
+ self.class.load
+ end
+
+ def Storage.load
+ # XXX I should probably use a better default state dir
+ Blink[:statefile] ||= "/var/tmp/blinkstate"
+ return unless File.exists?(Blink[:statefile])
+ File.open(Blink[:statefile]) { |file|
+ file.gets { |line|
+ myclass, key, value = line.split(@@splitchar)
+
+ @@state[myclass][key] = Marshal::load(value)
+ }
+ }
+ end
+
+ def Storage.state(myclass)
+ unless myclass.is_a? Class
+ myclass = myclass.class
+ end
+ result = @@state[myclass]
+ return result
+ end
+
+ def Storage.store
+ File.open(Blink[:statefile], File::CREAT|File::WRONLY, 0600) { |file|
+ @@state.each { |klass, thash|
+ thash.each { |key,value|
+ mvalue = Marshal::dump(value)
+ file.puts([klass,key,mvalue].join(@@splitchar))
+ }
+ }
+ }
+ end
+ end
+end