# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you 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.

# Represent the conditions used for query BrowserErrorLogBrief
input BrowserErrorLogQueryCondition {
    # The value of 0 means all services.
    serviceId: ID
    serviceVersionId: ID
    pagePathId: ID
    category: ErrorCategory
    # The time range of browser perf data time
    queryDuration: Duration
    paging: Pagination!
}

# The list of browser error log
type BrowserErrorLogs {
    logs: [BrowserErrorLog!]!
    total: Int!
}

# Represent the browser error log
type BrowserErrorLog {
    service: String!
    serviceVersion: String!
    time: Long!
    pagePath: String!
    category: ErrorCategory!
    grade: String
    message: String
    line: Int
    col: Int
    stack: String
    errorUrl: String
    firstReportedError: Boolean!
}

enum ErrorCategory {
    ALL,
    AJAX,
    RESOURCE,
    VUE,
    PROMISE,
    JS,
    UNKNOWN
}

extend type Query {
    queryBrowserErrorLogs(condition: BrowserErrorLogQueryCondition): BrowserErrorLogs
}
