Swiftpack.co - jorge-ramirez/NewRelicQueryKit as Swift Package

Swiftpack.co is a collection of thousands of indexed Swift packages. Search packages.
See all packages published by jorge-ramirez.
jorge-ramirez/NewRelicQueryKit 0.0.4
Swift Package for performing New Relic Queries
⭐️ 0
🕓 2 years ago
iOS macOS
.package(url: "https://github.com/jorge-ramirez/NewRelicQueryKit.git", from: "0.0.4")

NewRelicQueryKit

A package for supporting NewRelic queries.

Table of Contents

Overview

To create a query, use a QueryBuilder object. Here's an Example:

let query = QueryBuilder()
    .select("name", label: "Customer Name")
    .select("age")
    .from("Customers")
    .where(
        .or(
            .attribute("age", lessThan: 13),
            .attribute("age", greaterThan: 19)
        )
    )
    .orderBy("age", .descending)
    .since(5, .day)
    .until(.now)
    .timezone(.utc)
    .build()

Which generates the following query:

SELECT name AS 'Customer Name', age FROM Customers WHERE age < 13 OR age > 19 ORDER BY age DESC SINCE 5 DAY AGO UNTIL NOW WITH TIMEZONE 'UTC'

To execute the query, use a NewReliceService object. Here's an Example using the query from above:

let service = NewRelicService(accountId: "XXX", queryKey: "XXX")
let results = try await service.eventsForQuery(query)

If you have a Decodable type for your events, you can use the decodedEventsForQuery method instead:

let results: [MyEventType] = try await service.decodedEventsForQuery(query)

SELECT Clause

Select an attribute

QueryBuilder()
    .select("name")
    .from("Customers")
    .build()
SELECT name FROM Customers

Select an attribute with a label

QueryBuilder()
    .select("name", label: "Customer Name")
    .from("Customers")
    .build()
SELECT name AS 'Customer Name' FROM Customers

Select a function and attribute

QueryBuilder()
    .selectFunction("AVG", attribute: "age")
    .from("Customers")
    .build()
SELECT AVG(age) FROM Customers

Select a function and attribute with a label

QueryBuilder()
    .selectFunction("AVG", attribute: "age", label: "Customer Age")
    .from("Customers")
    .build()
SELECT AVG(age) AS 'Customer Age' FROM Customers

FROM Clause

Specify a data type

QueryBuilder()
    .select("name")
    .from("Customers")
    .build()
SELECT name FROM Customers

FACET Clause

Specify an attribute

QueryBuilder()
    .selectFunction("COUNT", attribute: "zipcode")
    .from("Customers")
    .facet("zipcode")
    .build()
SELECT COUNT(zipcode) FROM Customers FACET zipcode

Specify an attribute with a label

QueryBuilder()
    .selectFunction("COUNT", attribute: "zipcode")
    .from("Customers")
    .facet("zipcode", label: "Customer Zipcode")
    .build()
SELECT COUNT(zipcode) FROM Customers FACET zipcode AS 'Customer Zipcode'

LIMIT Clause

Specify a count

QueryBuilder()
    .select("name")
    .from("Customers")
    .limit(25)
    .build()
SELECT name FROM Customers LIMIT 25

Specify the max limit

QueryBuilder()
    .select("name")
    .from("Customers")
    .limit(Limit.max)
    .build()
SELECT name FROM Customers LIMIT MAX

OFFSET Clause

Specify a count

QueryBuilder()
    .select("name")
    .from("Customers")
    .limit(25)
    .offset(25)
    .build()
SELECT name FROM Customers LIMIT 25 OFFSET 25

ORDER BY Clause

Specify an attribute (the default sort direction is ascending)

QueryBuilder()
    .select("name")
    .from("Customers")
    .orderBy("age")
    .build()
SELECT name FROM Customers ORDER BY age ASC

Specify an attribute and sort direction

QueryBuilder()
    .select("name")
    .from("Customers")
    .orderBy("age", .descending)
    .build()
SELECT name FROM Customers ORDER BY age DESC

SINCE Clause

Specify the current time

QueryBuilder()
    .select("name")
    .from("Customers")
    .since(.now)
    .build()
SELECT name FROM Customers SINCE NOW

Specify a relative day

  • today
  • yesterday
  • sunday
  • monday
  • tuesday
  • wednesday
  • thursday
  • friday
  • saturday
QueryBuilder()
    .select("name")
    .from("Customers")
    .since(.thursday)
    .build()
SELECT name FROM Customers SINCE THURSDAY

Specify a relative value and unit

  • second
  • minute
  • hour
  • day
  • week
  • month
  • quarter
  • year
QueryBuilder()
    .select("name")
    .from("Customers")
    .since(6, .hour)
    .build()
SELECT name FROM Customers SINCE 6 HOUR AGO

Specify a date

// Sat Mar 26 19:10:37 2022 UTC
let date = Date(timeIntervalSince1970: 1648321837)

QueryBuilder()
    .select("name")
    .from("Customers")
    .since(date)
    .build()
SELECT name FROM Customers SINCE '2022-03-26 19:10:37 +0000'

UNTIL Clause

Until accepts the same values as Since. Simply use .until(...) instead of .since(...).

WHERE Clause

Use an operator

  • equalTo
  • notEqualTo
  • lessThan
  • lessThanOrEqualTo
  • greaterThan
  • greaterThanOrEqualTo
  • in
  • notIn
  • isNull
  • isNotNull
  • like
  • notLike
QueryBuilder()
    .select("name")
    .from("Customers")
    .where(.attribute("age", greaterThanOrEqualTo: 18))
    .build()
SELECT name FROM Customers WHERE age >= 18

Use a compound operator (AND and OR)

QueryBuilder()
    .select("name")
    .from("Customers")
    .where(
        .and(
          .attribute("age", greaterThanOrEqualTo: 18),
          .attributeIsNotNull("emailAddress")
        )
    )
    .build()
SELECT name FROM Customers WHERE age >= 18 AND emailAddress IS NOT NULL

WITH TIMEZONE Clause

Specify a timezone

Currently, only UTC is available.

QueryBuilder()
    .select("name")
    .from("Customers")
    .timezone(.utc)
    .build()
SELECT name FROM Customers WITH TIMEZONE 'UTC'

GitHub

link
Stars: 0
Last commit: 2 years ago
Advertisement: IndiePitcher.com - Cold Email Software for Startups

Release Notes

v0.0.4
2 years ago

Exposed jsonForQuery method and included a closure based variant.

Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics