2020-05-23 02:14:11 +00:00
/ *
2020-05-25 16:19:20 +00:00
Copyright 2020 Qiniu Cloud ( qiniu . com )
2020-05-23 02:14:11 +00:00
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
package cmd
import (
"bytes"
"fmt"
2020-06-13 10:15:51 +00:00
log "github.com/sirupsen/logrus"
2020-06-13 13:22:00 +00:00
"io"
2020-05-23 02:14:11 +00:00
"os"
"github.com/qiniu/goc/pkg/cover"
"github.com/spf13/cobra"
)
var profileCmd = & cobra . Command {
Use : "profile" ,
Short : "Get coverage profile from service registry center" ,
2020-05-29 02:50:15 +00:00
Long : ` Get code coverage profile for the services under test at runtime. ` ,
Example : `
# Get coverage counter from default register center http : //127.0.0.1:7777, the result output to stdout.
goc profile
# Get coverage counter from specified register center , the result output to specified file .
goc profile -- center = http : //192.168.1.1:8080 --output=./coverage.cov
2020-07-10 07:17:14 +00:00
2020-07-16 12:58:58 +00:00
# Get coverage counter of several specified services . You can get all available service names from command ' goc list ' . Use ' service ' and ' address ' flag at the same time may cause ambiguity , please use them separately .
2020-07-16 04:19:26 +00:00
goc profile -- service = service1 , service2 , service3
2020-07-10 07:17:14 +00:00
2020-07-16 12:58:58 +00:00
# Get coverage counter of several specified addresses . You can get all available addresses from command ' goc list ' . Use ' service ' and ' address ' flag at the same time may cause ambiguity , please use them separately .
2020-07-16 04:19:26 +00:00
goc profile -- address = address1 , address2 , address3
2020-07-10 07:17:14 +00:00
2020-07-16 04:19:26 +00:00
# Force to get the coverage counter of all the available services you want .
2020-07-10 07:17:14 +00:00
goc profile -- force
2020-05-29 02:50:15 +00:00
` ,
2020-05-23 02:14:11 +00:00
Run : func ( cmd * cobra . Command , args [ ] string ) {
2020-07-09 12:55:07 +00:00
p := cover . ProfileParam {
Force : force ,
2020-07-10 07:17:14 +00:00
Service : svrList ,
Address : addrList ,
2020-07-09 12:55:07 +00:00
}
res , err := cover . NewWorker ( center ) . Profile ( p )
2020-05-23 02:14:11 +00:00
if err != nil {
log . Fatalf ( "call host %v failed, err: %v, response: %v" , center , err , string ( res ) )
}
if output == "" {
fmt . Fprint ( os . Stdout , string ( res ) )
} else {
f , err := os . Create ( output )
if err != nil {
log . Fatalf ( "failed to create file %s, err:%v" , output , err )
}
defer f . Close ( )
_ , err = io . Copy ( f , bytes . NewReader ( res ) )
if err != nil {
log . Fatalf ( "failed to write file: %v, err: %v" , output , err )
}
}
} ,
}
var output string
2020-07-09 12:55:07 +00:00
var force bool
2020-07-10 07:17:14 +00:00
var svrList [ ] string
var addrList [ ] string
2020-05-23 02:14:11 +00:00
func init ( ) {
profileCmd . Flags ( ) . StringVarP ( & output , "output" , "o" , "" , "download cover profile" )
2020-07-16 12:58:58 +00:00
profileCmd . Flags ( ) . StringSliceVarP ( & svrList , "service" , "" , nil , "get the cover profile of these services, you can get all available service names from command `goc list`, use this flag and 'address' flag at the same time may cause ambiguity, please use them separately." )
profileCmd . Flags ( ) . StringSliceVarP ( & addrList , "address" , "" , nil , "get the cover profile of these addresses, you can get all available addresses from command `goc list`, use this flag and 'service' flag at the same time may cause ambiguity, please use them separately." )
2020-07-16 04:19:26 +00:00
profileCmd . Flags ( ) . BoolVarP ( & force , "force" , "f" , false , "force to get the coverage counter of all the available services you want" )
2020-06-12 09:51:10 +00:00
addBasicFlags ( profileCmd . Flags ( ) )
2020-05-23 02:14:11 +00:00
rootCmd . AddCommand ( profileCmd )
}