Skip to content

Commit d762e5d

Browse files
committed
#84 | configure google bigQuery api and executed call for dummy dataset
1 parent c35acf4 commit d762e5d

File tree

6 files changed

+137
-14
lines changed

6 files changed

+137
-14
lines changed

lahi/build.gradle

+19
Original file line numberDiff line numberDiff line change
@@ -31,18 +31,37 @@ repositories {
3131
mavenCentral()
3232
}
3333

34+
ext {
35+
set('springCloudGcpVersion', "2.0.9")
36+
set('springCloudVersion', "2020.0.3")
37+
}
38+
3439
dependencies {
3540
implementation project(':integration-data')
3641
implementation project(':avni')
3742
implementation project(':util')
3843
implementation "log4j:log4j:1.2.17"
44+
3945
testImplementation 'org.springframework.boot:spring-boot-starter-test'
4046
developmentOnly 'org.springframework.boot:spring-boot-devtools'
4147

4248
implementation 'org.springframework.boot:spring-boot-starter-web'
4349
testImplementation 'org.springframework.boot:spring-boot-starter-test'
4450
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
4551
implementation 'com.bugsnag:bugsnag-spring:3.6.3'
52+
53+
// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-gcp-starter
54+
implementation 'org.springframework.cloud:spring-cloud-gcp-starter:1.2.6.RELEASE'
55+
// https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-gcp-starter-bigquery
56+
implementation 'org.springframework.cloud:spring-cloud-gcp-starter-bigquery:1.2.6.RELEASE'
57+
58+
}
59+
60+
dependencyManagement {
61+
imports {
62+
mavenBom "com.google.cloud:spring-cloud-gcp-dependencies:${springCloudGcpVersion}"
63+
mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
64+
}
4665
}
4766

4867
test {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package org.avni_integration_service.lahi.config;
2+
3+
import com.google.cloud.bigquery.BigQuery;
4+
import org.slf4j.Logger;
5+
import org.slf4j.LoggerFactory;
6+
import org.springframework.beans.factory.annotation.Value;
7+
import org.springframework.stereotype.Component;
8+
9+
@Component
10+
public class BigQueryConnector {
11+
12+
private final Logger log = LoggerFactory.getLogger(BigQueryConnector.class);
13+
14+
private static final String DATASET_LOCATION = "US";
15+
16+
private final BigQuery bigQuery;
17+
18+
private final String dataSetName;
19+
20+
public BigQueryConnector(BigQuery bigQuery,
21+
@Value("${spring.cloud.gcp.bigquery.dataset-name}") String dataSetName) {
22+
this.bigQuery = bigQuery;
23+
this.dataSetName = dataSetName;
24+
}
25+
26+
public BigQuery getBigQuery() {
27+
return bigQuery;
28+
}
29+
30+
public String getDataSetName() {
31+
return dataSetName;
32+
}
33+
}

lahi/src/main/java/org/avni_integration_service/lahi/job/AvniLahiMainJob.java

+15-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66
import org.avni_integration_service.lahi.config.LahiAvniSessionFactory;
77
import org.avni_integration_service.lahi.worker.StudentWorker;
88
import org.avni_integration_service.util.HealthCheckService;
9-
import org.springframework.beans.factory.annotation.Autowired;
109
import org.springframework.stereotype.Component;
1110

1211
@Component
@@ -16,20 +15,25 @@ public class AvniLahiMainJob {
1615

1716
private static final String HEALTHCHECK_SLUG = "lahi";
1817

19-
@Autowired
20-
private Bugsnag bugsnag;
18+
private final Bugsnag bugsnag;
2119

22-
@Autowired
23-
private HealthCheckService healthCheckService;
20+
private final HealthCheckService healthCheckService;
2421

25-
@Autowired
26-
LahiAvniSessionFactory lahiAvniSessionFactory;
22+
private final LahiAvniSessionFactory lahiAvniSessionFactory;
2723

28-
@Autowired
29-
private AvniHttpClient avniHttpClient;
24+
private final AvniHttpClient avniHttpClient;
3025

31-
@Autowired
32-
private StudentWorker studentWorker;
26+
private final StudentWorker studentWorker;
27+
28+
public AvniLahiMainJob(Bugsnag bugsnag, HealthCheckService healthCheckService,
29+
LahiAvniSessionFactory lahiAvniSessionFactory, AvniHttpClient avniHttpClient,
30+
StudentWorker studentWorker) {
31+
this.bugsnag = bugsnag;
32+
this.healthCheckService = healthCheckService;
33+
this.lahiAvniSessionFactory = lahiAvniSessionFactory;
34+
this.avniHttpClient = avniHttpClient;
35+
this.studentWorker = studentWorker;
36+
}
3337

3438
public void execute() {
3539
try {

lahi/src/main/java/org/avni_integration_service/lahi/repository/GlificRepository.java

+8-2
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,21 @@
11
package org.avni_integration_service.lahi.repository;
22

33
import org.apache.log4j.Logger;
4+
import org.springframework.beans.factory.annotation.Qualifier;
45
import org.springframework.stereotype.Component;
6+
import org.springframework.web.client.RestTemplate;
57

68
@Component
79
public class GlificRepository {
810

911
private static final Logger logger = Logger.getLogger(GlificRepository.class);
1012

11-
public GlificRepository( ) {
12-
// todo
13+
private final RestTemplate lahiRestTemplate;
14+
15+
public GlificRepository(@Qualifier("LahiRestTemplate") RestTemplate restTemplate) {
16+
// todo, remove if not needed this whole repository
17+
this.lahiRestTemplate = restTemplate;
18+
1319
}
1420

1521

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.avni_integration_service.lahi.service;
2+
3+
import com.google.cloud.bigquery.*;
4+
import org.avni_integration_service.lahi.config.BigQueryConnector;
5+
import org.springframework.stereotype.Service;
6+
7+
import java.util.UUID;
8+
9+
@Service
10+
public class DataExtractorService {
11+
12+
private final BigQueryConnector bigQueryConnector;
13+
14+
public DataExtractorService( BigQueryConnector bigQueryConnector) {
15+
this.bigQueryConnector = bigQueryConnector;
16+
}
17+
18+
public void queryToBigQuery(String sqlQuery) throws InterruptedException {
19+
20+
QueryJobConfiguration queryConfig =
21+
QueryJobConfiguration.newBuilder(
22+
sqlQuery)
23+
.setUseLegacySql(false)
24+
.build();
25+
26+
// Create a job ID so that we can safely retry.
27+
JobId jobId = JobId.of(UUID.randomUUID().toString());
28+
Job queryJob = bigQueryConnector.getBigQuery().create(JobInfo.newBuilder(queryConfig).setJobId(jobId).build());
29+
30+
// Wait for the query to complete.
31+
queryJob = queryJob.waitFor();
32+
33+
// Check for errors
34+
if (queryJob == null) {
35+
throw new RuntimeException("Job no longer exists");
36+
} else if (queryJob.getStatus().getError() != null) {
37+
// You can also look at queryJob.getStatus().getExecutionErrors() for all
38+
// errors, not just the latest one.
39+
throw new RuntimeException(queryJob.getStatus().getError().toString());
40+
}
41+
42+
// Get the results.
43+
TableResult result = queryJob.getQueryResults();
44+
45+
// TODO return result set
46+
// Print all pages of the results.
47+
for (FieldValueList row : result.iterateAll()) {
48+
// String type
49+
String name = row.get("name").getStringValue();
50+
String age = row.get("age").getNumericValue().toPlainString();
51+
System.out.printf("%s is of the age %s \n", name, age);
52+
}
53+
}
54+
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,22 @@
11
package org.avni_integration_service.lahi.worker;
22

33
import org.apache.log4j.Logger;
4+
import org.avni_integration_service.lahi.service.DataExtractorService;
45
import org.springframework.stereotype.Component;
56

67
@Component
78
public class StudentWorker {
89
private static final Logger logger = Logger.getLogger(StudentWorker.class);
10+
private final DataExtractorService dataExtractorService;
11+
12+
public StudentWorker(DataExtractorService dataExtractorService) {
13+
this.dataExtractorService = dataExtractorService;
14+
}
915

1016

11-
public void fetchDetails(){
17+
public void fetchDetails() throws InterruptedException {
1218
//TODO
1319
logger.info("fetch detail working !!!!!!!!!!");
20+
dataExtractorService.queryToBigQuery("SELECT name, age FROM `ringed-prism-398304.covid_19_open_data.doctor` LIMIT 1000");
1421
}
1522
}

0 commit comments

Comments
 (0)