Updated list of upstream contributions in Blazar
[promise.git] / deprecated / source / spec / promise-module.coffee
1 #
2 # Author: Peter K. Lee (peter@corenova.com)
3 #
4 # All rights reserved. This program and the accompanying materials
5 # are made available under the terms of the Apache License, Version 2.0
6 # which accompanies this distribution, and is available at
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 module.exports =
10   '/opnfv-promise/promise/capacity/total': (prev) ->
11     @computed (->
12       combine = (a, b) ->
13         for k, v of b.capacity when v?
14           a[k] ?= 0
15           a[k] += v
16         return a
17       (@parent.get 'pools')
18       .filter (entry) -> entry.active is true
19       .reduce combine, {}
20     ), type: prev
21
22   '/opnfv-promise/promise/capacity/reserved', (prev) ->
23     @computed (->
24       combine = (a, b) ->
25         for k, v of b.capacity when v?
26           a[k] ?= 0
27           a[k] += v
28         return a
29       (@parent.get 'reservations')
30       .filter (entry) -> entry.active is true
31       .reduce combine, {}
32     ), type: prev
33
34   # rebind to be a computed property
35   '/opnfv-promise/promise/capacity/usage': (prev) ->
36     @computed (->
37       combine = (a, b) ->
38         for k, v of b.capacity when v?
39           a[k] ?= 0
40           a[k] += v
41         return a
42       (@parent.get 'allocations')
43       .filter (entry) -> entry.active is true
44       .reduce combine, {}
45     ), type: prev
46
47   # rebind to be a computed property
48   '/opnfv-promise/promise/capacity/available': (prev) ->
49     @computed (->
50       total = @get 'total'
51       reserved = @get 'reserved'
52       usage = @get 'usage'
53       for k, v of total when v?
54         total[k] -= reserved[k] if reserved[k]?
55         total[k] -= usage[k] if usage[k]?
56       total
57     ), type: prev
58
59   '/opnfv-promise/create-reservation':
60     (input, output, done) ->
61       # 1. create the reservation record (empty)
62       reservation = @create 'ResourceReservation'
63       reservations = @access 'promise.reservations'
64
65       # 2. update the record with requested input
66       reservation.invoke 'update', input.get()
67       .then (res) ->
68         # 3. save the record and add to list
69         res.save()
70         .then ->
71           reservations.push res
72           output.set result: 'ok', message: 'reservation request accepted'
73           output.set 'reservation-id', res.id
74           done()
75         .catch (err) ->
76           output.set result: 'error', message: err
77           done()
78       .catch (err) ->
79         output.set result: 'conflict', message: err
80         done()