A package for supporting NewRelic queries.
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)
QueryBuilder()
.select("name")
.from("Customers")
.build()
SELECT name FROM Customers
QueryBuilder()
.select("name", label: "Customer Name")
.from("Customers")
.build()
SELECT name AS 'Customer Name' FROM Customers
QueryBuilder()
.selectFunction("AVG", attribute: "age")
.from("Customers")
.build()
SELECT AVG(age) FROM Customers
QueryBuilder()
.selectFunction("AVG", attribute: "age", label: "Customer Age")
.from("Customers")
.build()
SELECT AVG(age) AS 'Customer Age' FROM Customers
QueryBuilder()
.select("name")
.from("Customers")
.build()
SELECT name FROM Customers
QueryBuilder()
.selectFunction("COUNT", attribute: "zipcode")
.from("Customers")
.facet("zipcode")
.build()
SELECT COUNT(zipcode) FROM Customers FACET zipcode
QueryBuilder()
.selectFunction("COUNT", attribute: "zipcode")
.from("Customers")
.facet("zipcode", label: "Customer Zipcode")
.build()
SELECT COUNT(zipcode) FROM Customers FACET zipcode AS 'Customer Zipcode'
QueryBuilder()
.select("name")
.from("Customers")
.limit(25)
.build()
SELECT name FROM Customers LIMIT 25
QueryBuilder()
.select("name")
.from("Customers")
.limit(Limit.max)
.build()
SELECT name FROM Customers LIMIT MAX
QueryBuilder()
.select("name")
.from("Customers")
.limit(25)
.offset(25)
.build()
SELECT name FROM Customers LIMIT 25 OFFSET 25
QueryBuilder()
.select("name")
.from("Customers")
.orderBy("age")
.build()
SELECT name FROM Customers ORDER BY age ASC
QueryBuilder()
.select("name")
.from("Customers")
.orderBy("age", .descending)
.build()
SELECT name FROM Customers ORDER BY age DESC
QueryBuilder()
.select("name")
.from("Customers")
.since(.now)
.build()
SELECT name FROM Customers SINCE NOW
QueryBuilder()
.select("name")
.from("Customers")
.since(.thursday)
.build()
SELECT name FROM Customers SINCE THURSDAY
QueryBuilder()
.select("name")
.from("Customers")
.since(6, .hour)
.build()
SELECT name FROM Customers SINCE 6 HOUR AGO
// 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 accepts the same values as Since. Simply use .until(...)
instead of .since(...)
.
QueryBuilder()
.select("name")
.from("Customers")
.where(.attribute("age", greaterThanOrEqualTo: 18))
.build()
SELECT name FROM Customers WHERE age >= 18
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
Currently, only UTC is available.
QueryBuilder()
.select("name")
.from("Customers")
.timezone(.utc)
.build()
SELECT name FROM Customers WITH TIMEZONE 'UTC'
link |
Stars: 0 |
Last commit: 2 years ago |
Exposed jsonForQuery method and included a closure based variant.
Swiftpack is being maintained by Petr Pavlik | @ptrpavlik | @swiftpackco | API | Analytics