added copy of github.com/opnfv/promise source into the source directory
[promise.git] / source / spec / promise-module.coffee
1 module.exports =
2   '/opnfv-promise/promise/capacity/total': (prev) ->
3     @computed (->
4       combine = (a, b) ->
5         for k, v of b.capacity when v?
6           a[k] ?= 0
7           a[k] += v
8         return a
9       (@parent.get 'pools')
10       .filter (entry) -> entry.active is true
11       .reduce combine, {}
12     ), type: prev
13
14   '/opnfv-promise/promise/capacity/reserved', (prev) ->
15     @computed (->
16       combine = (a, b) ->
17         for k, v of b.capacity when v?
18           a[k] ?= 0
19           a[k] += v
20         return a
21       (@parent.get 'reservations')
22       .filter (entry) -> entry.active is true
23       .reduce combine, {}
24     ), type: prev
25
26   # rebind to be a computed property
27   '/opnfv-promise/promise/capacity/usage': (prev) ->
28     @computed (->
29       combine = (a, b) ->
30         for k, v of b.capacity when v?
31           a[k] ?= 0
32           a[k] += v
33         return a
34       (@parent.get 'allocations')
35       .filter (entry) -> entry.active is true
36       .reduce combine, {}
37     ), type: prev
38
39   # rebind to be a computed property
40   '/opnfv-promise/promise/capacity/available': (prev) ->
41     @computed (->
42       total = @get 'total'
43       reserved = @get 'reserved'
44       usage = @get 'usage'
45       for k, v of total when v?
46         total[k] -= reserved[k] if reserved[k]?
47         total[k] -= usage[k] if usage[k]?
48       total
49     ), type: prev
50
51   '/opnfv-promise/create-reservation':
52     (input, output, done) ->
53       # 1. create the reservation record (empty)
54       reservation = @create 'ResourceReservation'
55       reservations = @access 'promise.reservations'
56
57       # 2. update the record with requested input
58       reservation.invoke 'update', input.get()
59       .then (res) ->
60         # 3. save the record and add to list
61         res.save()
62         .then ->
63           reservations.push res
64           output.set result: 'ok', message: 'reservation request accepted'
65           output.set 'reservation-id', res.id
66           done()
67         .catch (err) ->
68           output.set result: 'error', message: err
69           done()
70       .catch (err) ->
71         output.set result: 'conflict', message: err
72         done()