yunion.io/x/cloudmux@v0.3.10-0-alpha.1/pkg/multicloud/hcso/traces.go (about)

     1  // Copyright 2019 Yunion
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package hcso
    16  
    17  import (
    18  	"fmt"
    19  	"strconv"
    20  	"time"
    21  
    22  	"yunion.io/x/jsonutils"
    23  	"yunion.io/x/pkg/errors"
    24  
    25  	"yunion.io/x/cloudmux/pkg/cloudprovider"
    26  )
    27  
    28  type SUser struct {
    29  	Domain map[string]string
    30  	Name   string
    31  	Id     string
    32  }
    33  
    34  type SEvent struct {
    35  	TraceId      string
    36  	Code         string
    37  	TraceName    string
    38  	ResourceType string
    39  	ApiVersion   string
    40  	SourceIp     string
    41  	TraceType    string
    42  	ServiceType  string
    43  	EventType    string
    44  	ProjectId    string
    45  	Request      string
    46  	Response     string
    47  	TrackerName  string
    48  	TraceStatus  string
    49  	Time         int64
    50  	ResourceId   string
    51  	ResourceName string
    52  	User         SUser
    53  	RecordTime   int64
    54  }
    55  
    56  func (event *SEvent) GetName() string {
    57  	if len(event.ResourceName) > 0 {
    58  		return event.ResourceName
    59  	}
    60  	if len(event.ResourceId) > 0 {
    61  		return event.ResourceId
    62  	}
    63  	return event.TraceName
    64  }
    65  
    66  func (event *SEvent) GetService() string {
    67  	return event.ServiceType
    68  }
    69  
    70  func (event *SEvent) GetAction() string {
    71  	return event.TraceName
    72  }
    73  
    74  func (event *SEvent) GetResourceType() string {
    75  	return event.ResourceType
    76  }
    77  
    78  func (event *SEvent) GetRequestId() string {
    79  	return event.TraceId
    80  }
    81  
    82  func (event *SEvent) GetRequest() jsonutils.JSONObject {
    83  	return jsonutils.Marshal(event)
    84  }
    85  
    86  func (event *SEvent) GetAccount() string {
    87  	return event.User.Name
    88  }
    89  
    90  func (event *SEvent) IsSuccess() bool {
    91  	code, _ := strconv.Atoi(event.Code)
    92  	return code < 400
    93  }
    94  
    95  func (event *SEvent) GetCreatedAt() time.Time {
    96  	return time.Unix(event.Time/1000, event.Time%1000)
    97  }
    98  
    99  func (self *SRegion) GetICloudEvents(start time.Time, end time.Time, withReadEvent bool) ([]cloudprovider.ICloudEvent, error) {
   100  	if !self.client.isMainProject {
   101  		return nil, cloudprovider.ErrNotSupported
   102  	}
   103  	events, err := self.GetEvents(start, end)
   104  	if err != nil {
   105  		return nil, err
   106  	}
   107  	iEvents := []cloudprovider.ICloudEvent{}
   108  	for i := range events {
   109  		iEvents = append(iEvents, &events[i])
   110  	}
   111  	return iEvents, nil
   112  }
   113  
   114  func (self *SRegion) GetEvents(start time.Time, end time.Time) ([]SEvent, error) {
   115  	events := []SEvent{}
   116  	params := map[string]string{}
   117  	if start.IsZero() {
   118  		start = time.Now().AddDate(0, 0, -7)
   119  	}
   120  	if end.IsZero() {
   121  		end = time.Now()
   122  	}
   123  	params["from"] = fmt.Sprintf("%d000", start.Unix())
   124  	params["to"] = fmt.Sprintf("%d000", end.Unix())
   125  
   126  	err := doListAllWithMarker(self.ecsClient.Traces.List, params, &events)
   127  	if err != nil {
   128  		return nil, errors.Wrap(err, "doListAllWithMarker")
   129  	}
   130  	return events, nil
   131  }