@@ -19,6 +19,7 @@ package resource
19
19
import (
20
20
"encoding/json"
21
21
"fmt"
22
+ "http"
22
23
"io"
23
24
"net/url"
24
25
"strconv"
@@ -29,7 +30,9 @@ import (
29
30
"github.com/op/go-logging"
30
31
"gopkg.in/yaml.v2"
31
32
33
+ ctrlCommon "github.com/deepflowio/deepflow/server/controller/common"
32
34
"github.com/deepflowio/deepflow/server/controller/config"
35
+ configs "github.com/deepflowio/deepflow/server/controller/config/common"
33
36
metadbcommon "github.com/deepflowio/deepflow/server/controller/db/metadb/common"
34
37
httpcommon "github.com/deepflowio/deepflow/server/controller/http/common"
35
38
"github.com/deepflowio/deepflow/server/controller/http/common/response"
@@ -64,11 +67,11 @@ func (d *Domain) RegisterTo(e *gin.Engine) {
64
67
e .PATCH ("/v2/sub-domains/:lcuuid/" , updateSubDomain (d .cfg ))
65
68
e .DELETE ("/v2/sub-domains/:lcuuid/" , deleteSubDomain (d .cfg ))
66
69
67
- e .PUT ("/v1/domain-additional-resources/" , applyDomainAddtionalResource )
68
- e .GET ("/v1/domain-additional-resources/" , listDomainAddtionalResource )
70
+ e .PUT ("/v1/domain-additional-resources/" , applyDomainAdditionalResource ( d . cfg . MonitorCfg . Warrant ) )
71
+ e .GET ("/v1/domain-additional-resources/" , listDomainAdditionalResource )
69
72
e .GET ("/v1/domain-additional-resources/example/" , GetDomainAdditionalResourceExample )
70
- e .PATCH ("/v1/domain-additional-resources/advanced/" , updateDomainAddtionalResourceAdvanced )
71
- e .GET ("/v1/domain-additional-resources/advanced/" , getDomainAddtionalResourceAdvanced )
73
+ e .PATCH ("/v1/domain-additional-resources/advanced/" , updateDomainAdditionalResourceAdvanced ( d . cfg . MonitorCfg . Warrant ) )
74
+ e .GET ("/v1/domain-additional-resources/advanced/" , getDomainAdditionalResourceAdvanced )
72
75
}
73
76
74
77
func getDomain (cfg * config.ControllerConfig ) gin.HandlerFunc {
@@ -397,37 +400,44 @@ func updateSubDomain(cfg *config.ControllerConfig) gin.HandlerFunc {
397
400
})
398
401
}
399
402
400
- func applyDomainAddtionalResource (c * gin.Context ) {
401
- b , err := io .ReadAll (c .Request .Body )
402
- if err != nil {
403
- response .JSON (c , response .SetOptStatus (httpcommon .SERVER_ERROR ), response .SetError (err ))
404
- return
405
- }
406
- err = common .CheckJSONParam (string (b ), model.AdditionalResource {})
407
- if err != nil {
408
- response .JSON (c , response .SetOptStatus (httpcommon .INVALID_PARAMETERS ), response .SetError (err ))
409
- return
410
- }
403
+ func applyDomainAdditionalResource (warrantCfg configs.Warrant ) gin.HandlerFunc {
404
+ return gin .HandlerFunc (func (c * gin.Context ) {
405
+ if err := checkCMDBLicense (warrantCfg ); err != nil {
406
+ response .JSON (c , response .SetOptStatus (httpcommon .NO_LICENSE ), response .SetError (err ))
407
+ return
408
+ }
411
409
412
- var data model.AdditionalResource
413
- err = json .Unmarshal (b , & data )
414
- // invalidate request body
415
- if err != nil {
416
- response .JSON (c , response .SetOptStatus (httpcommon .INVALID_PARAMETERS ), response .SetError (err ))
417
- return
418
- }
410
+ b , err := io .ReadAll (c .Request .Body )
411
+ if err != nil {
412
+ response .JSON (c , response .SetOptStatus (httpcommon .SERVER_ERROR ), response .SetError (err ))
413
+ return
414
+ }
415
+ err = common .CheckJSONParam (string (b ), model.AdditionalResource {})
416
+ if err != nil {
417
+ response .JSON (c , response .SetOptStatus (httpcommon .INVALID_PARAMETERS ), response .SetError (err ))
418
+ return
419
+ }
419
420
420
- db , err := common .GetContextOrgDB (c )
421
- if err != nil {
422
- response .JSON (c , response .SetOptStatus (httpcommon .GET_ORG_DB_FAIL ), response .SetError (err ))
423
- return
424
- }
421
+ var data model.AdditionalResource
422
+ err = json .Unmarshal (b , & data )
423
+ // invalidate request body
424
+ if err != nil {
425
+ response .JSON (c , response .SetOptStatus (httpcommon .INVALID_PARAMETERS ), response .SetError (err ))
426
+ return
427
+ }
428
+
429
+ db , err := common .GetContextOrgDB (c )
430
+ if err != nil {
431
+ response .JSON (c , response .SetOptStatus (httpcommon .GET_ORG_DB_FAIL ), response .SetError (err ))
432
+ return
433
+ }
425
434
426
- err = resource .ApplyDomainAddtionalResource (data , db )
427
- response .JSON (c , response .SetError (err ))
435
+ err = resource .ApplyDomainAdditionalResource (data , db )
436
+ response .JSON (c , response .SetError (err ))
437
+ })
428
438
}
429
439
430
- func listDomainAddtionalResource (c * gin.Context ) {
440
+ func listDomainAdditionalResource (c * gin.Context ) {
431
441
var resourceType , resourceName string
432
442
t , ok := c .GetQuery ("type" )
433
443
if ok {
@@ -457,38 +467,45 @@ func GetDomainAdditionalResourceExample(c *gin.Context) {
457
467
response .JSON (c , response .SetData (data ), response .SetError (err ))
458
468
}
459
469
460
- func updateDomainAddtionalResourceAdvanced (c * gin.Context ) {
461
- db , err := common .GetContextOrgDB (c )
462
- if err != nil {
463
- response .JSON (c , response .SetOptStatus (httpcommon .GET_ORG_DB_FAIL ), response .SetError (err ))
464
- return
465
- }
466
-
467
- data := & model.AdditionalResource {}
468
- err = c .ShouldBindBodyWith (& data , binding .YAML )
469
- if err == nil || err == io .EOF {
470
- if err = resource .ApplyDomainAddtionalResource (* data , db ); err != nil {
471
- response .JSON (c , response .SetError (err ))
470
+ func updateDomainAdditionalResourceAdvanced (warrantCfg configs.Warrant ) gin.HandlerFunc {
471
+ return gin .HandlerFunc (func (c * gin.Context ) {
472
+ if err := checkCMDBLicense (warrantCfg ); err != nil {
473
+ response .JSON (c , response .SetOptStatus (httpcommon .NO_LICENSE ), response .SetError (err ))
472
474
return
473
475
}
474
- d , err := resource .GetDomainAdditionalResource ("" , "" , db )
476
+
477
+ db , err := common .GetContextOrgDB (c )
475
478
if err != nil {
476
- response .JSON (c , response .SetError (err ))
479
+ response .JSON (c , response .SetOptStatus ( httpcommon . GET_ORG_DB_FAIL ), response . SetError (err ))
477
480
return
478
481
}
479
- b , err := yaml .Marshal (d )
480
- if err != nil {
481
- response .JSON (c , response .SetError (err ))
482
+
483
+ data := & model.AdditionalResource {}
484
+ err = c .ShouldBindBodyWith (& data , binding .YAML )
485
+ if err == nil || err == io .EOF {
486
+ if err = resource .ApplyDomainAdditionalResource (* data , db ); err != nil {
487
+ response .JSON (c , response .SetError (err ))
488
+ return
489
+ }
490
+ d , err := resource .GetDomainAdditionalResource ("" , "" , db )
491
+ if err != nil {
492
+ response .JSON (c , response .SetError (err ))
493
+ return
494
+ }
495
+ b , err := yaml .Marshal (d )
496
+ if err != nil {
497
+ response .JSON (c , response .SetError (err ))
498
+ return
499
+ }
500
+ response .JSON (c , response .SetData (string (b ))) // TODO 不需要转换类型
501
+ } else {
502
+ response .JSON (c , response .SetOptStatus (httpcommon .INVALID_PARAMETERS ), response .SetError (err ))
482
503
return
483
504
}
484
- response .JSON (c , response .SetData (string (b ))) // TODO 不需要转换类型
485
- } else {
486
- response .JSON (c , response .SetOptStatus (httpcommon .INVALID_PARAMETERS ), response .SetError (err ))
487
- return
488
- }
505
+ })
489
506
}
490
507
491
- func getDomainAddtionalResourceAdvanced (c * gin.Context ) {
508
+ func getDomainAdditionalResourceAdvanced (c * gin.Context ) {
492
509
db , err := common .GetContextOrgDB (c )
493
510
if err != nil {
494
511
response .JSON (c , response .SetOptStatus (httpcommon .GET_ORG_DB_FAIL ), response .SetError (err ))
@@ -507,3 +524,29 @@ func getDomainAddtionalResourceAdvanced(c *gin.Context) {
507
524
}
508
525
response .JSON (c , response .SetData (string (b ))) // TODO 不需要转换类型
509
526
}
527
+
528
+ func checkCMDBLicense (warrantCfg configs.Warrant ) error {
529
+ if ! warrantCfg .Enabled {
530
+ return nil
531
+ }
532
+ body := make (map [string ]interface {})
533
+ response , err := ctrlCommon .CURLPerform (
534
+ http .MethodGet ,
535
+ fmt .Sprintf (
536
+ "http://%s:%d/licensedata" ,
537
+ warrantCfg .Host , warrantCfg .Port ,
538
+ ),
539
+ body ,
540
+ )
541
+ if err != nil {
542
+ return err
543
+ }
544
+ for k , v := range response .Get ("DATA" ).Get ("LICENSE" ).MustMap () {
545
+ if k == "ASSET_CMDB_COUNT" {
546
+ if v .(int ) != 0 {
547
+ return nil
548
+ }
549
+ }
550
+ }
551
+ return fmt .Errorf ("no license for cmdb" )
552
+ }
0 commit comments