Usage

SocFlow API의 사용량과 작업 통계를 조회할 수 있습니다. 이 엔드포인트를 통해 API 호출 통계, 엔드포인트별 사용량, 작업(Job) 실행 통계 등을 확인할 수 있습니다.

사용량 데이터는 실시간으로 집계되며, 기간을 지정하여 특정 기간의 통계만 조회할 수도 있습니다. 이 정보는 API 사용 패턴 분석과 최적화에 유용합니다.


GET/v1/usage

API 사용량 조회

이 엔드포인트는 현재 사용자의 API 사용량 통계를 반환합니다. API 호출 횟수, 성공/실패 비율, 응답 시간, 작업 실행 통계 등이 포함됩니다.

인증

이 엔드포인트는 인증이 필요합니다. API 키를 X-Secret-Token 헤더에 포함해야 합니다.

요청

GET
/v1/usage
curl --location 'https://api.socflow.app/api/v1/usage' \
--header 'X-Secret-Token: {YOUR_API_KEY}'

응답

200
OK
{
  "success": true,
  "data": {
    "api_usage": {
      "total_requests": 150,
      "successful_requests": 145,
      "failed_requests": 5,
      "total_duration_ms": 87500,
      "average_duration_ms": 583,
      "by_endpoint": [
        {
          "endpoint": "/api/v1/posts",
          "method": "POST",
          "count": 45,
          "successful_count": 43,
          "failed_count": 2
        },
        {
          "endpoint": "/api/v1/accounts/social",
          "method": "GET",
          "count": 38,
          "successful_count": 38,
          "failed_count": 0
        },
        {
          "endpoint": "/api/v1/media",
          "method": "POST",
          "count": 25,
          "successful_count": 24,
          "failed_count": 1
        }
      ],
      "by_status_code": [
        {
          "status_code": 200,
          "count": 120
        },
        {
          "status_code": 201,
          "count": 25
        },
        {
          "status_code": 400,
          "count": 3
        },
        {
          "status_code": 500,
          "count": 2
        }
      ]
    },
    "job_usage": {
      "total_jobs": 45,
      "container_jobs_usage": {
        "total": 20,
        "completed": 19,
        "failed": 1,
        "pending": 0,
        "average_duration_ms": 4200
      },
      "carousel_jobs_usage": {
        "total": 5,
        "completed": 5,
        "failed": 0,
        "pending": 0,
        "average_duration_ms": 3800
      },
      "publish_jobs_usage": {
        "total": 20,
        "completed": 19,
        "failed": 1,
        "pending": 0,
        "average_duration_ms": 2100
      },
      "by_job_type": [
        {
          "job_type": "container_create",
          "total": 20,
          "completed": 19,
          "failed": 1,
          "pending": 0,
          "average_duration_ms": 4200
        },
        {
          "job_type": "publish_content",
          "total": 20,
          "completed": 19,
          "failed": 1,
          "pending": 0,
          "average_duration_ms": 2100
        },
        {
          "job_type": "carousel_upload",
          "total": 5,
          "completed": 5,
          "failed": 0,
          "pending": 0,
          "average_duration_ms": 3800
        }
      ]
    },
    "period": {
      "start_date": null,
      "end_date": null
    }
  }
}

쿼리 파라미터

사용량을 조회할 기간을 지정할 수 있습니다.

  • Name
    start_date
    Type
    number
    Description

    (선택) 조회 시작 시각 (Unix timestamp, milliseconds). 이 값 이후의 데이터만 포함됩니다.

  • Name
    end_date
    Type
    number
    Description

    (선택) 조회 종료 시각 (Unix timestamp, milliseconds). 이 값 이전의 데이터만 포함됩니다.

기간 필터링 예시

# 2024년 1월 1일 ~ 1월 31일 데이터 조회
curl --location 'https://api.socflow.app/api/v1/usage?start_date=1704067200000&end_date=1706745600000' \
--header 'X-Secret-Token: {YOUR_API_KEY}'

응답 필드

API Usage 객체

  • Name
    total_requests
    Type
    number
    Description

    전체 API 요청 수

  • Name
    successful_requests
    Type
    number
    Description

    성공한 요청 수 (HTTP 2xx, 3xx)

  • Name
    failed_requests
    Type
    number
    Description

    실패한 요청 수 (HTTP 4xx, 5xx)

  • Name
    total_duration_ms
    Type
    number
    Description

    전체 요청 처리 시간 (밀리초)

  • Name
    average_duration_ms
    Type
    number
    Description

    평균 요청 처리 시간 (밀리초)

  • Name
    by_endpoint
    Type
    array
    Description

    엔드포인트별 사용량 배열

  • Name
    by_status_code
    Type
    array
    Description

    HTTP 상태 코드별 요청 수 배열

Endpoint Usage 객체

  • Name
    endpoint
    Type
    string
    Description

    엔드포인트 경로 (예: /api/v1/posts)

  • Name
    method
    Type
    string
    Description

    HTTP 메소드 (GET, POST, PUT, DELETE)

  • Name
    count
    Type
    number
    Description

    해당 엔드포인트의 총 요청 수

  • Name
    successful_count
    Type
    number
    Description

    성공한 요청 수

  • Name
    failed_count
    Type
    number
    Description

    실패한 요청 수

Job Usage 객체

  • Name
    total_jobs
    Type
    number
    Description

    전체 작업 수

  • Name
    container_jobs_usage
    Type
    object
    Description

    미디어 컨테이너 생성 작업 통계

  • Name
    carousel_jobs_usage
    Type
    object
    Description

    캐러셀(다중 이미지) 업로드 작업 통계

  • Name
    publish_jobs_usage
    Type
    object
    Description

    게시물 발행 작업 통계

  • Name
    by_job_type
    Type
    array
    Description

    작업 타입별 통계 배열

Job Type Usage 객체

  • Name
    job_type
    Type
    string
    Description

    작업 타입 (container_create, carousel_upload, publish_content)

  • Name
    total
    Type
    number
    Description

    전체 작업 수

  • Name
    completed
    Type
    number
    Description

    완료된 작업 수

  • Name
    failed
    Type
    number
    Description

    실패한 작업 수

  • Name
    pending
    Type
    number
    Description

    대기 중인 작업 수

  • Name
    average_duration_ms
    Type
    number | null
    Description

    평균 처리 시간 (밀리초). 작업이 없으면 null


사용 예시

월별 사용량 조회

async function getThisMonthUsage() {
  const now = new Date()
  const startOfMonth = new Date(now.getFullYear(), now.getMonth(), 1)
  const startDate = startOfMonth.getTime()

  const response = await fetch(
    `https://api.socflow.app/api/v1/usage?start_date=${startDate}`,
    {
      headers: {
        'X-Secret-Token': process.env.SOCFLOW_API_KEY,
      },
    },
  )

  const result = await response.json()
  return result.data
}

const usage = await getThisMonthUsage()
console.log(`이번 달 API 호출: ${usage.api_usage.total_requests}회`)
console.log(
  `성공률: ${((usage.api_usage.successful_requests / usage.api_usage.total_requests) * 100).toFixed(1)}%`,
)

사용량 대시보드 구현

async function createUsageDashboard() {
  const response = await fetch('https://api.socflow.app/api/v1/usage', {
    headers: {
      'X-Secret-Token': process.env.SOCFLOW_API_KEY,
    },
  })

  const result = await response.json()
  const { api_usage, job_usage } = result.data

  console.log('=== API 사용량 대시보드 ===\n')

  // API 통계
  console.log('📊 API 통계:')
  console.log(`  총 요청: ${api_usage.total_requests}`)
  console.log(`  성공: ${api_usage.successful_requests}`)
  console.log(`  실패: ${api_usage.failed_requests}`)
  console.log(`  평균 응답시간: ${api_usage.average_duration_ms}ms\n`)

  // 가장 많이 사용된 엔드포인트 TOP 3
  console.log('🔝 TOP 3 엔드포인트:')
  api_usage.by_endpoint.slice(0, 3).forEach((endpoint, index) => {
    console.log(
      `  ${index + 1}. ${endpoint.method} ${endpoint.endpoint}: ${endpoint.count}회`,
    )
  })
  console.log('')

  // 작업 통계
  console.log('⚙️ 작업 통계:')
  console.log(`  총 작업: ${job_usage.total_jobs}`)
  console.log(
    `  미디어 컨테이너: ${job_usage.container_jobs_usage.completed}/${job_usage.container_jobs_usage.total}`,
  )
  console.log(
    `  게시물 발행: ${job_usage.publish_jobs_usage.completed}/${job_usage.publish_jobs_usage.total}`,
  )
  console.log('')

  return result.data
}

await createUsageDashboard()

에러율 모니터링

async function monitorErrorRate() {
  const response = await fetch('https://api.socflow.app/api/v1/usage', {
    headers: {
      'X-Secret-Token': process.env.SOCFLOW_API_KEY,
    },
  })

  const result = await response.json()
  const { api_usage } = result.data

  const errorRate = (api_usage.failed_requests / api_usage.total_requests) * 100

  console.log(`에러율: ${errorRate.toFixed(2)}%`)

  // 에러율이 5% 이상이면 경고
  if (errorRate > 5) {
    console.warn('⚠️ 경고: 에러율이 높습니다!')

    // 상태 코드별 분석
    console.log('\n상태 코드 분포:')
    api_usage.by_status_code.forEach((status) => {
      console.log(`  ${status.status_code}: ${status.count}회`)
    })
  }

  return errorRate
}

await monitorErrorRate()

Was this page helpful?