| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156 |
- // Copyright 2017 Google Inc. All Rights Reserved.
- //
- // 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.
- // summarize is a tool for summarizing the results of gnostic_analyze runs.
- package main
- import (
- "encoding/json"
- "fmt"
- "io/ioutil"
- "os"
- "path"
- "path/filepath"
- "sort"
- "github.com/googleapis/gnostic/plugins/gnostic-analyze/statistics"
- )
- // Results are collected in this global slice.
- var stats []statistics.DocumentStatistics
- // walker is called for each summary file found.
- func walker(p string, info os.FileInfo, err error) error {
- basename := path.Base(p)
- if basename != "summary.json" {
- return nil
- }
- data, err := ioutil.ReadFile(p)
- if err != nil {
- return err
- }
- var s statistics.DocumentStatistics
- err = json.Unmarshal(data, &s)
- if err != nil {
- return err
- }
- stats = append(stats, s)
- return nil
- }
- func printFrequencies(m map[string]int) {
- for _, pair := range rankByCount(m) {
- fmt.Printf("%6d %s\n", pair.Value, pair.Key)
- }
- }
- func rankByCount(frequencies map[string]int) pairList {
- pl := make(pairList, len(frequencies))
- i := 0
- for k, v := range frequencies {
- pl[i] = pair{k, v}
- i++
- }
- sort.Sort(sort.Reverse(pl))
- return pl
- }
- type pair struct {
- Key string
- Value int
- }
- type pairList []pair
- func (p pairList) Len() int { return len(p) }
- func (p pairList) Less(i, j int) bool { return p[i].Value < p[j].Value }
- func (p pairList) Swap(i, j int) { p[i], p[j] = p[j], p[i] }
- func main() {
- // Collect all statistics in the current directory and its subdirectories.
- stats = make([]statistics.DocumentStatistics, 0)
- filepath.Walk(".", walker)
- // Compute some interesting properties.
- apisWithAnonymousOperations := 0
- apisWithAnonymousObjects := 0
- apisWithAnonymousAnything := 0
- opFrequencies := make(map[string]int, 0)
- parameterTypeFrequencies := make(map[string]int, 0)
- resultTypeFrequencies := make(map[string]int, 0)
- definitionFieldTypeFrequencies := make(map[string]int, 0)
- definitionArrayTypeFrequencies := make(map[string]int, 0)
- definitionPrimitiveTypeFrequencies := make(map[string]int, 0)
- for _, api := range stats {
- if api.Operations["anonymous"] != 0 {
- apisWithAnonymousOperations++
- }
- if len(api.AnonymousObjects) > 0 {
- apisWithAnonymousObjects++
- }
- if len(api.AnonymousOperations) > 0 {
- apisWithAnonymousAnything++
- if len(api.AnonymousObjects) > 0 {
- fmt.Printf("%s has anonymous operations and objects\n", api.Name)
- } else {
- fmt.Printf("%s has anonymous operations\n", api.Name)
- }
- } else {
- if len(api.AnonymousObjects) > 0 {
- apisWithAnonymousAnything++
- fmt.Printf("%s has anonymous objects\n", api.Name)
- } else {
- fmt.Printf("%s has no anonymous operations or objects\n", api.Name)
- }
- }
- for k, v := range api.Operations {
- opFrequencies[k] += v
- }
- for k, v := range api.ParameterTypes {
- parameterTypeFrequencies[k] += v
- }
- for k, v := range api.ResultTypes {
- resultTypeFrequencies[k] += v
- }
- for k, v := range api.DefinitionFieldTypes {
- definitionFieldTypeFrequencies[k] += v
- }
- for k, v := range api.DefinitionArrayTypes {
- definitionArrayTypeFrequencies[k] += v
- }
- for k, v := range api.DefinitionPrimitiveTypes {
- definitionPrimitiveTypeFrequencies[k] += v
- }
- }
- // Report the results.
- fmt.Printf("\n")
- fmt.Printf("Collected information on %d APIs.\n\n", len(stats))
- fmt.Printf("APIs with anonymous operations: %d\n", apisWithAnonymousOperations)
- fmt.Printf("APIs with anonymous objects: %d\n", apisWithAnonymousObjects)
- fmt.Printf("APIs with anonymous anything: %d\n", apisWithAnonymousAnything)
- fmt.Printf("\nOperation frequencies:\n")
- printFrequencies(opFrequencies)
- fmt.Printf("\nParameter type frequencies:\n")
- printFrequencies(parameterTypeFrequencies)
- fmt.Printf("\nResult type frequencies:\n")
- printFrequencies(resultTypeFrequencies)
- fmt.Printf("\nDefinition object field type frequencies:\n")
- printFrequencies(definitionFieldTypeFrequencies)
- fmt.Printf("\nDefinition array type frequencies:\n")
- printFrequencies(definitionArrayTypeFrequencies)
- fmt.Printf("\nDefinition primitive type frequencies:\n")
- printFrequencies(definitionPrimitiveTypeFrequencies)
- }
|