Guest User

Untitled

a guest
Oct 24th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.08 KB | None | 0 0
  1. import logger from '../utils/logger'
  2. import {configurationModel} from '../models/replicationConfig.model'
  3. import errorCodes from '../utils/ErrorCodes.json'
  4.  
  5. /**
  6. * Adds a configuration for replicating blocks from the underlying Blockchain to HANA
  7. * @param req request
  8. * @param res response next handler
  9. */
  10. export function createConfiguration(req, res) {
  11. const config = req.swagger.params.configuration.value
  12. const confDoc = new configurationModel(config)
  13. confDoc.save((err, conf) => {
  14.  
  15. if (err) {
  16. // duplicate key
  17. if (err.code === 11000) {
  18. logger.error("ConfigurationService::22 ::", err)
  19. const retErr = {
  20. code: `ConfigurationService:`,
  21. message: errorCodes[302]
  22. }
  23. res.status(400).json(retErr)
  24.  
  25. } else {
  26. logger.error("ConfigurationService::38 ::", err)
  27. const retErr = {
  28. code: `ConfigurationService:`,
  29. message: errorCodes[300]
  30. }
  31. res.status(400).json(retErr)
  32.  
  33. }
  34. }
  35.  
  36. else {
  37. configurationModel.findById(conf._doc._id).select('-_id -__v').exec((err, resConfig) => {
  38. // is there an issue?
  39. if (err) {
  40. logger.error("ConfigurationService::39 ::", err)
  41. const retErr = {
  42. code: `ConfigurationService:`,
  43. message: errorCodes[301]
  44. }
  45. res.status(400).json(retErr)
  46.  
  47. }
  48. // all good
  49. else {
  50. res.status(200).json(resConfig)
  51. }
  52. })
  53. }
  54. })
  55.  
  56. }
  57.  
  58. export async function getConfiguration(req, res) {
  59. /**
  60. * Returns the HANA table names used for replication as configured in the SCP user interface
  61. *
  62. * returns ReplicationConfigurations
  63. **/
  64.  
  65. const messageTypes = await getMessageTypes(req)
  66.  
  67. // todo can there be more configurations?
  68. configurationModel.find().select('-_id -__v -messages').exec((err, configurations) => {
  69. if (err) {
  70.  
  71. logger.error("ConfigurationService::88 ::", err)
  72. const retErr = {
  73. code: `ConfigurationService:`,
  74. message: errorCodes[300]
  75. }
  76.  
  77. res.status(404).json(retErr)
  78. }
  79.  
  80. else {
  81. const result = {}
  82. result.configs = []
  83. configurations.forEach(c => {
  84. // logger.silly(c)
  85. c._doc.messages = messageTypes
  86. result.configs.push(c)
  87. })
  88.  
  89.  
  90. res.status(200).json(result)
  91. }
  92. })
  93.  
  94. }
  95.  
  96.  
  97. async function getMessageTypes(req) {
  98.  
  99. const messageSchemas = [],
  100. noMessagesCC = []
  101.  
  102. await req.fc.getInstantiatedChaincodes().then(async chainCodes => {
  103. const revDnsPre = 'com.sap.icn.blockchain'
  104. const channelName = req.fc._channel.getName()
  105.  
  106. logger.silly(`chaincodes in channel ${channelName}:`, chainCodes)
  107.  
  108. for (let cCode of chainCodes) {
  109.  
  110. try {
  111. const request = {
  112. chaincodeId: cCode.name,
  113. chaincodeVersion: cCode.version,
  114. channel: process.env.HL_DEFAULT_CHANNEL_NAME,
  115. fcn: "$sql",
  116. args: ["SCHEMA"]
  117. }
  118. // logger.silly(`Requesting message schema for ${request.toString()}`)
  119.  
  120. await req.fc._channel.queryByChaincode(request)
  121. .then((response_payloads) => {
  122. for (let i = 0; i < response_payloads.length; i++) {
  123. // logger.silly('code, request', response_payloads[i].code, request)
  124. // logger.silly(util.format('Query result from peer [%s]: %s', i, response_payloads[i].toString('utf8')))
  125. // only handle successfull calls
  126. if (response_payloads[i].code !== 2) {
  127. const messages = JSON.parse(response_payloads[i].toString('utf8'))
  128. for (let m of messages.messages) {
  129. m.type = `${revDnsPre}.${channelName}.${cCode.name}`
  130. }
  131. messageSchemas.push(messages)
  132.  
  133. } else {
  134. noMessagesCC.push(request)
  135. }
  136. }
  137. }).catch(
  138. (rejectMessage) => {
  139. noMessagesCC.push(request)
  140. }
  141. )
  142. } catch (err) {
  143.  
  144. logger.error("ConfigurationService::139 ::", err)
  145. const retErr = {
  146. code: `ConfigurationService:`,
  147. message: err.message
  148. }
  149. }
  150.  
  151. }
  152. })
  153.  
  154. // logger.silly(`positive response`, messages)
  155. // logger.silly(`negative response`, noMessagesCC)
  156.  
  157. return messageSchemas
  158.  
  159. }
Add Comment
Please, Sign In to add comment