UsageService.go 30 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214
  1. //
  2. // Copyright 2016, Sander van Harmelen
  3. //
  4. // Licensed under the Apache License, Version 2.0 (the "License");
  5. // you may not use this file except in compliance with the License.
  6. // You may obtain a copy of the License at
  7. //
  8. // http://www.apache.org/licenses/LICENSE-2.0
  9. //
  10. // Unless required by applicable law or agreed to in writing, software
  11. // distributed under the License is distributed on an "AS IS" BASIS,
  12. // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. // See the License for the specific language governing permissions and
  14. // limitations under the License.
  15. //
  16. package cloudstack
  17. import (
  18. "encoding/json"
  19. "fmt"
  20. "net/url"
  21. "strconv"
  22. )
  23. type AddTrafficTypeParams struct {
  24. p map[string]interface{}
  25. }
  26. func (p *AddTrafficTypeParams) toURLValues() url.Values {
  27. u := url.Values{}
  28. if p.p == nil {
  29. return u
  30. }
  31. if v, found := p.p["hypervnetworklabel"]; found {
  32. u.Set("hypervnetworklabel", v.(string))
  33. }
  34. if v, found := p.p["isolationmethod"]; found {
  35. u.Set("isolationmethod", v.(string))
  36. }
  37. if v, found := p.p["kvmnetworklabel"]; found {
  38. u.Set("kvmnetworklabel", v.(string))
  39. }
  40. if v, found := p.p["ovm3networklabel"]; found {
  41. u.Set("ovm3networklabel", v.(string))
  42. }
  43. if v, found := p.p["physicalnetworkid"]; found {
  44. u.Set("physicalnetworkid", v.(string))
  45. }
  46. if v, found := p.p["traffictype"]; found {
  47. u.Set("traffictype", v.(string))
  48. }
  49. if v, found := p.p["vlan"]; found {
  50. u.Set("vlan", v.(string))
  51. }
  52. if v, found := p.p["vmwarenetworklabel"]; found {
  53. u.Set("vmwarenetworklabel", v.(string))
  54. }
  55. if v, found := p.p["xennetworklabel"]; found {
  56. u.Set("xennetworklabel", v.(string))
  57. }
  58. return u
  59. }
  60. func (p *AddTrafficTypeParams) SetHypervnetworklabel(v string) {
  61. if p.p == nil {
  62. p.p = make(map[string]interface{})
  63. }
  64. p.p["hypervnetworklabel"] = v
  65. return
  66. }
  67. func (p *AddTrafficTypeParams) SetIsolationmethod(v string) {
  68. if p.p == nil {
  69. p.p = make(map[string]interface{})
  70. }
  71. p.p["isolationmethod"] = v
  72. return
  73. }
  74. func (p *AddTrafficTypeParams) SetKvmnetworklabel(v string) {
  75. if p.p == nil {
  76. p.p = make(map[string]interface{})
  77. }
  78. p.p["kvmnetworklabel"] = v
  79. return
  80. }
  81. func (p *AddTrafficTypeParams) SetOvm3networklabel(v string) {
  82. if p.p == nil {
  83. p.p = make(map[string]interface{})
  84. }
  85. p.p["ovm3networklabel"] = v
  86. return
  87. }
  88. func (p *AddTrafficTypeParams) SetPhysicalnetworkid(v string) {
  89. if p.p == nil {
  90. p.p = make(map[string]interface{})
  91. }
  92. p.p["physicalnetworkid"] = v
  93. return
  94. }
  95. func (p *AddTrafficTypeParams) SetTraffictype(v string) {
  96. if p.p == nil {
  97. p.p = make(map[string]interface{})
  98. }
  99. p.p["traffictype"] = v
  100. return
  101. }
  102. func (p *AddTrafficTypeParams) SetVlan(v string) {
  103. if p.p == nil {
  104. p.p = make(map[string]interface{})
  105. }
  106. p.p["vlan"] = v
  107. return
  108. }
  109. func (p *AddTrafficTypeParams) SetVmwarenetworklabel(v string) {
  110. if p.p == nil {
  111. p.p = make(map[string]interface{})
  112. }
  113. p.p["vmwarenetworklabel"] = v
  114. return
  115. }
  116. func (p *AddTrafficTypeParams) SetXennetworklabel(v string) {
  117. if p.p == nil {
  118. p.p = make(map[string]interface{})
  119. }
  120. p.p["xennetworklabel"] = v
  121. return
  122. }
  123. // You should always use this function to get a new AddTrafficTypeParams instance,
  124. // as then you are sure you have configured all required params
  125. func (s *UsageService) NewAddTrafficTypeParams(physicalnetworkid string, traffictype string) *AddTrafficTypeParams {
  126. p := &AddTrafficTypeParams{}
  127. p.p = make(map[string]interface{})
  128. p.p["physicalnetworkid"] = physicalnetworkid
  129. p.p["traffictype"] = traffictype
  130. return p
  131. }
  132. // Adds traffic type to a physical network
  133. func (s *UsageService) AddTrafficType(p *AddTrafficTypeParams) (*AddTrafficTypeResponse, error) {
  134. resp, err := s.cs.newRequest("addTrafficType", p.toURLValues())
  135. if err != nil {
  136. return nil, err
  137. }
  138. var r AddTrafficTypeResponse
  139. if err := json.Unmarshal(resp, &r); err != nil {
  140. return nil, err
  141. }
  142. // If we have a async client, we need to wait for the async result
  143. if s.cs.async {
  144. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  145. if err != nil {
  146. if err == AsyncTimeoutErr {
  147. return &r, err
  148. }
  149. return nil, err
  150. }
  151. b, err = getRawValue(b)
  152. if err != nil {
  153. return nil, err
  154. }
  155. if err := json.Unmarshal(b, &r); err != nil {
  156. return nil, err
  157. }
  158. }
  159. return &r, nil
  160. }
  161. type AddTrafficTypeResponse struct {
  162. JobID string `json:"jobid,omitempty"`
  163. Hypervnetworklabel string `json:"hypervnetworklabel,omitempty"`
  164. Id string `json:"id,omitempty"`
  165. Kvmnetworklabel string `json:"kvmnetworklabel,omitempty"`
  166. Ovm3networklabel string `json:"ovm3networklabel,omitempty"`
  167. Physicalnetworkid string `json:"physicalnetworkid,omitempty"`
  168. Traffictype string `json:"traffictype,omitempty"`
  169. Vmwarenetworklabel string `json:"vmwarenetworklabel,omitempty"`
  170. Xennetworklabel string `json:"xennetworklabel,omitempty"`
  171. }
  172. type DeleteTrafficTypeParams struct {
  173. p map[string]interface{}
  174. }
  175. func (p *DeleteTrafficTypeParams) toURLValues() url.Values {
  176. u := url.Values{}
  177. if p.p == nil {
  178. return u
  179. }
  180. if v, found := p.p["id"]; found {
  181. u.Set("id", v.(string))
  182. }
  183. return u
  184. }
  185. func (p *DeleteTrafficTypeParams) SetId(v string) {
  186. if p.p == nil {
  187. p.p = make(map[string]interface{})
  188. }
  189. p.p["id"] = v
  190. return
  191. }
  192. // You should always use this function to get a new DeleteTrafficTypeParams instance,
  193. // as then you are sure you have configured all required params
  194. func (s *UsageService) NewDeleteTrafficTypeParams(id string) *DeleteTrafficTypeParams {
  195. p := &DeleteTrafficTypeParams{}
  196. p.p = make(map[string]interface{})
  197. p.p["id"] = id
  198. return p
  199. }
  200. // Deletes traffic type of a physical network
  201. func (s *UsageService) DeleteTrafficType(p *DeleteTrafficTypeParams) (*DeleteTrafficTypeResponse, error) {
  202. resp, err := s.cs.newRequest("deleteTrafficType", p.toURLValues())
  203. if err != nil {
  204. return nil, err
  205. }
  206. var r DeleteTrafficTypeResponse
  207. if err := json.Unmarshal(resp, &r); err != nil {
  208. return nil, err
  209. }
  210. // If we have a async client, we need to wait for the async result
  211. if s.cs.async {
  212. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  213. if err != nil {
  214. if err == AsyncTimeoutErr {
  215. return &r, err
  216. }
  217. return nil, err
  218. }
  219. if err := json.Unmarshal(b, &r); err != nil {
  220. return nil, err
  221. }
  222. }
  223. return &r, nil
  224. }
  225. type DeleteTrafficTypeResponse struct {
  226. JobID string `json:"jobid,omitempty"`
  227. Displaytext string `json:"displaytext,omitempty"`
  228. Success bool `json:"success,omitempty"`
  229. }
  230. type ListTrafficTypesParams struct {
  231. p map[string]interface{}
  232. }
  233. func (p *ListTrafficTypesParams) toURLValues() url.Values {
  234. u := url.Values{}
  235. if p.p == nil {
  236. return u
  237. }
  238. if v, found := p.p["keyword"]; found {
  239. u.Set("keyword", v.(string))
  240. }
  241. if v, found := p.p["page"]; found {
  242. vv := strconv.Itoa(v.(int))
  243. u.Set("page", vv)
  244. }
  245. if v, found := p.p["pagesize"]; found {
  246. vv := strconv.Itoa(v.(int))
  247. u.Set("pagesize", vv)
  248. }
  249. if v, found := p.p["physicalnetworkid"]; found {
  250. u.Set("physicalnetworkid", v.(string))
  251. }
  252. return u
  253. }
  254. func (p *ListTrafficTypesParams) SetKeyword(v string) {
  255. if p.p == nil {
  256. p.p = make(map[string]interface{})
  257. }
  258. p.p["keyword"] = v
  259. return
  260. }
  261. func (p *ListTrafficTypesParams) SetPage(v int) {
  262. if p.p == nil {
  263. p.p = make(map[string]interface{})
  264. }
  265. p.p["page"] = v
  266. return
  267. }
  268. func (p *ListTrafficTypesParams) SetPagesize(v int) {
  269. if p.p == nil {
  270. p.p = make(map[string]interface{})
  271. }
  272. p.p["pagesize"] = v
  273. return
  274. }
  275. func (p *ListTrafficTypesParams) SetPhysicalnetworkid(v string) {
  276. if p.p == nil {
  277. p.p = make(map[string]interface{})
  278. }
  279. p.p["physicalnetworkid"] = v
  280. return
  281. }
  282. // You should always use this function to get a new ListTrafficTypesParams instance,
  283. // as then you are sure you have configured all required params
  284. func (s *UsageService) NewListTrafficTypesParams(physicalnetworkid string) *ListTrafficTypesParams {
  285. p := &ListTrafficTypesParams{}
  286. p.p = make(map[string]interface{})
  287. p.p["physicalnetworkid"] = physicalnetworkid
  288. return p
  289. }
  290. // This is a courtesy helper function, which in some cases may not work as expected!
  291. func (s *UsageService) GetTrafficTypeID(keyword string, physicalnetworkid string, opts ...OptionFunc) (string, int, error) {
  292. p := &ListTrafficTypesParams{}
  293. p.p = make(map[string]interface{})
  294. p.p["keyword"] = keyword
  295. p.p["physicalnetworkid"] = physicalnetworkid
  296. for _, fn := range opts {
  297. if err := fn(s.cs, p); err != nil {
  298. return "", -1, err
  299. }
  300. }
  301. l, err := s.ListTrafficTypes(p)
  302. if err != nil {
  303. return "", -1, err
  304. }
  305. if l.Count == 0 {
  306. return "", l.Count, fmt.Errorf("No match found for %s: %+v", keyword, l)
  307. }
  308. if l.Count == 1 {
  309. return l.TrafficTypes[0].Id, l.Count, nil
  310. }
  311. if l.Count > 1 {
  312. for _, v := range l.TrafficTypes {
  313. if v.Name == keyword {
  314. return v.Id, l.Count, nil
  315. }
  316. }
  317. }
  318. return "", l.Count, fmt.Errorf("Could not find an exact match for %s: %+v", keyword, l)
  319. }
  320. // Lists traffic types of a given physical network.
  321. func (s *UsageService) ListTrafficTypes(p *ListTrafficTypesParams) (*ListTrafficTypesResponse, error) {
  322. resp, err := s.cs.newRequest("listTrafficTypes", p.toURLValues())
  323. if err != nil {
  324. return nil, err
  325. }
  326. var r ListTrafficTypesResponse
  327. if err := json.Unmarshal(resp, &r); err != nil {
  328. return nil, err
  329. }
  330. return &r, nil
  331. }
  332. type ListTrafficTypesResponse struct {
  333. Count int `json:"count"`
  334. TrafficTypes []*TrafficType `json:"traffictype"`
  335. }
  336. type TrafficType struct {
  337. Canenableindividualservice bool `json:"canenableindividualservice,omitempty"`
  338. Destinationphysicalnetworkid string `json:"destinationphysicalnetworkid,omitempty"`
  339. Id string `json:"id,omitempty"`
  340. Name string `json:"name,omitempty"`
  341. Physicalnetworkid string `json:"physicalnetworkid,omitempty"`
  342. Servicelist []string `json:"servicelist,omitempty"`
  343. State string `json:"state,omitempty"`
  344. }
  345. type UpdateTrafficTypeParams struct {
  346. p map[string]interface{}
  347. }
  348. func (p *UpdateTrafficTypeParams) toURLValues() url.Values {
  349. u := url.Values{}
  350. if p.p == nil {
  351. return u
  352. }
  353. if v, found := p.p["hypervnetworklabel"]; found {
  354. u.Set("hypervnetworklabel", v.(string))
  355. }
  356. if v, found := p.p["id"]; found {
  357. u.Set("id", v.(string))
  358. }
  359. if v, found := p.p["kvmnetworklabel"]; found {
  360. u.Set("kvmnetworklabel", v.(string))
  361. }
  362. if v, found := p.p["ovm3networklabel"]; found {
  363. u.Set("ovm3networklabel", v.(string))
  364. }
  365. if v, found := p.p["vmwarenetworklabel"]; found {
  366. u.Set("vmwarenetworklabel", v.(string))
  367. }
  368. if v, found := p.p["xennetworklabel"]; found {
  369. u.Set("xennetworklabel", v.(string))
  370. }
  371. return u
  372. }
  373. func (p *UpdateTrafficTypeParams) SetHypervnetworklabel(v string) {
  374. if p.p == nil {
  375. p.p = make(map[string]interface{})
  376. }
  377. p.p["hypervnetworklabel"] = v
  378. return
  379. }
  380. func (p *UpdateTrafficTypeParams) SetId(v string) {
  381. if p.p == nil {
  382. p.p = make(map[string]interface{})
  383. }
  384. p.p["id"] = v
  385. return
  386. }
  387. func (p *UpdateTrafficTypeParams) SetKvmnetworklabel(v string) {
  388. if p.p == nil {
  389. p.p = make(map[string]interface{})
  390. }
  391. p.p["kvmnetworklabel"] = v
  392. return
  393. }
  394. func (p *UpdateTrafficTypeParams) SetOvm3networklabel(v string) {
  395. if p.p == nil {
  396. p.p = make(map[string]interface{})
  397. }
  398. p.p["ovm3networklabel"] = v
  399. return
  400. }
  401. func (p *UpdateTrafficTypeParams) SetVmwarenetworklabel(v string) {
  402. if p.p == nil {
  403. p.p = make(map[string]interface{})
  404. }
  405. p.p["vmwarenetworklabel"] = v
  406. return
  407. }
  408. func (p *UpdateTrafficTypeParams) SetXennetworklabel(v string) {
  409. if p.p == nil {
  410. p.p = make(map[string]interface{})
  411. }
  412. p.p["xennetworklabel"] = v
  413. return
  414. }
  415. // You should always use this function to get a new UpdateTrafficTypeParams instance,
  416. // as then you are sure you have configured all required params
  417. func (s *UsageService) NewUpdateTrafficTypeParams(id string) *UpdateTrafficTypeParams {
  418. p := &UpdateTrafficTypeParams{}
  419. p.p = make(map[string]interface{})
  420. p.p["id"] = id
  421. return p
  422. }
  423. // Updates traffic type of a physical network
  424. func (s *UsageService) UpdateTrafficType(p *UpdateTrafficTypeParams) (*UpdateTrafficTypeResponse, error) {
  425. resp, err := s.cs.newRequest("updateTrafficType", p.toURLValues())
  426. if err != nil {
  427. return nil, err
  428. }
  429. var r UpdateTrafficTypeResponse
  430. if err := json.Unmarshal(resp, &r); err != nil {
  431. return nil, err
  432. }
  433. // If we have a async client, we need to wait for the async result
  434. if s.cs.async {
  435. b, err := s.cs.GetAsyncJobResult(r.JobID, s.cs.timeout)
  436. if err != nil {
  437. if err == AsyncTimeoutErr {
  438. return &r, err
  439. }
  440. return nil, err
  441. }
  442. b, err = getRawValue(b)
  443. if err != nil {
  444. return nil, err
  445. }
  446. if err := json.Unmarshal(b, &r); err != nil {
  447. return nil, err
  448. }
  449. }
  450. return &r, nil
  451. }
  452. type UpdateTrafficTypeResponse struct {
  453. JobID string `json:"jobid,omitempty"`
  454. Hypervnetworklabel string `json:"hypervnetworklabel,omitempty"`
  455. Id string `json:"id,omitempty"`
  456. Kvmnetworklabel string `json:"kvmnetworklabel,omitempty"`
  457. Ovm3networklabel string `json:"ovm3networklabel,omitempty"`
  458. Physicalnetworkid string `json:"physicalnetworkid,omitempty"`
  459. Traffictype string `json:"traffictype,omitempty"`
  460. Vmwarenetworklabel string `json:"vmwarenetworklabel,omitempty"`
  461. Xennetworklabel string `json:"xennetworklabel,omitempty"`
  462. }
  463. type ListTrafficTypeImplementorsParams struct {
  464. p map[string]interface{}
  465. }
  466. func (p *ListTrafficTypeImplementorsParams) toURLValues() url.Values {
  467. u := url.Values{}
  468. if p.p == nil {
  469. return u
  470. }
  471. if v, found := p.p["keyword"]; found {
  472. u.Set("keyword", v.(string))
  473. }
  474. if v, found := p.p["page"]; found {
  475. vv := strconv.Itoa(v.(int))
  476. u.Set("page", vv)
  477. }
  478. if v, found := p.p["pagesize"]; found {
  479. vv := strconv.Itoa(v.(int))
  480. u.Set("pagesize", vv)
  481. }
  482. if v, found := p.p["traffictype"]; found {
  483. u.Set("traffictype", v.(string))
  484. }
  485. return u
  486. }
  487. func (p *ListTrafficTypeImplementorsParams) SetKeyword(v string) {
  488. if p.p == nil {
  489. p.p = make(map[string]interface{})
  490. }
  491. p.p["keyword"] = v
  492. return
  493. }
  494. func (p *ListTrafficTypeImplementorsParams) SetPage(v int) {
  495. if p.p == nil {
  496. p.p = make(map[string]interface{})
  497. }
  498. p.p["page"] = v
  499. return
  500. }
  501. func (p *ListTrafficTypeImplementorsParams) SetPagesize(v int) {
  502. if p.p == nil {
  503. p.p = make(map[string]interface{})
  504. }
  505. p.p["pagesize"] = v
  506. return
  507. }
  508. func (p *ListTrafficTypeImplementorsParams) SetTraffictype(v string) {
  509. if p.p == nil {
  510. p.p = make(map[string]interface{})
  511. }
  512. p.p["traffictype"] = v
  513. return
  514. }
  515. // You should always use this function to get a new ListTrafficTypeImplementorsParams instance,
  516. // as then you are sure you have configured all required params
  517. func (s *UsageService) NewListTrafficTypeImplementorsParams() *ListTrafficTypeImplementorsParams {
  518. p := &ListTrafficTypeImplementorsParams{}
  519. p.p = make(map[string]interface{})
  520. return p
  521. }
  522. // Lists implementors of implementor of a network traffic type or implementors of all network traffic types
  523. func (s *UsageService) ListTrafficTypeImplementors(p *ListTrafficTypeImplementorsParams) (*ListTrafficTypeImplementorsResponse, error) {
  524. resp, err := s.cs.newRequest("listTrafficTypeImplementors", p.toURLValues())
  525. if err != nil {
  526. return nil, err
  527. }
  528. var r ListTrafficTypeImplementorsResponse
  529. if err := json.Unmarshal(resp, &r); err != nil {
  530. return nil, err
  531. }
  532. return &r, nil
  533. }
  534. type ListTrafficTypeImplementorsResponse struct {
  535. Count int `json:"count"`
  536. TrafficTypeImplementors []*TrafficTypeImplementor `json:"traffictypeimplementor"`
  537. }
  538. type TrafficTypeImplementor struct {
  539. Traffictype string `json:"traffictype,omitempty"`
  540. Traffictypeimplementor string `json:"traffictypeimplementor,omitempty"`
  541. }
  542. type GenerateUsageRecordsParams struct {
  543. p map[string]interface{}
  544. }
  545. func (p *GenerateUsageRecordsParams) toURLValues() url.Values {
  546. u := url.Values{}
  547. if p.p == nil {
  548. return u
  549. }
  550. if v, found := p.p["domainid"]; found {
  551. u.Set("domainid", v.(string))
  552. }
  553. if v, found := p.p["enddate"]; found {
  554. u.Set("enddate", v.(string))
  555. }
  556. if v, found := p.p["startdate"]; found {
  557. u.Set("startdate", v.(string))
  558. }
  559. return u
  560. }
  561. func (p *GenerateUsageRecordsParams) SetDomainid(v string) {
  562. if p.p == nil {
  563. p.p = make(map[string]interface{})
  564. }
  565. p.p["domainid"] = v
  566. return
  567. }
  568. func (p *GenerateUsageRecordsParams) SetEnddate(v string) {
  569. if p.p == nil {
  570. p.p = make(map[string]interface{})
  571. }
  572. p.p["enddate"] = v
  573. return
  574. }
  575. func (p *GenerateUsageRecordsParams) SetStartdate(v string) {
  576. if p.p == nil {
  577. p.p = make(map[string]interface{})
  578. }
  579. p.p["startdate"] = v
  580. return
  581. }
  582. // You should always use this function to get a new GenerateUsageRecordsParams instance,
  583. // as then you are sure you have configured all required params
  584. func (s *UsageService) NewGenerateUsageRecordsParams(enddate string, startdate string) *GenerateUsageRecordsParams {
  585. p := &GenerateUsageRecordsParams{}
  586. p.p = make(map[string]interface{})
  587. p.p["enddate"] = enddate
  588. p.p["startdate"] = startdate
  589. return p
  590. }
  591. // Generates usage records. This will generate records only if there any records to be generated, i.e if the scheduled usage job was not run or failed
  592. func (s *UsageService) GenerateUsageRecords(p *GenerateUsageRecordsParams) (*GenerateUsageRecordsResponse, error) {
  593. resp, err := s.cs.newRequest("generateUsageRecords", p.toURLValues())
  594. if err != nil {
  595. return nil, err
  596. }
  597. var r GenerateUsageRecordsResponse
  598. if err := json.Unmarshal(resp, &r); err != nil {
  599. return nil, err
  600. }
  601. return &r, nil
  602. }
  603. type GenerateUsageRecordsResponse struct {
  604. Displaytext string `json:"displaytext,omitempty"`
  605. Success string `json:"success,omitempty"`
  606. }
  607. type ListUsageRecordsParams struct {
  608. p map[string]interface{}
  609. }
  610. func (p *ListUsageRecordsParams) toURLValues() url.Values {
  611. u := url.Values{}
  612. if p.p == nil {
  613. return u
  614. }
  615. if v, found := p.p["account"]; found {
  616. u.Set("account", v.(string))
  617. }
  618. if v, found := p.p["accountid"]; found {
  619. u.Set("accountid", v.(string))
  620. }
  621. if v, found := p.p["domainid"]; found {
  622. u.Set("domainid", v.(string))
  623. }
  624. if v, found := p.p["enddate"]; found {
  625. u.Set("enddate", v.(string))
  626. }
  627. if v, found := p.p["keyword"]; found {
  628. u.Set("keyword", v.(string))
  629. }
  630. if v, found := p.p["page"]; found {
  631. vv := strconv.Itoa(v.(int))
  632. u.Set("page", vv)
  633. }
  634. if v, found := p.p["pagesize"]; found {
  635. vv := strconv.Itoa(v.(int))
  636. u.Set("pagesize", vv)
  637. }
  638. if v, found := p.p["projectid"]; found {
  639. u.Set("projectid", v.(string))
  640. }
  641. if v, found := p.p["startdate"]; found {
  642. u.Set("startdate", v.(string))
  643. }
  644. if v, found := p.p["type"]; found {
  645. vv := strconv.FormatInt(v.(int64), 10)
  646. u.Set("type", vv)
  647. }
  648. if v, found := p.p["usageid"]; found {
  649. u.Set("usageid", v.(string))
  650. }
  651. return u
  652. }
  653. func (p *ListUsageRecordsParams) SetAccount(v string) {
  654. if p.p == nil {
  655. p.p = make(map[string]interface{})
  656. }
  657. p.p["account"] = v
  658. return
  659. }
  660. func (p *ListUsageRecordsParams) SetAccountid(v string) {
  661. if p.p == nil {
  662. p.p = make(map[string]interface{})
  663. }
  664. p.p["accountid"] = v
  665. return
  666. }
  667. func (p *ListUsageRecordsParams) SetDomainid(v string) {
  668. if p.p == nil {
  669. p.p = make(map[string]interface{})
  670. }
  671. p.p["domainid"] = v
  672. return
  673. }
  674. func (p *ListUsageRecordsParams) SetEnddate(v string) {
  675. if p.p == nil {
  676. p.p = make(map[string]interface{})
  677. }
  678. p.p["enddate"] = v
  679. return
  680. }
  681. func (p *ListUsageRecordsParams) SetKeyword(v string) {
  682. if p.p == nil {
  683. p.p = make(map[string]interface{})
  684. }
  685. p.p["keyword"] = v
  686. return
  687. }
  688. func (p *ListUsageRecordsParams) SetPage(v int) {
  689. if p.p == nil {
  690. p.p = make(map[string]interface{})
  691. }
  692. p.p["page"] = v
  693. return
  694. }
  695. func (p *ListUsageRecordsParams) SetPagesize(v int) {
  696. if p.p == nil {
  697. p.p = make(map[string]interface{})
  698. }
  699. p.p["pagesize"] = v
  700. return
  701. }
  702. func (p *ListUsageRecordsParams) SetProjectid(v string) {
  703. if p.p == nil {
  704. p.p = make(map[string]interface{})
  705. }
  706. p.p["projectid"] = v
  707. return
  708. }
  709. func (p *ListUsageRecordsParams) SetStartdate(v string) {
  710. if p.p == nil {
  711. p.p = make(map[string]interface{})
  712. }
  713. p.p["startdate"] = v
  714. return
  715. }
  716. func (p *ListUsageRecordsParams) SetType(v int64) {
  717. if p.p == nil {
  718. p.p = make(map[string]interface{})
  719. }
  720. p.p["usageType"] = v
  721. return
  722. }
  723. func (p *ListUsageRecordsParams) SetUsageid(v string) {
  724. if p.p == nil {
  725. p.p = make(map[string]interface{})
  726. }
  727. p.p["usageid"] = v
  728. return
  729. }
  730. // You should always use this function to get a new ListUsageRecordsParams instance,
  731. // as then you are sure you have configured all required params
  732. func (s *UsageService) NewListUsageRecordsParams(enddate string, startdate string) *ListUsageRecordsParams {
  733. p := &ListUsageRecordsParams{}
  734. p.p = make(map[string]interface{})
  735. p.p["enddate"] = enddate
  736. p.p["startdate"] = startdate
  737. return p
  738. }
  739. // Lists usage records for accounts
  740. func (s *UsageService) ListUsageRecords(p *ListUsageRecordsParams) (*ListUsageRecordsResponse, error) {
  741. resp, err := s.cs.newRequest("listUsageRecords", p.toURLValues())
  742. if err != nil {
  743. return nil, err
  744. }
  745. var r ListUsageRecordsResponse
  746. if err := json.Unmarshal(resp, &r); err != nil {
  747. return nil, err
  748. }
  749. return &r, nil
  750. }
  751. type ListUsageRecordsResponse struct {
  752. Count int `json:"count"`
  753. UsageRecords []*UsageRecord `json:"usagerecord"`
  754. }
  755. type UsageRecord struct {
  756. Account string `json:"account,omitempty"`
  757. Accountid string `json:"accountid,omitempty"`
  758. Cpunumber int64 `json:"cpunumber,omitempty"`
  759. Cpuspeed int64 `json:"cpuspeed,omitempty"`
  760. Description string `json:"description,omitempty"`
  761. Domain string `json:"domain,omitempty"`
  762. Domainid string `json:"domainid,omitempty"`
  763. Enddate string `json:"enddate,omitempty"`
  764. Isdefault bool `json:"isdefault,omitempty"`
  765. Issourcenat bool `json:"issourcenat,omitempty"`
  766. Issystem bool `json:"issystem,omitempty"`
  767. Memory int64 `json:"memory,omitempty"`
  768. Name string `json:"name,omitempty"`
  769. Networkid string `json:"networkid,omitempty"`
  770. Offeringid string `json:"offeringid,omitempty"`
  771. Project string `json:"project,omitempty"`
  772. Projectid string `json:"projectid,omitempty"`
  773. Rawusage string `json:"rawusage,omitempty"`
  774. Size int64 `json:"size,omitempty"`
  775. Startdate string `json:"startdate,omitempty"`
  776. Templateid string `json:"templateid,omitempty"`
  777. Type string `json:"type,omitempty"`
  778. Usage string `json:"usage,omitempty"`
  779. Usageid string `json:"usageid,omitempty"`
  780. Usagetype int `json:"usagetype,omitempty"`
  781. Virtualmachineid string `json:"virtualmachineid,omitempty"`
  782. Virtualsize int64 `json:"virtualsize,omitempty"`
  783. Zoneid string `json:"zoneid,omitempty"`
  784. }
  785. type ListUsageTypesParams struct {
  786. p map[string]interface{}
  787. }
  788. func (p *ListUsageTypesParams) toURLValues() url.Values {
  789. u := url.Values{}
  790. if p.p == nil {
  791. return u
  792. }
  793. return u
  794. }
  795. // You should always use this function to get a new ListUsageTypesParams instance,
  796. // as then you are sure you have configured all required params
  797. func (s *UsageService) NewListUsageTypesParams() *ListUsageTypesParams {
  798. p := &ListUsageTypesParams{}
  799. p.p = make(map[string]interface{})
  800. return p
  801. }
  802. // List Usage Types
  803. func (s *UsageService) ListUsageTypes(p *ListUsageTypesParams) (*ListUsageTypesResponse, error) {
  804. resp, err := s.cs.newRequest("listUsageTypes", p.toURLValues())
  805. if err != nil {
  806. return nil, err
  807. }
  808. var r ListUsageTypesResponse
  809. if err := json.Unmarshal(resp, &r); err != nil {
  810. return nil, err
  811. }
  812. return &r, nil
  813. }
  814. type ListUsageTypesResponse struct {
  815. Count int `json:"count"`
  816. UsageTypes []*UsageType `json:"usagetype"`
  817. }
  818. type UsageType struct {
  819. Description string `json:"description,omitempty"`
  820. Usagetypeid int `json:"usagetypeid,omitempty"`
  821. }
  822. type RemoveRawUsageRecordsParams struct {
  823. p map[string]interface{}
  824. }
  825. func (p *RemoveRawUsageRecordsParams) toURLValues() url.Values {
  826. u := url.Values{}
  827. if p.p == nil {
  828. return u
  829. }
  830. if v, found := p.p["interval"]; found {
  831. vv := strconv.Itoa(v.(int))
  832. u.Set("interval", vv)
  833. }
  834. return u
  835. }
  836. func (p *RemoveRawUsageRecordsParams) SetInterval(v int) {
  837. if p.p == nil {
  838. p.p = make(map[string]interface{})
  839. }
  840. p.p["interval"] = v
  841. return
  842. }
  843. // You should always use this function to get a new RemoveRawUsageRecordsParams instance,
  844. // as then you are sure you have configured all required params
  845. func (s *UsageService) NewRemoveRawUsageRecordsParams(interval int) *RemoveRawUsageRecordsParams {
  846. p := &RemoveRawUsageRecordsParams{}
  847. p.p = make(map[string]interface{})
  848. p.p["interval"] = interval
  849. return p
  850. }
  851. // Safely removes raw records from cloud_usage table
  852. func (s *UsageService) RemoveRawUsageRecords(p *RemoveRawUsageRecordsParams) (*RemoveRawUsageRecordsResponse, error) {
  853. resp, err := s.cs.newRequest("removeRawUsageRecords", p.toURLValues())
  854. if err != nil {
  855. return nil, err
  856. }
  857. var r RemoveRawUsageRecordsResponse
  858. if err := json.Unmarshal(resp, &r); err != nil {
  859. return nil, err
  860. }
  861. return &r, nil
  862. }
  863. type RemoveRawUsageRecordsResponse struct {
  864. Displaytext string `json:"displaytext,omitempty"`
  865. Success string `json:"success,omitempty"`
  866. }
  867. type AddTrafficMonitorParams struct {
  868. p map[string]interface{}
  869. }
  870. func (p *AddTrafficMonitorParams) toURLValues() url.Values {
  871. u := url.Values{}
  872. if p.p == nil {
  873. return u
  874. }
  875. if v, found := p.p["excludezones"]; found {
  876. u.Set("excludezones", v.(string))
  877. }
  878. if v, found := p.p["includezones"]; found {
  879. u.Set("includezones", v.(string))
  880. }
  881. if v, found := p.p["url"]; found {
  882. u.Set("url", v.(string))
  883. }
  884. if v, found := p.p["zoneid"]; found {
  885. u.Set("zoneid", v.(string))
  886. }
  887. return u
  888. }
  889. func (p *AddTrafficMonitorParams) SetExcludezones(v string) {
  890. if p.p == nil {
  891. p.p = make(map[string]interface{})
  892. }
  893. p.p["excludezones"] = v
  894. return
  895. }
  896. func (p *AddTrafficMonitorParams) SetIncludezones(v string) {
  897. if p.p == nil {
  898. p.p = make(map[string]interface{})
  899. }
  900. p.p["includezones"] = v
  901. return
  902. }
  903. func (p *AddTrafficMonitorParams) SetUrl(v string) {
  904. if p.p == nil {
  905. p.p = make(map[string]interface{})
  906. }
  907. p.p["url"] = v
  908. return
  909. }
  910. func (p *AddTrafficMonitorParams) SetZoneid(v string) {
  911. if p.p == nil {
  912. p.p = make(map[string]interface{})
  913. }
  914. p.p["zoneid"] = v
  915. return
  916. }
  917. // You should always use this function to get a new AddTrafficMonitorParams instance,
  918. // as then you are sure you have configured all required params
  919. func (s *UsageService) NewAddTrafficMonitorParams(url string, zoneid string) *AddTrafficMonitorParams {
  920. p := &AddTrafficMonitorParams{}
  921. p.p = make(map[string]interface{})
  922. p.p["url"] = url
  923. p.p["zoneid"] = zoneid
  924. return p
  925. }
  926. // Adds Traffic Monitor Host for Direct Network Usage
  927. func (s *UsageService) AddTrafficMonitor(p *AddTrafficMonitorParams) (*AddTrafficMonitorResponse, error) {
  928. resp, err := s.cs.newRequest("addTrafficMonitor", p.toURLValues())
  929. if err != nil {
  930. return nil, err
  931. }
  932. var r AddTrafficMonitorResponse
  933. if err := json.Unmarshal(resp, &r); err != nil {
  934. return nil, err
  935. }
  936. return &r, nil
  937. }
  938. type AddTrafficMonitorResponse struct {
  939. Id string `json:"id,omitempty"`
  940. Ipaddress string `json:"ipaddress,omitempty"`
  941. Numretries string `json:"numretries,omitempty"`
  942. Timeout string `json:"timeout,omitempty"`
  943. Zoneid string `json:"zoneid,omitempty"`
  944. }
  945. type DeleteTrafficMonitorParams struct {
  946. p map[string]interface{}
  947. }
  948. func (p *DeleteTrafficMonitorParams) toURLValues() url.Values {
  949. u := url.Values{}
  950. if p.p == nil {
  951. return u
  952. }
  953. if v, found := p.p["id"]; found {
  954. u.Set("id", v.(string))
  955. }
  956. return u
  957. }
  958. func (p *DeleteTrafficMonitorParams) SetId(v string) {
  959. if p.p == nil {
  960. p.p = make(map[string]interface{})
  961. }
  962. p.p["id"] = v
  963. return
  964. }
  965. // You should always use this function to get a new DeleteTrafficMonitorParams instance,
  966. // as then you are sure you have configured all required params
  967. func (s *UsageService) NewDeleteTrafficMonitorParams(id string) *DeleteTrafficMonitorParams {
  968. p := &DeleteTrafficMonitorParams{}
  969. p.p = make(map[string]interface{})
  970. p.p["id"] = id
  971. return p
  972. }
  973. // Deletes an traffic monitor host.
  974. func (s *UsageService) DeleteTrafficMonitor(p *DeleteTrafficMonitorParams) (*DeleteTrafficMonitorResponse, error) {
  975. resp, err := s.cs.newRequest("deleteTrafficMonitor", p.toURLValues())
  976. if err != nil {
  977. return nil, err
  978. }
  979. var r DeleteTrafficMonitorResponse
  980. if err := json.Unmarshal(resp, &r); err != nil {
  981. return nil, err
  982. }
  983. return &r, nil
  984. }
  985. type DeleteTrafficMonitorResponse struct {
  986. Displaytext string `json:"displaytext,omitempty"`
  987. Success string `json:"success,omitempty"`
  988. }
  989. type ListTrafficMonitorsParams struct {
  990. p map[string]interface{}
  991. }
  992. func (p *ListTrafficMonitorsParams) toURLValues() url.Values {
  993. u := url.Values{}
  994. if p.p == nil {
  995. return u
  996. }
  997. if v, found := p.p["keyword"]; found {
  998. u.Set("keyword", v.(string))
  999. }
  1000. if v, found := p.p["page"]; found {
  1001. vv := strconv.Itoa(v.(int))
  1002. u.Set("page", vv)
  1003. }
  1004. if v, found := p.p["pagesize"]; found {
  1005. vv := strconv.Itoa(v.(int))
  1006. u.Set("pagesize", vv)
  1007. }
  1008. if v, found := p.p["zoneid"]; found {
  1009. u.Set("zoneid", v.(string))
  1010. }
  1011. return u
  1012. }
  1013. func (p *ListTrafficMonitorsParams) SetKeyword(v string) {
  1014. if p.p == nil {
  1015. p.p = make(map[string]interface{})
  1016. }
  1017. p.p["keyword"] = v
  1018. return
  1019. }
  1020. func (p *ListTrafficMonitorsParams) SetPage(v int) {
  1021. if p.p == nil {
  1022. p.p = make(map[string]interface{})
  1023. }
  1024. p.p["page"] = v
  1025. return
  1026. }
  1027. func (p *ListTrafficMonitorsParams) SetPagesize(v int) {
  1028. if p.p == nil {
  1029. p.p = make(map[string]interface{})
  1030. }
  1031. p.p["pagesize"] = v
  1032. return
  1033. }
  1034. func (p *ListTrafficMonitorsParams) SetZoneid(v string) {
  1035. if p.p == nil {
  1036. p.p = make(map[string]interface{})
  1037. }
  1038. p.p["zoneid"] = v
  1039. return
  1040. }
  1041. // You should always use this function to get a new ListTrafficMonitorsParams instance,
  1042. // as then you are sure you have configured all required params
  1043. func (s *UsageService) NewListTrafficMonitorsParams(zoneid string) *ListTrafficMonitorsParams {
  1044. p := &ListTrafficMonitorsParams{}
  1045. p.p = make(map[string]interface{})
  1046. p.p["zoneid"] = zoneid
  1047. return p
  1048. }
  1049. // List traffic monitor Hosts.
  1050. func (s *UsageService) ListTrafficMonitors(p *ListTrafficMonitorsParams) (*ListTrafficMonitorsResponse, error) {
  1051. resp, err := s.cs.newRequest("listTrafficMonitors", p.toURLValues())
  1052. if err != nil {
  1053. return nil, err
  1054. }
  1055. var r ListTrafficMonitorsResponse
  1056. if err := json.Unmarshal(resp, &r); err != nil {
  1057. return nil, err
  1058. }
  1059. return &r, nil
  1060. }
  1061. type ListTrafficMonitorsResponse struct {
  1062. Count int `json:"count"`
  1063. TrafficMonitors []*TrafficMonitor `json:"trafficmonitor"`
  1064. }
  1065. type TrafficMonitor struct {
  1066. Id string `json:"id,omitempty"`
  1067. Ipaddress string `json:"ipaddress,omitempty"`
  1068. Numretries string `json:"numretries,omitempty"`
  1069. Timeout string `json:"timeout,omitempty"`
  1070. Zoneid string `json:"zoneid,omitempty"`
  1071. }