Skip to content

Commit

Permalink
Commit small changes before switching branches
Browse files Browse the repository at this point in the history
  • Loading branch information
ccali11 committed Aug 22, 2023
1 parent aee5b92 commit 765f6a2
Show file tree
Hide file tree
Showing 3 changed files with 52 additions and 14 deletions.
2 changes: 1 addition & 1 deletion apps/web/src/composables/contracts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ export default function useContracts() {
const stakedDepositedETH = userEventTotalsSum.StakeDeposited
const withdrawalInitiatedETH = userEventTotalsSum.WithdrawalInitiated

/* Get User's All Time Rewards by Subtracting (StakeDesposited + WithdrawalInitiated) from CurrentStake */
/* Get User's All Time Rewards by Subtracting (StakeDeposited + WithdrawalInitiated) from CurrentStake */
const currentUserStakeMinusEvents = currentUserStakeETH - (stakedDepositedETH as number) - (withdrawalInitiatedETH as number)
return {
eth: `${formatNumber(currentUserStakeMinusEvents)} ETH`,
Expand Down
19 changes: 14 additions & 5 deletions apps/web/src/composables/users.ts
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,7 @@ export default function useUsers() {

function computeUserAnalytics() {
// const result = userAnalytics.value
console.log('rawUserAnalytics in computeAnalytics :>> ', rawUserAnalytics)
const sortedTransactions = rawUserAnalytics.value.sort((a: any, b: any) => {
new Date(a.receivedAt).getTime() - new Date(b.receivedAt).getTime()
})
Expand Down Expand Up @@ -237,16 +238,24 @@ export default function useUsers() {
}
}
// TODO: Re-enable this when athena is ready
// const response = await fetch(`${usersUrl}/analytics`, requestOptions)
// const { error, message, data } = await response.json()
const error = false
const message = 'User analytics found'
const data = txData.value
const response = await fetch(`${usersUrl}/analytics`, requestOptions)
const { error, message, data } = await response.json()
console.log('data from analytics :>> ', data)
// const error = false
// const message = 'User analytics found'

// TODO: Get events, actions, and contract data from the API
// Then format the data to be used in the charts (see computeUserAnalytics) and give to Steve.

// We get the user's analytics (wallet balance) data here.
// const data = txData.value

if (error) throw new Error(message)

// TODO: Pass data from above when the API / data is ready
setRawAnalytics(data)

// This compute's the user's wallet balance over time
computeUserAnalytics()
return { error, message, data }
} catch (error: any) {
Expand Down
45 changes: 37 additions & 8 deletions services/users/src/routes/analytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,35 @@ import { verifySession } from 'supertokens-node/recipe/session/framework/express
import { SessionRequest } from 'supertokens-node/framework/express'
import useDB from '../providers/db'
import { query } from 'athena-query'
import { UserWithAccountsAndOperators } from '@casimir/types'

const router = express.Router()

const { formatResult, getUserById } = useDB()

router.get('/', verifySession(), async (req: SessionRequest, res: express.Response) => {
try {
console.log('got to athena route')
// Two tables
// Events
// any events on the blockchain (including the block itself)
// so all txs + 1 for block
// Athena currently has all of this Goerli tx data
// Actions <-- this is the one we want for Overview Chart
// contract data (StakeDeposited, Withdrawal, etc.)
// includes tx data (outgoing, incoming, etc.)
const id = req.session?.getUserId() as string
const userId = id.toString()
const user = await getUserById(userId)
const { accounts } = user
const { accounts } = user as UserWithAccountsAndOperators
const addresses = accounts.map((account) => account.address)
const database = 'casimir_analytics_database_dev'
const athenaTable = 'casimir_analytics_action_table_dev1'
const opt = {
profile: process.env.AWS_PROFILE as string,
database,
output: 's3://casimir-analytics-wallet-bucket-dev1/',
// output: 's3://casimir-analytics-wallet-bucket-dev1/',
output: 's3://casimir-analytics-action-bucket-dev1/',
workgroup: 'primary',
catalog: 'AwsDataCatalog',
backoff: 1000,
Expand All @@ -37,14 +48,32 @@ router.get('/', verifySession(), async (req: SessionRequest, res: express.Respon
* price
* gas_fee
*/
const stmt = `
SELECT * FROM ${database}.${athenaTable}
WHERE address IN (${addresses.map((address) => `'${address}'`).join(',')})
// TODO: Include type in WHERE to decrease query time
// const testStmt = 'SELECT * FROM "casimir_analytics_action_table_dev1" limit 10;'
// const stmt = `
// SELECT * FROM ${database}.${athenaTable}
// WHERE address IN (${addresses.map((address: string) => `'${address}'`).join(',')})
// ORDER BY received_at DESC
// LIMIT 100;
// `
// const { rows } = await query(testStmt, opt)
// console.log('rows :>> ', rows)
console.log('addresses :>> ', addresses)
const stmt = `SELECT * FROM "casimir_analytics_database_dev"."casimir_analytics_action_table_dev1"
WHERE "address" IN (${addresses.map((address: string) => `'${address}'`).join(',')})
ORDER BY received_at DESC
LIMIT 100
`
const { rows } = query(stmt, opt)
LIMIT 100;`
const [columns, rows ] = await query(stmt, {
database: 'casimir_analytics_database_dev',
workgroup: 'primary',
profile: 'consensus-networks-dev',
output: 's3://cms-lds-agg/cms_hcf_aggregates/',
catalog: 'AwsDataCatalog',
backoff: 1000,
region: 'us-east-2',
})
const data = formatResult(rows)
console.log('data :>> ', data)
res.status(200).json({
error: false,
message: 'Analytics data successfully fetched.',
Expand Down

0 comments on commit 765f6a2

Please sign in to comment.