Class: XmlConv::Util::Application

Inherits:
Object
  • Object
show all
Includes:
ODBA::Persistable
Defined in:
lib/xmlconv/util/application.rb

Constant Summary collapse

ODBA_EXCLUDE_VARS =
['@next_transaction_id', '@id_mutex']

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeApplication

Returns a new instance of Application.



28
29
30
31
# File 'lib/xmlconv/util/application.rb', line 28

def initialize
	@transactions = []
	@failed_transactions = []
end

Instance Attribute Details

#failed_transactionsObject (readonly)

Returns the value of attribute failed_transactions.



25
26
27
# File 'lib/xmlconv/util/application.rb', line 25

def failed_transactions
  @failed_transactions
end

#transactionsObject (readonly)

Returns the value of attribute transactions.



25
26
27
# File 'lib/xmlconv/util/application.rb', line 25

def transactions
  @transactions
end

Instance Method Details

#_execute(transaction) ⇒ Object

survive notification failure



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/xmlconv/util/application.rb', line 41

def _execute(transaction)
  has_error = false
  transaction.transaction_id = next_transaction_id
  SBSM.info "Starting_transaction #{transaction.transaction_id}"
  transaction.execute
  res = transaction.postprocess
  SBSM.info "Postprocessed_transaction #{transaction.transaction_id} res #{res.class}"
  res
rescue Exception => error
  has_error = true
  SBSM.info "error_transaction #{transaction.transaction_id} error #{error} \n#{error.backtrace}"
  transaction.error = error
ensure
  res = ODBA.transaction {
    transaction.odba_store
    @transactions.push(transaction)
    @transactions.odba_isolated_store
  }
  SBSM.info "has_error_transaction is #{has_error} #{transaction.transaction_id} res is #{res.class}" if has_error
  res
end

#execute(transaction) ⇒ Object



35
36
37
38
39
40
# File 'lib/xmlconv/util/application.rb', line 35

def execute(transaction)
	_execute(transaction)
	transaction.notify
rescue Exception => error
	## survive notification failure
end

#export_orders(first = Time.local(1990,1,1), last = Time.local(2037,1,1), output_file = nil) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/xmlconv/util/application.rb', line 89

def export_orders(first=Time.local(1990,1,1), last=Time.local(2037,1,1), output_file=nil)
  range=Range.new(first, last)
  output_file ||= "/home/ywesee/xmlconv_export/xmlconv_export.csv"
  open(output_file, "w") do |f|
    self.transactions.reverse.each do |t|
      if range.include?(t.commit_time)
        f.print t.output
      end
    end
  end
end

#initObject



32
33
34
# File 'lib/xmlconv/util/application.rb', line 32

def init
	@id_mutex = Mutex.new
end

#next_transaction_idObject



62
63
64
65
66
67
68
69
# File 'lib/xmlconv/util/application.rb', line 62

def next_transaction_id
	@id_mutex.synchronize {
		@next_transaction_id ||= @transactions.collect { |transaction|
			transaction.transaction_id.to_i
		}.max.to_i
		@next_transaction_id += 1
	}
end

#send_invoice(time_range, date = Date.today) ⇒ Object



83
84
85
86
87
88
# File 'lib/xmlconv/util/application.rb', line 83

def send_invoice(time_range, date = Date.today)
  transactions = @transactions.select { |trans|
    time_range.include?(trans.commit_time)
  }
  Util::Invoicer.run(time_range, transactions, date)
end

#transaction(transaction_id) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/xmlconv/util/application.rb', line 70

def transaction(transaction_id)
	transaction_id = transaction_id.to_i
	if((last_id = @transactions.last.transaction_id) \
		&& (last_id >= transaction_id))
		start = (transaction_id - last_id - 1)
		if(start + @transactions.size < 0)
			start = 0
		end
		@transactions[start..-1].each { |trans|
			return trans if(trans.transaction_id == transaction_id)
		}
	end
end